JOHANNES WOLFRAM UBBEN
UNDERGRADUATE PORTFOLIO
by JOHANNES WOLFRAM UBBEN
INDEX
Interior Thesis 6
Library additon in Stockholm
Minor Projects 44
Light as seperator and connector.
Boathouse in Montgomery A cut in the Landscape to access the river below.
46
Train station in Auburn Providing a parametric, suburban transportation node
Major Projects 18
Bursa LocantasI (Restaurant)
Design - Build 50
Rennovation of a 15th century turkish bath.
24
Mixed use mid-rise in Chicago
Short term guest quarters for the Rural Studio.
52
Bending the grid to create a new language in an existing System.
32
Columbarium at Woodruff Park Science and History Museum in Columbus Tying the city of Columbus together
Parking lot intervention in Opelika Low cost transformation of a institutional parking lot.
Skill and Craft
Public space with meaning for Atlanta.
40
Motelpod at Rural Studio
58
Diverse Projects and Graphics Diverse other example of works.
64
Resume
Interior Thesis
It is only light that reveals a building to the world.
PAGE 6
Library Addition In Stockholm An addition to Gunner Asplund’s 1931 Stockholm City library • Original concept by Asplund:
The establishment of an institution in Sweden. Building needed to be referential to past and future.
• Formal concept for addition:
Clear circulation; Light as separator and connector; Make ‘grand-space’ as tribute to original building.
• Design approach:
Clear circulation; touching the original buildings lightly with glass cages, creating spaces of transition.
Stockholm, Sweden
Stadsbibliotek Stockholm, Sweden
2010 - Summer Studio Dagg / Miller
PAGE 7
PAGE 8
An addition to Gunnar Asplund’s 1931 Stockholm City library
Site as is
In an international competition, the city of Stockholm asked for proposals for an new entrance, connector, grand reading room and stacks to Gunnar Asplund’s 1931 Stockholm city library. The orignal building, an orange rotunda inscribed in an cuboid that is slightly tilted off the grid of the surrounding city. The building is both modern but also has references to antique (Egyptian and Greek) public buildings. The begininngs of a public library system was an essential step after establishing a constitutional monarchy in Sweden, in effect transfering the power to the people, meaning that public access to information had to be guaranteed. The building itself is therefore a symbol for the beginning of a democratic tradition in Sweden. Therefore the question is posed: How to interact with a building like this? How to add to it? Copy its style or do something entierly different?
Proposal
PAGE 9
2.
7. 8.
3. 1. 4.
5.
6.
Key 1. Asplunds Library 2. Typical room with light-well 3. New main reading room 4. Main central stair. 5. New entrance. 6. New cafe. 7. New entrance plaza. 8. Existing annex.
First Floor Plan
N 1’ 5’ 10’
20’
50’
100’
200’
PAGE 10
Connecting to original Building
PAGE 11 1. Setting design parameters • The building is to touch Asplunds building lightly • The addition needs to be simple in circulation and diagram • The building should pay tribute to Asplunds library by providing a direct view of the rotunda • There should be a unified language in structure • The building needs to have a limited, yet effective pallette of colors • The connections are to create moments of light to heighten awareness of the users
Entrance
Typical stack room
PAGE 12
2. Concept for a structural system
System supporting typical light well
I decided on a unified system of a singular aluminum extrusions that would be the work horse of the project. This system is applied to most aspects of the projects needing a light framework, such as interior siding, light fixtures, custom furniture such as shelves and desks, and all of the major glass This eo hold up shelves, reading desks; both mobile and built-in, stairs and glass walls.
Frame holding Bookshelf
Frame holding mobile and fixed reading tables
PAGE 13
3. Design-development through photorealistic rendering The method used to develope the main reading space is a cycle of creating various proposals for lighting, - evaluating these in sketch and drawing - creating a computer model, then refining this model - rendering and testing - reevaluating the output and restarting the process with a more refinded base proposal. If the base idea is workable this process can quickly show visual issues and positive aspects of the spaces created, it will quickly point out errors in logic that can and will occur if the work is just being done in diagram. LEFT: A series of renderings done during the project, - These visualizations of the then current state of the project help to quickly refine key moments and spaces.
PAGE 14
Left: Reading Room Right: Reading Room from stairways
PAGE 15
Major Projects
There is no such thing as wasted work.
PAGE 18
Bursa LocantasI (Restaurant) Rennovation a 15th century turkish bath in Bursa, Turkey Key problems of the project:
A. B. C.
Finding an appropriate program to reuse a 15th century turkish bath with. Understanding the surrounding city, its circulation and how this affects my building. Creating an appropriate response that has its own character but does not offend.
Restaurant Bursa, Turkey
2010 - Spring Abdulla / Orgen
PAGE 19
PAGE 20 Bursa, Turkey
N
N 1’
5’
10’
20’
50’
100’
PAGE 21 1
2
3
Program: Understanding ‘Lokantası’
A. To understand the Turkish restaurant type of Locantası (a type of neighborhood
buffet) that I choose for my program I visited three of these popular establishments in Istanbul: 1 Kanaat Lokantası 2 Hacı abdullah Lokantası and 3 Karakoy Lokantası - all three located in different neighborhoods. From these visits I learned that a lokantası serves as a buffet or restaurant for the local neighborhood. All foods sold are displayed in brightly displayed cases either in or outside the restaurant. The kitchen is clearly visible from the eating area and often times one can order directly from the chef. - Being able to proof that your kitchen is of high quality is very important. Site: Medival City, Medival Structure
B. The geography of Bursa is very different than that of a american or other western city. The city used to be the medival capital of Sultan Ahmets empire before the conquest of Constantinople.
The medival center of the city is very dense, only a few thoroughfares have been cut to accommodate modern vehicular traffic. The only sorting mechanisms are the mosques that are spread evenly and connect the city in a series of plazas. The Site, the Hamam is located near the center and on the intersection of two major throughfares. The building my restaurant will occupy is a Hamam, a turkish bath, built in the 15th century. This building type has two important (for my project) features: A very strong sequence (Clean, hot, cold, Clean) and rooms that are centric and monumental.
Attempt to visualize the project
PAGE 22 BURSA LOKANTASI
C. Since I could not manipulate the structure
of the building much, I decided to work with the surfaces instead. - An approach common in Byzanthine-era architecture.
Private Dining Rooms
A hamam has a strong sequence and is basically about the cleansing of its users. The restaurant should keep this aspect and I decided to have an artificial river run from a fountain at the front entrance to the fountain of the back patio. Every aspect is organized around the dialectics created by this split. The food is prepared in the ‘new’ kitchen with new walls, while the consumption is done in the rougher, original treated rooms of the building. The guest has the choice of either just picking up food, eating food at the buffet, getting a seat in the restaurant or just to enjoy a tea in the back yard.
Cold Buffet
Stand-up Tables
Hot Buffet
Food Display
Management
PAGE 23
New Kitchen
Outside Tea Kitchen
Outside Seating
Restrooms
PAGE 24
Mixed use mid-rise in Chicago, IL Breaking the Grid: Interacting with the city What does it mean to build a building in a city like Chicago? As in most of the midwest USA, the grid is omnipresent in Chicago. We were tasked to design a mixed use high rise, consisting of a gym, a public theater and a mid-rise apartment building. I tried to investigate what happens if one formalizes the grid, re-routes, stretches and twists it to be subsidiary to the needs of the people living in it, without actually ignoring or upsetting the pattern of the city.
Mid-Rise Chicago, Illinois
2009 - Fall Studio Sproull
PAGE 25
PAGE 26
CHICAGO, IL: Gold Coast
Entrance Level
N 1’
5’
10’
20’
50’
100’
200’
PAGE 27
10th Floor - Cafe and Typical Residental 10th Floor
3rd Floor - Pool and Theater
2nd Floor: Fitness and Theater Lobby
PAGE 28
Rush and North Cedar Streetfront
PAGE 29
Developement:
Inner Courtyard and Entry to tower
The City of Chicago was initially planned as a concise grid, with avenues running diagonally, disturbing the order to create nodes and set a hierarchy within the pattern. The way this project approaches the problem is that while the whole building is based on a rigid grid, the introduction of a centralized retail and circulation core that connects public and private areas of the structure with each other. By rotating the floors accordingly to their connection with the residential block, the grid of the building is being deformed and creates a sculptural element.
Early Model illustrating circulation
Early Sketch for tower
PAGE 30
Circulation Tower Residental Space
Concept of the circulaion tower The City of Chicago was initially planned as a concise grid, with avenues running diagonally, disturbing the order to create nodes and set a hierarchy within the pattern. The way this project approaches the problem is that while the whole building is based on a rigid grid, the introduction of a centralized retail and circulation core that connects public and private areas of the structure with each other.
Theater
By rotating the floors accordingly to their connection with the residential block, the grid of the building is being deformed and creates a sculptural element.
Retail
Cafe on top of the tower
Lobby
PAGE 31 Cafe
Convenience Store
Pool and Gym
Parking Entrance
PAGE 32
Columbarium At Woodruff Park Providing a public space with meaning to Atlanta Atlanta as a city is oriented around the flow of interstates I-75/I-85 and I20. Owning to this car-centric orientation is a place that is dense at its core, but as a whole not organized on a human scale. Few parks spot the downtown, and the ones that exist seem to fail to address the needs of the city for new nodes of activity and importance. This project aims at giving Atlanta another needed public space, a small urban park area with an Columbarium - that both provides meening for the residents and offers a place of rest both for the users of the columbarium as well as any person passing through.
Columbarium at Woodruff Park Atlanta, Georgia
2009 - Spring Studio Fulton
PAGE 33
PAGE 34 Downtown Atlanta
PAGE 35 Plan Street Level
Plan Underground
P
PAGE 36 Outer ring
Providing a public space with meaning to Atlanta Inspired by a painting of a Swiss Artist, Arnold Bocklin, I decided to create a landscape within the city that would work on many levels to provide the citizens a space with meaning. The building is separated into two parts: The top world is connected to Atlanta, but is bordered by a series of monolithic structures that allow certain views on the city. It allows passing through, taking a minute to get some respite, or relax on one of the benches. The center of this park holds a staircase, descending into the underwold, the functional part of the columbarium. Once in the ‘underworld’ light passes through the water seen earlier. The houses, unreachable from above suddenly allow entrance. If one chooses to enter one of the houses, the guest will arrive at an connection with the sky through the top of the monolithic structure.
Descending into the Columbarium
PAGE 37 The “house” and the Sky
The ”underworld”
The ”house”
Minor Projects
Wer nicht wagt der nicht gewinnt. (He who does not dare can not win) - German saying
PAGE 40
Science And History Museum Creating a public building that can give the city of Columbus identity. The main goal of my project is to provide a landmark building for Columbus that incorporates several public zones into its nature as a museum. To reinforce the urban fabric, the museum will offer several crossways from the Broadway to First Street and the adjacent park – these cuts also serve as public inner courtyards that will be the first exhibit the visitor will cross before arriving at the actual exhibit.
Science and History Museum Columbus, Georgia
2008 - Spring Studio Schumacher
PAGE 41
PAGE 42
Exploring Tectonics to find meaning Inspired by the cathedrals of Europe and South America, I asked myself if I could create a monumental answer to the program (Science and History Museum for Columbus) that would both fulfill the needs of the city (identity, rejuvination, need for tourism) and to create a building of interest. Inspired by Santiago Calatravas CBE arcade in Toronto, I designed a causeway that is light and complex in apparance, plus an observation tower that seems to naturally grow out of the ground. This ties together a series of more simple brick volumes that hold the main aspect of the program - A Museum on the south wing, and a research center on the northern wing.
Columbus, GA
Main Floor Plan
PAGE 43
Model of Building
Section Through Observation Tower
PAGE 44
A Boathouse In Montgomery Park landscape for City Tasked to design a boathouse at the newly constructed river walk in Montgomery, Alabama I decided to put my focus on the idea of a cut in the landscape - How could the riverwalk react to this grave modification of the site and what public venues could be created. Another aspect I was interested in are the angles such an artificial landscape would create, and the views that could produce public awareness for the river and its value and use.
Plan: Ground Floor
Plan: lower Boat Ramp
Section through ramp and learning center
Boathouse Riverwalk, Montogmery, AL
2008 - Fall Studio Dagg
PAGE 45
PAGE 46
Train Station in Auburn
Auburn, Al
First Experimentation with Parametrics I decided to arrange the programmatic points of the project (cafe, waiting area on track level, indoor waiting area, ticket counter and bus parking) across the site in a series of circular nodes. The amount of enclosed space created was directly related to the amount of space required by the program times the percentage of space needed to be enclosed. Therefore nodes that have a higher percentage of conditioned program will create a swollen space, while nodes that have unconditiond program (e.g. waiting, bus stop, shelter) will create slender collumns. The connections between these nodes are made out a series of metal frames that bend and warp with the different sized programmatic points around them. The exterior skin is a series of triangluated frames which filters sunlight while allowing light or shade where needed. Using a parametric model in Rhino, I was able build a scale model of my proposal, as shown below.
Diagram
Computer model
Physical Model
Suburban Train Station Auburn, Alabama
2008 - Fall Studio Dagg
PAGE 47
5. Design / Build
“No master has yet fallen from the Skies� - German saying
PAGE 50
Motelpod at Rural Studio A short term guest quarter for the Spencer House Learning how to build; Minumum Requirment Lodging; Understanding the Venacular of West Alabama
Newbern, Al
Additional Design/Build Credits: Michael Dowdy, Hannah Dulaney, Nourah Said, Charles Spires, Ali Tyler, Ed May, Will McGarrity, Mary Pruitt, Sarah Hunter, Susie Fagg, Mallory Garret, Maggie Johnson
Motelpod for the Spencer House Newbern, Alabama
2007- Fall Rural Studio
PAGE 51
PAGE 52
Intervention in Opelika, AL Currently under construction: Intervention at an Adult Day Care Center During the Fall of 2010, I was involved with a new progam at Auburn’s CADC, headed by Linda Ruth. Called “Community involvement through the Built Enviroment” (CEBE), it is aimed to provide a trans-disciplinary design and construction experience to students in their respective fields. For this project, now officially coined the “Jenna and Gene Chizik paradise park” I was responsible for the design, four Building Science students were doing the constructon, estimating and scheduling and landscape faculty and students were given input. Site: Construction progress mid March.
Intervention in Opelika, Alabama
2010 - Fall to Present C.E.B.E.
PAGE 53
PAGE 54
Walk and Seating
New Court
Existing shading structure
V1. Site before intervention: Fenced Parking lot.
Fountain
Planters New Porch Site Plan
How to design a cheap but cost effective miniature park
New center space
N
In this first project of CEBE, a fenced in back yard parking lot of an Adult Day Center in Opelika, Alabama was to be transformed into a space that could reflect value and comfort its users and patients, with an budget of about $ 2500. Due to the minimal budget, the design hat to economize on several aspects. All built up construction was done with railroad ties, establishing a language of dark vertical bars defining several spaces. All subtractive work, the careful cutting of asphalt into 1.5’ x 1.5’ Squares was done within 2 days to save on tool rent d create pavers that would be used later in the project to extend the sidewalk into a porch with stairs and for the water feature. Early concept drawings illustrating possible new spaces
PAGE 55
CEBE WATER-FEATURE OVERVIEW
Construction details for water feature
Water Feature Built of railroad ties, the water feature is basically a planter with a structure also made out of the railroad ties, inside. This structure is holding a pool type liner and is filled with corse gravel. Asphalt pavers, same as mentioned bellow are set on top and have water running down on them. The water feature also holds plants and has seating on the edges.
Elements + Sequence of Construction
Side view
2x12 Treated Boards for Benches
Front view
Top view
Acrylic Waterfall box 1.5’x1.5’x3” asphalt pieces
Treated 2x4s, attached by nailgun
Notes:
Axon view
Asphalt Pavers Square asphalt pavers, 3 inches thick were cut out of the existing parking lot and reused as pavers in the new porch and across the newly sodded gras patches as well as in the fountain instead of introducing new surface material to the parking lot. Hardware Cloth, suspended between railroad ties (1/2” Mesh)
In site
PVC Roll Liner supspended between railroad ties
#This thing has to be build as level as possible.. (especially the 2x4’s holding the asphalt pieces. #The edges of the water slide have to be caulked with silicone #Provide a drainage pipe at the west end of the feature just above the pvc liner #I will build the Acrylic box with the laser cutter after the thing is constructed to fit it in correctly.
Skills and Craft
I believe in details.
PAGE 58
Studies of a Pole Barn Studies of a Pole Barn. (2007), Letterpress print
Thanks to Amos Kennedy
PAGE 59
PAGE 60
Crafts: Model Building / technical Drawing Top Left: Top Right: Bottom Right: Bottom Left:
Structural model of Calatravas BCE gallery Model of train station Illustration for “Atelier of the Excavator” Model for “Atelier of the Excavator”
PAGE 61 IslandTile.java Main.java 1 package islanderpack; 2 3 //import java.awt.*; 4 import javax.swing.*; 5 6 7 public class Main { 8 9 public static void main(String[] args) { 10 SwingUtilities.invokeLater( 11 new Runnable() { 12 public void run() { 13 createGui(); 14 } 15 }); 16 // other threads? 17 } 18 19 20 private static void createGui() { 21 JFrame frame = new JFrame("Islanders"); 22 IslanderCanvas content = new IslanderCanvas(); 23 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 24 frame.add(content); 25 JFrame.setDefaultLookAndFeelDecorated(true); 26 frame.setVisible(true); 27 frame.setResizable(false); 28 frame.pack(); 29 30 } 31 } 32 33
IslanderCanvas.java 1 package islanderpack; 2 3 import javax.swing.JButton; 4 import javax.swing.JLabel; 5 import javax.swing.JPanel; 6 import javax.swing.JViewport; 7 8 import java.awt.*; 9 import java.awt.event.ActionEvent; 10 import java.awt.event.ActionListener; 11 import java.awt.event.MouseEvent; 12 import java.awt.event.MouseListener; 13 import java.awt.event.MouseMotionListener; 14 15 16 17 public class IslanderCanvas extends JPanel implements MouseListener, MouseMotionListener 18 { 19 /** 20 * 21 */ 22 private static final long serialVersionUID = 186579289926085313L; 23 24 25 // Main Menu comes here? 26 JButton x = new JButton("TURN"); // Handles Turns 27 28 private int colAmount, rowAmount, turn; // Size of Map 29 private String IslandName, PlayerName; 30 private JPanel mapBackground; 31 32 // private int pageWidth; 33 // private int pageHeight; 34 private int sideMenuWidth = 300; 35 private int mainMapWidth; 36 private int mainMapHeight = 600; 37 private int topBarHeight = 50; Page 1 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
JPanel topMenu = new JPanel(); JPanel nameDisplayBox = new JPanel(); JLabel title = new JLabel("<html><font size=\"5\">Islanders</font></html>"); JPanel resbox = new JPanel(); JLabel resWood = new JLabel("Wood: "); JLabel resPeople = new JLabel("Population: "); JLabel resFood = new JLabel("Food: "); JLabel resGold = new JLabel("Gold: "); Player user = new Player(PlayerName); //ScrollPane sp = new ScrollPane(ScrollPane.SCROLLBARS_AS_NEEDED); DrawTiles visualMap; TheIsland island; InfoPanel sideBar = new InfoPanel(0, 0, sideMenuWidth, mainMapHeight); public IslanderCanvas() {
// Temporary setting of values since no menu has been created yet colAmount = 10; rowAmount = 10; IslandName = "<html><font size=\"5\">Islanders</font></html>"; PlayerName = "Nobody"; // --------------------------------------------------------------------// Creating the Island with info gathered earlier // --------------------------------------------------------------------island = new TheIsland(IslandName, colAmount, rowAmount); visualMap = new DrawTiles(island);
// --------------------------------------------------------------------// Creating the Canvas IslanderCanvas.java // --------------------------------------------------------------------x.addActionListener(new ButtonListener()); Page 1
JPanel canvas = new JPanel(); canvas.setLayout(new BorderLayout()); canvas.setBackground(Color.BLACK); canvas.setPreferredSize(new Dimension(1000, 600)); // canvas.add(visualMap, BorderLayout.CENTER); canvas.add(sideBar, BorderLayout.WEST); canvas.add(topMenue(), BorderLayout.NORTH); this.add(canvas); this.setBackground(Color.gray); addMouseListener(this); addMouseMotionListener(this);
//----------------------------------------------------------------------------------------------97 //END OF CREATION 98 //----------------------------------------------------------------------------------------------99 100 } 101 102 public void runRules() 103 { 104 GameRules run = new GameRules(); 105 run.RunTurn(island.getAllTiles(), colAmount, rowAmount); 106 } 107 108 public JPanel topMenue() 109 { 110 111 // 112 nameDisplayBox.add(title); 113 nameDisplayBox.setSize(new Dimension(100, topBarHeight- 10)); 114 nameDisplayBox.setLocation(5,5); 115 // 116 resbox.add(resWood); 117 resbox.add(resPeople); 118 resbox.add(resFood); 119 resbox.add(resGold); 120 resbox.setSize(new Dimension(400, topBarHeight - 10)); 121 resbox.setLocation(305,5); 122 // 123 topMenu.setLayout(null); 124 topMenu.setPreferredSize(new Dimension(1000, topBarHeight)); 125 topMenu.setBackground(Color.GRAY); 126 topMenu.add(nameDisplayBox); 127 topMenu.add(resbox); 128 topMenu.add(x); 129 x.setLocation(800, 10); 130 x.setSize(new Dimension(100, 20)); 131 // 132 133 134 return topMenu; 135 } 136 137 public JPanel mapMaker() 138 { 139 int countCol = 0; 140 int countRow = 0; 141 142 mapBackground.setLayout(null); 143 mapBackground = new JPanel(); 144 //mapBackground 145 146 if(countCol < colAmount) 147 { 148 countCol++; 149 if(countRow < rowAmount) 150 { IslanderCanvas.java 151 countRow++; 152 } 153 } Page 2 154 155 156 return mapBackground; 157 158 } 159 160 161 162 // this will run the turn engine 163 164 private class ButtonListener implements ActionListener 165 { 166 public void actionPerformed (ActionEvent event) 167 { 168 runRules(); 169 } 170 } 171 172 173 174 @Override 175 public void mouseClicked(MouseEvent arg0) { 176 // TODO Auto-generated method stub 177 178 if ((arg0.getX() - sideMenuWidth >= 0) || (arg0.getY() - sideMenuWidth >= 0)) 179 { 180 if (arg0.getX() - sideMenuWidth >= 0) 181 { 182 visualMap.setX(arg0.getX() - sideMenuWidth - 9); 183 } 184 if (arg0.getY() - topBarHeight >= 0) 185 { 186 visualMap.setY(arg0.getY() - topBarHeight - 3); 187 } 188 } 189 visualMap.setClick(true); 190 sideBar.updateInfo(visualMap.getMX(), visualMap.getMY(), "TEMP"); 191 visualMap.drawing(); 192 System.out.println("FIRE"); 193 } 194 195 196 @Override 197 public void mouseEntered(MouseEvent arg0) { 198 // TODO Auto-generated method stub 199 200 } 201 202 203 @Override 204 public void mouseExited(MouseEvent arg0) { 205 // TODO Auto-generated method stub 206 207 } 208 209 210 @Override 211 public void mousePressed(MouseEvent arg0) { 212 // TODO Auto-generated method stub 213 if ((arg0.getX() - sideMenuWidth >= 0) || (arg0.getY() - sideMenuWidth >= 0)) 214 { 215 if (arg0.getX() - sideMenuWidth >= 0) 216 { 217 visualMap.setX(arg0.getX() - sideMenuWidth - 9); 218 } 219 if (arg0.getY() - topBarHeight >= 0) 220 { 221 visualMap.setY(arg0.getY() - topBarHeight - 3); 222 } 223 } 224 visualMap.setClick(true); 225 sideBar.updateInfo(visualMap.getMX(), visualMap.getMY(), "TEMP"); 226 visualMap.drawing(); 227 System.out.println("FIRE"); IslanderCanvas.java 228 229 } 230 Page 3 231 232 @Override 233 public void mouseReleased(MouseEvent arg0) { 234 // TODO Auto-generated method stub 235 236 237 } 238 239 240 @Override 241 public void mouseDragged(MouseEvent arg0) { 242 // TODO Auto-generated method stub 243 244 } 245 246 247 @Override 248 public void mouseMoved(MouseEvent arg0) { 249 // TODO Auto-generated method stub 250 visualMap.setClick(false); 251 visualMap.setMMoved(true); 252 if ((arg0.getX() - sideMenuWidth >= 0) || (arg0.getY() - sideMenuWidth >= 0)) 253 { 254 if (arg0.getX() - sideMenuWidth >= 0) 255 { 256 visualMap.setX(arg0.getX() - sideMenuWidth - 9); 257 } 258 if (arg0.getY() - topBarHeight >= 0) 259 { 260 visualMap.setY(arg0.getY() - topBarHeight - 3); 261 } 262 } 263 264 visualMap.drawing(); 265 } 266 } 267 268
DrawTiles.java 1 package islanderpack; 2 3 import java.awt.Color; 4 import java.awt.Dimension; 5 import java.awt.Font; 6 import java.awt.Graphics; 7 import javax.swing.JPanel; 8 import java.util.Random; 9 10 11 12 public class DrawTiles extends JPanel 13 { 14 Font standard = new Font("Arial", Font.BOLD, 10); 15 private final int SQRL = 50; 16 private int xAmount, yAmount; 17 private int mouseX; 18 private int mouseY; 19 private TheIsland currentMap; 20 private int currentTileX; 21 private int currentTileY; 22 private int cursorThickness = 3; 23 private int borderThickness = 3; 24 // 25 private boolean clicked = false; 26 private boolean mMoved = false; 27 28 Random gen = new Random(); 29 // draws the whole map 30 31 public DrawTiles(TheIsland IslandTilesIn) 32 { 33 34 currentMap = IslandTilesIn; 35 xAmount = currentMap.getXamount(); 36 yAmount = currentMap.getYamount(); 37 this.setPreferredSize(new Dimension((xAmount * SQRL), (yAmount * SQRL))); 38 this.setBackground(Color.GRAY); 39 40 41 } 42 public void drawing() 43 { 44 repaint(); 45 } 46 public void paintComponent(Graphics g) 47 { 48 // this is important! this will do everything. shoot nanny. 49 super.paintComponent(g); 50 51 52 // This draws the map tiles first 53 g.setFont(standard); 54 if (mMoved = true) 55 { 56 for (int x = 0; x < xAmount; x++) 57 { 58 for (int y = 0; y < yAmount; y++) 59 { 60 // switch (currentMap.getTile(x, y).getType()) 61 // { 62 if (currentMap.getTile(x, y).getHumidity() == 0) 63 { 64 65 g.setColor(Color.BLUE); 66 g.fillRect((x * SQRL), (y * SQRL), SQRL, SQRL); 67 //draw random lines for waves 68 g.setColor(Color.MAGENTA); 69 for (int dc = 0; dc < 10; dc++) 70 { 71 int xn = (x * SQRL) + (SQRL); 72 int yn = (y * SQRL) + gen.nextInt(SQRL); 73 g.drawLine(xn - (SQRL), yn, xn, yn); 74 } 75 } 76 if (currentMap.getTile(x, y).getHumidity() > 0) DrawTiles.java 77 { 78 //background 79 g.setColor(Color.RED); Page 1 80 g.fillRect((x * SQRL), (y * SQRL), SQRL, SQRL); 81 //draw random lines for waves 82 g.setColor(new Color(100,10,255)); 83 for (int dc = 0; dc < 10; dc++) 84 { 85 int xn = (x * SQRL) + gen.nextInt(SQRL); 86 int yn = (y * SQRL) + gen.nextInt(SQRL); 87 g.drawLine(xn - (SQRL / 10), yn, xn, yn); 88 } 89 } 90 91 // case (0): 92 // g.setColor(Color.RED); // should not happen 93 // g.fillRect((x * SQRL), (y * SQRL), SQRL, SQRL); 94 // break; 95 // case (1): // woodland 96 // g.setColor(Color.GREEN); 97 // g.fillRect((x * SQRL), (y * SQRL), SQRL, SQRL); 98 // g.setColor(Color.BLACK); 99 // g.drawRect((x * SQRL) + (SQRL / 2), (y * SQRL) 100 // + (SQRL / 2), 2, 2); 101 // 102 // break; 103 // case (2): // Sands 104 // g.setColor(Color.YELLOW); 105 // g.fillRect((x * SQRL), (y * SQRL), SQRL, SQRL); 106 // case (3): // Water 107 // g.setColor(Color.BLUE); 108 // g.fillRect((x * SQRL), (y * SQRL), SQRL, SQRL); 109 // break; 110 // case (4): // CITY 111 // g.setColor(Color.lightGray); 112 // g.fillRect((x * SQRL), (y * SQRL), SQRL, SQRL); 113 // break; 114 // case (5): // FIELD 115 // g.setColor(Color.orange); 116 // g.fillRect((x * SQRL), (y * SQRL), SQRL, SQRL); 117 // break; 118 // case (6): // GRASSLAND 119 // g.setColor(Color.GREEN); 120 // g.fillRect((x * SQRL), (y * SQRL), SQRL, SQRL); 121 // break; 122 // default: // unspecified or wrong case, should not happen 123 // g.setColor(Color.RED); 124 // g.fillRect((x * SQRL), (y * SQRL), SQRL, SQRL); 125 // g.setColor(Color.BLACK); 126 // g.drawString("?", (x * SQRL) + (SQRL / 2), (y * SQRL) 127 // + (SQRL / 2)); 128 129 130 // 131 // draw rectangle around every Square 132 // 133 g.setColor(Color.lightGray); 134 g.drawRect((x * SQRL), (y * SQRL), SQRL, SQRL); 135 // draw line on borders 136 if (y == 0) 137 { 138 g.setColor(Color.BLACK); 139 for (int count = 0; count < borderThickness; count++) 140 g.drawLine((x * SQRL), count, (x * SQRL) + SQRL, count); 141 } 142 if (x == 0) 143 { 144 g.setColor(Color.BLACK); 145 for (int count = 0; count < borderThickness; count++) 146 g.drawLine((x * SQRL) + SQRL - count, (y * SQRL), (x * SQRL) + SQRL, count); 147 } 148 149 } DrawTiles.java 150 } 151 } 152 if (clicked == true) Page 2 153 { 154 g.setColor(Color.WHITE); 155 // --------------------------------------------------------------------------------------------156 // Draw Cursor // 157 // cursorThickness 158 // --------------------------------------------------------------------------------------------159 for (int c = 0; c < cursorThickness; c++) 160 { 161 162 g.drawLine((currentTileX * SQRL) + c, (currentTileY * SQRL), 163 (currentTileX * SQRL) + c, (currentTileY * SQRL) + (SQRL) / 3); 164 165 g.drawLine((currentTileX * SQRL), (currentTileY * SQRL) + c, 166 (currentTileX * SQRL) + SQRL / 3,(currentTileY * SQRL) + c); 167 168 g.drawLine((currentTileX * SQRL) + 2 * (SQRL / 3), (currentTileY * SQRL) + c, 169 (currentTileX * SQRL) + SQRL, (currentTileY * SQRL)+ c); 170 171 g.drawLine((currentTileX * SQRL) + SQRL - c, (currentTileY * SQRL), 172 ((currentTileX * SQRL) + SQRL - c), ((currentTileY * SQRL) + SQRL / 3)); 173 174 g.drawLine((currentTileX * SQRL) + SQRL - c, (currentTileY * SQRL) + 2 * (SQRL / 3), 175 ((currentTileX * SQRL) + SQRL) - c, ((currentTileY * SQRL) + SQRL)); 176 177 g.drawLine((currentTileX * SQRL) + c, (currentTileY * SQRL) + 2 * (SQRL / 3), 178 (currentTileX * SQRL) + c, (currentTileY * SQRL) + (SQRL)); 179 180 g.drawLine( 181 (currentTileX * SQRL), 182 (currentTileY * SQRL) + SQRL - c, 183 (currentTileX * SQRL) + SQRL / 3, 184 (currentTileY * SQRL) + SQRL - c 185 ); 186 g.drawLine( 187 (currentTileX * SQRL) + (SQRL / 3) * 2, 188 (currentTileY * SQRL) + SQRL - c, 189 (currentTileX * SQRL) + SQRL, 190 (currentTileY * SQRL) + SQRL - c 191 ); 192 } 193 } 194 else 195 { 196 g.drawRect(currentTileX, currentTileY, (currentTileX * SQRL), (currentTileY * SQRL)); 197 } 198 199 200 201 clicked = false; 202 // --------------------------------------------------------------------------------------------203 // --------------------------------------------------------------------------------------------204 // END OF MAPDRAWING! 205 // --------------------------------------------------------------------------------------------206 // --------------------------------------------------------------------------------------------207 //debug DrawTiles.java 208 g.setColor(Color.MAGENTA); 209 g.drawLine(mouseX - 2,mouseY - 2,mouseX,mouseY); 210 Page 3 211 } 212 213 214 215 // --------------------------------------------------------------------------------------------216 // Returns X's and Y's 217 // --------------------------------------------------------------------------------------------218 public int getMX() 219 { 220 return currentTileX; 221 } 222 public int getMY() 223 { 224 return currentTileY; 225 } 226 public void setX(int xIn) 227 { 228 mouseX = xIn; 229 currentTileX = (xIn / SQRL); 230 } 231 public void setY(int yIn) 232 { 233 mouseY = yIn; 234 currentTileY = (yIn / SQRL); 235 } 236 public void setClick(boolean clickIn) 237 { 238 clicked = true; 239 } 240 public void setMMoved(boolean movedIn) 241 { 242 mMoved = true; 243 } 244 } 245
Page 4
GameRules.java 1 package islanderpack; 2 3 public class GameRules 4{ 5 private IslandTile[][] tempIsland; 6 private int xAmount, yAmount; 7 public GameRules() 8 { 9 // Empty Constructor 10 } 11 public IslandTile[][] RunTurn(IslandTile[][] islandIn, int Xin, int Yin) 12 { 13 tempIsland = islandIn; 14 xAmount = Xin; 15 yAmount = Yin; 16 int count = 0; 17 for (int x = 0; x < xAmount; x++) 18 { 19 for (int y = 0; y < yAmount; y++) 20 { 21 count++; 22 System.out.println("activity :" + count); 23 } 24 } 25 26 System.out.println("turn passed"); 27 return tempIsland; 28 // END 29 30 } 31 } 32 InfoPanel.java 1 package islanderpack; 2 3 4 import java.awt.Color; 13 14 public class InfoPanel extends JPanel 15 { 16 // variables 17 JLabel xField = new JLabel(); 18 JLabel yField = new JLabel(); 19 20 // constructor 21 public InfoPanel(int Xin, int Yin, int widthIn, int heightIn) 22 { 23 24 this.setLayout(null); // needs to be manual 25 // 26 xField.setLocation(10, 10); 27 xField.setBackground(Color.WHITE); 28 xField.setSize(new Dimension(100, 20)); 29 yField.setLocation(10, 40); 30 yField.setBackground(Color.WHITE); 31 yField.setSize(new Dimension(100, 20)); 32 // 33 34 this.setPreferredSize(new Dimension(widthIn, heightIn)); 35 this.setBackground(Color.GRAY); 36 37 this.add(xField); 38 this.add(yField); 39 } 40 41 public void updateInfo(int xIn,int yIn, String infoText) 42 { 43 xField.setText("East: X" + (xIn + 1)); 44 yField.setText("South: Y" + (yIn + 1)); 45 revalidate(); 46 } 47 } 48 IslandTile.java Page 1 1 package islanderpack; 2 3 public class IslandTile 4{ 5 6 //-------------------------------------------------------------7 // Contents 8 // 9 //-------------------------------------------------------------10 11 // 12 // final values 13 // 14 15 private final int MAXHUMIDITY = 100; 16 private final int MINHUMIDITY = 0; 17 private final int MAXSPACE = 100; 18 19 // 20 // statistics 21 // 22 23 private int humidity = 0; 24 private int people = 0; 25 private int wood = 0; 26 private int space = 0; 27 private int harvest = 0; 28 private String name = "unknown"; 29 30 // 31 // these are the neighbors of the tile 32 // 33 private int[] Tpos = new int[2]; 34 private int[] nbNW = new int[2]; 35 private int[] nbN = new int[2]; Page 1 36 private int[] nbNE = new int[2]; 37 private int[] nbW = new int[2]; 38 private int[] nbE = new int[2]; 39 private int[] nbSW = new int[2]; 40 private int[] nbS = new int[2]; 41 private int[] nbSE = new int[2]; 42 43 // 44 // improvements 45 // 46 47 private boolean city = false; 48 private boolean castle = false; 49 //private boolean farm = false; 50 51 // other attributes 52 private boolean pillagable = false; 53 private boolean passable = false; 54 private int owner = 0; 55 private int type = 0; 56 57 //-------------------------------------------------------------58 // Constructor 59 // creates the asked for tile 60 //-------------------------------------------------------------61 62 public IslandTile(int typeIn,int xPosIn,int yPosIn,int tileNumberIn) 63 { 64 // define neighbors. 65 Tpos[0] = xPosIn; 66 System.out.println(xPosIn); 67 System.out.println(yPosIn); 68 Tpos[1] = yPosIn; 69 // 70 nbNW[0] = 0; 71 nbNW[1] = 0; 72 // 73 nbN[0] = 0; 74 nbN[1] = 0; 75 // IslandTile.java 76 nbNE[0] = 0; 77 nbNE[1] = 0; 78 // 79 nbW[0] = 0; Page 1 80 nbW[1] = 0; 81 // 82 nbE[0] = 0; 83 nbE[1] = 0; 84 // 85 nbSW[0] = 0; 86 nbSW[1] = 1; 87 // 88 nbS[0] = 0; 89 nbS[1] = 1; 90 // 91 nbSE[0] = 0; 92 nbSE[1] = 0; 93 94 95 switch (typeIn) { 96 case 0: 97 humidity = 0; 98 name = "Deadly Desert"; 99 type = 0; 100 passable = true; 101 102 break; 103 case 1: 104 humidity = 10; 105 name = "Desert"; 106 type = 1; 107 passable = true; 108 break; 109 case 2: 110 humidity = 20; 111 name = "Dry Land"; 112 type = 2; 113 passable = true; 114 break; 115 case 3: 116 humidity = 30; 117 name = "steppe"; 118 type = 3; 119 passable = true; 120 break; 121 case 4: 122 humidity = 40; 123 name = "Savanna"; 124 type = 3; 125 passable = true; 126 break; 127 case 5: 128 humidity = 50; 129 name = "Grassland"; 130 type = 5; 131 passable = true; 132 break; 133 case 6: 134 humidity = 60; 135 name = "Light forest"; 136 type = 6; 137 passable = true; 138 break; 139 case 7: 140 humidity = 70; 141 name = "Forest"; 142 type = 7; 143 passable = true; 144 break; 145 case 8: 146 humidity = 80; 147 name = "Rain Forrest"; 148 type = 8; 149 passable = true; 150 break; 151 case 9: 152 humidity = 90; 153 name = "Swamp"; IslandTile.java 154 type = 9; 155 passable = true; 156 break; Page 2 157 case 10: 158 humidity = 100; 159 name = "Ocean"; 160 type = 10; 161 passable = false; 162 break; 163 default: 164 humidity = 100; 165 name = "notSet"; 166 type = 10; 167 passable = false; 168 break; 169 } 170 } 171 172 //-------------------------------------------------------------173 // methods to read values 174 //-------------------------------------------------------------175 public int getHumidity() 176 { 177 return humidity; 178 } 179 public int getPopulation() 180 { 181 return people; 182 } 183 public int getWood() 184 { 185 return wood; 186 } 187 public int getSpace() 188 { 189 return space; 190 } 191 public int getHarvest() 192 { 193 return harvest; 194 } 195 public String getName() 196 { 197 return name; 198 } 199 public boolean isPassable() 200 { 201 return passable; 202 } 203 public boolean ispillagable() 204 { 205 return pillagable; 206 } 207 public int getOwner() 208 { 209 return owner; 210 } 211 public int getType() 212 { 213 return type; 214 } 215 216 //-------------------------------------------------------------217 // is stuff built on the tile 218 //-------------------------------------------------------------219 public boolean hasCastle() 220 { 221 return castle; 222 } 223 public boolean hasCity() 224 { 225 return city; 226 } 227 228 //-------------------------------------------------------------229 // mutators 230 //-------------------------------------------------------------231 public void defineTile(String nameIn, int spaceIn, int woodIn, int peopleIn, Page 3
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 }
int harvestIn, boolean passableIn, boolean pillagableIn, boolean cityIn, boolean castleIn) // sets up a whole tile { name = nameIn; space = spaceIn; wood = woodIn; people = peopleIn; harvest = harvestIn; passable = passableIn; pillagable = pillagableIn; city = cityIn; castle = castleIn; } public void changePeople(int amountChangeIn) { people += amountChangeIn; } public void changeWood(int amountChangeIn) { wood += amountChangeIn; } public void changeSpace(int amountChangeIn) { space += amountChangeIn; } public void changeHarvest(int amountChangeIn) { harvest += amountChangeIn; } //-------------------------------------------------------------// setters //-------------------------------------------------------------public void setPeople(int amountChangeIn) { people = amountChangeIn; } public void setWood(int amountChangeIn) { wood = amountChangeIn; } public void setSpace(int amountChangeIn) { space = amountChangeIn; } public void setHarvest(int amountChangeIn) { harvest = amountChangeIn; } public void setName(String nameIn) { name = nameIn; } public void setOwner(int ownerIn) { owner = ownerIn; } public void setType(int typeIn) { type = typeIn; } //-------------------------------------------------------------// build methods //-------------------------------------------------------------public void createCastle() { castle = true; } public void destroyCastle() { castle = false; } public void createCity() IslandTile.java { city = true; } Page 4 public void destroyCity() { castle = true; }
Player.java
1 package islanderpack; 2 3 public class Player { 4 private int wood, people, food, gold; // Resources and turn 5 private String playerName; 6 // set up player 7 public Player(String nameIn) 8 { 9 playerName = nameIn; 10 wood = 0; 11 people = 0; 12 food = 0; 13 gold = 0; 14 } 15 // returns different values 16 public int getWood() 17 { 18 return wood; 19 } 20 public int getPeople() 21 { 22 return people; 23 } 24 public int getFood() 25 { 26 return food; 27 } 28 public int getGold() 29 { 30 return gold; 31 } 32 public String getName() 33 { 34 return playerName; 35 } 36 // changes values 37 public int changeWood(int changeAmount) 38 { 39 return wood + changeAmount; 40 } 41 public int changePeople(int changeAmount) 42 { 43 return people + changeAmount; 44 } 45 public int changeFood(int changeAmount) 46 { 47 return food + changeAmount; 48 } 49 public int changeGold(int changeAmount) 50 { 51 return gold + changeAmount; 52 } 53 } 54
JAVA: Writing a small program Islanders: Simulation and Game Currently at the beginning Stages of developement. The current version can be found at www.johannesubben.com
TheIsland.java 1 package islanderpack; 2 3 import java.util.Random; 4 5 public class TheIsland { 6 private IslandTile[][] tiles; 7 Random generator = new Random(); 8 Page 5 9 10 private int xAmount, yAmount; 11 12 13 public TheIsland(String NameIn, int Xin, int Yin) 14 { 15 tiles = new IslandTile[Xin][Yin]; 16 xAmount = Xin; 17 yAmount = Yin; 18 int count = 0; 19 for (int x = 0; x < Xin; x++) 20 { Page 1 21 for (int y = 0; y <Yin; y++) 22 { 23 count++; 24 tiles[x][y] = new IslandTile(0, x, y, count); 25 26 // somehow i have to define 27 // how the island is created 28 // here. 29 } 30 } 31 } 32 33 // Info Methods! 34 public IslandTile getTile(int posXIn,int posYIn) 35 { 36 return tiles[posXIn][posYIn]; 37 } 38 39 public IslandTile[][] getAllTiles() 40 { 41 return tiles; 42 } 43 44 public int getXamount() 45 { 46 return xAmount; 47 } 48 49 public int getYamount() 50 { 51 return yAmount; 52 } 53 54 55 // mutators - MASSIVE 56 // needs lots of work; 57 58 59 public void setTileHarvest(int posXIn, int posYIn, int changeIn) 60 { 61 tiles[posXIn][posYIn].changeHarvest(changeIn); 62 } 63 public void setTileType(int posXIn, int posYIn, int newType) 64 { 65 tiles[posXIn][posYIn].setType(newType); 66 } 67 } 68 69
Page 1
Source Code
Output:
PAGE 62
Two Landscapes Vertigo - Technical Pen
PAGE 63
Attachment - Technical Pen
PAGE 64
Resume
EDUCATION:
Auburn University, Auburn, AL BA of Architecture, BA of Interior-Architecture
2006 August-present
WORK EXPERIENCE: Johannes W. Ubben 421 S. Gay Street 36830 Auburn, Al t: (205) 253 5361 jubben@gmail.com
Intern of Architecture: Nickl & Partner Architekten AG, Munich, Germany 2008 May-August -Drafting / Redlining -Firecode updating (Search and correction of specific issues) -Competition Work (Preparing presentations and technical drawings) Kahn South Inc, Birmingham, Alabama 2007 December -Drafting / Redlining -Independent Project Management -Detailing (Shop Drawings, schedules, etc.)
AWARDS AND HONORS:
AU Board of Trustees Scholarship, Frances & Gordon W. Holmquist Endowed Scholarship
2010
AU Board of Trustees Scholarship; R. Mack & Jamie Freeman 2009 Scholarship of excellence in Architecture; winner of the AL Concrete Masonry Design Competition. AU Board of Trustees Scholarship; Scholarship of the 2008 Montgomery Chapter of Concrete Specification Institute. First Year faculty book award 2007
WORK-RELATED SKILLS:
AutoCAD, Revit Arch, Nemetschek Allplan BIM, Adobe Suite, Rhino 3D+Grasshopper, MS-Office Suite, Java, Hand Drafting, Freehand Drawing, Model Building.
SPOKEN AND WRITTEN LANGUAGES:
German, English, French
PAGE 65