//Program 5:House Project by Zack Davis in association with Scott Gowell import java.awt.*; import java.awt.event.*; public class MyPanel extends EventPanel { private House house; private FButton addFloor; private FButton delFloor; private int floors; public MyPanel() { floors = 3; house = new House (10, 90, floors); addFloor = new FButton("add floor", 10, 260); delFloor = new FButton("del floor", 90, 260); } public void paint(Graphics g) { house.paint(g); addFloor.paint(g); delFloor.paint(g); } public void mousePressed(MouseEvent e) { int x = e.getX(); int y = e.getY(); house.toggle (x, y); if (addFloor.inside (x,y) && floors < 3) floors ++; if (delFloor.inside (x,y) && floors >1) floors --; repaint(); } /*public void keyPressed (KeyEvent e) { }*/ } class House { private Wing west; private Wing east; private Center main; private Roof roof; public House(int h, int v, int wFloors) { west = new Wing(h, v+30, wFloors); east = new Wing(h+250, v+30, wFloors); main = new Center(h+130, v+30); roof = new Roof(h,v); } public void paint(Graphics g) { west.paint(g); east.paint(g); main.paint(g); roof.paint(g); } public void toggle (int x, int y) { west.toggle (x, y); east.toggle (x, y); main.toggle (x, y); } } class Wing { private WFloor wfirst; private WFloor wsecond; private WFloor wthird; private int left, top, wFloors; public Wing(int wH, int wV, int floors) { wfirst = new WFloor(wH, wV+80); wsecond = new WFloor(wH, wV+40); wthird = new WFloor(wH, wV); left = wH; top = wV; wFloors = floors; } public void paint(Graphics g) { if (wFloors >= 3) wthird.paint(g); if (wFloors >= 2) wsecond.paint(g); if (wFloors >= 1) wfirst.paint(g); } public void toggle (int x, int y) { wfirst.toggle (x, y); wsecond.toggle (x, y); wthird.toggle (x, y); } } class Center { private CFloor1 cfirst; private CFloor2 csecond; private int left, top; public Center(int cH, int cV) { cfirst = new CFloor1(cH, cV+60); csecond = new CFloor2(cH, cV); left = cH;top = cV; } public void paint(Graphics g) { cfirst.paint(g); csecond.paint(g); } public void toggle (int x, int y) { cfirst.toggle (x, y); csecond.toggle (x, y); } } class Roof { private CRoof centerRoof; private MRoof mainRoof; private int top, left; public Roof(int cRH, int cRV) { centerRoof = new CRoof(cRH+130, cRV-5); mainRoof = new MRoof(cRH, cRV); left = cRH; top = cRV; } public void paint(Graphics g) { mainRoof.paint(g); centerRoof.paint(g); } } class FButton { private int top, left; private String name; public FButton(String bName, int h, int v) { name = bName; left = h; top = v; } public void paint(Graphics g) { g.setColor(Color.white); g.fillRoundRect(left, top, 60, 20, 10, 10); g.setColor(Color.black); g.drawString (name, left+10, top+15); g.drawRoundRect(left, top, 60, 20, 10, 10); } public boolean inside (int x, int y) { if (left <= x && x <= left+70 && top <= y && y <= top+20) return true; return false; } } class WFloor { private WWindow w1, w2, w3, w4; private int left, top; public WFloor(int wFH, int wFV) { w1 = new WWindow(wFH+10, wFV+10); w2 = new WWindow(wFH+40, wFV+10); w3 = new WWindow(wFH+70, wFV+10); w4 = new WWindow(wFH+100, wFV+10); left = wFH; top = wFV; } public void paint(Graphics g) { g.setColor (Color.white); g.fillRect(left, top, 130, 40); g.setColor (Color.black); g.drawRect(left, top, 130, 40); w1.paint(g); w2.paint(g); w3.paint(g); w4.paint(g); } public void toggle (int x, int y) { w1.toggleMark (x,y); w2.toggleMark (x,y); w3.toggleMark (x,y); w4.toggleMark (x,y); } } class CFloor1 { private CWindow cw1, cw2; private Door door; private int left, top; public CFloor1(int cFH, int cFV) { cw1 = new CWindow(cFH+20, cFV+10); cw2 = new CWindow(cFH+95, cFV+10); door = new Door(cFH+50, cFV+30); left = cFH;top = cFV; } public void paint(Graphics g) { g.setColor (Color.white); g.fillRect(left, top, 120, 60); g.setColor (Color.black); g.drawRect(left, top, 120, 60); cw1.paint(g); cw2.paint(g); door.paint(g); } public void toggle (int x, int y) { cw1.toggleMark (x,y); cw2.toggleMark (x,y); door.toggleMark (x,y); } } class CFloor2 { private CWindow cw1, cw2; private RWindow circle; private int left, top; public CFloor2(int cFH, int cFV) { cw1 = new CWindow(cFH+20, cFV+10); cw2 = new CWindow(cFH+95, cFV+10); circle = new RWindow(cFH+50, cFV+20); left = cFH;top = cFV; } public void paint(Graphics g) { g.setColor (Color.white); g.fillRect(left, top, 120, 60); g.setColor (Color.black); g.drawRect(left, top, 120, 60); cw1.paint(g); cw2.paint(g); circle.paint(g); } public void toggle (int x, int y) { cw1.toggleMark (x,y); cw2.toggleMark (x,y); circle.toggleMark (x,y); } } class CWindow { private int left, top; private boolean marked; public CWindow(int cWH, int cWV) { left = cWH; top = cWV; marked = false; } public void paint(Graphics g) { if (marked) g.setColor (Color.yellow); else g.setColor(Color.gray); g.fillRect(left, top, 5, 30); g.setColor (Color.black); g.drawRect(left, top, 5, 30); } public boolean inside(int x, int y) { if (x > left && x < left + 5 && y > top && y < top + 30) return true; return false; } public boolean getMarked() { return marked; } public void changeMark() { marked = !marked; } public void mark() { marked = true; } public void toggleMark(int x, int y) { if (inside (x,y)) changeMark (); } } class WWindow { private int left, top, half; private boolean marked; public WWindow(int wWH, int wWV) { left = wWH; top = wWV; half = top + 10; marked = false; } public void paint(Graphics g) { if (marked) g.setColor (Color.yellow); else g.setColor(Color.gray); g.fillRect(left, top, 20, 10); g.fillRect(left, half, 20, 10); g.setColor (Color.black); g.drawRect(left, top, 20, 10); g.drawRect(left, half, 20, 10); } public boolean inside(int x, int y) { if (x > left && x < left + 20 && y > top && y < half + 10) return true; return false; } public boolean getMarked() { return marked; } public void changeMark() { marked = !marked; } public void mark() { marked = true; } public void toggleMark(int x, int y) { if (inside (x,y)) changeMark (); } } class RWindow { private int left, top; private boolean marked; public RWindow(int rWH, int rWV) { left = rWH; top = rWV; marked = false; } public void paint(Graphics g) { if (marked) g.setColor (Color.yellow); else g.setColor(Color.gray); g.fillOval(left, top, 20, 20); g.setColor (Color.black); g.drawOval(left, top, 20, 20); } public boolean inside(int x, int y) { if (x > left && x < left + 20 && y > top && y < top + 20) return true; return false; } public boolean getMarked() { return marked; } public void changeMark() { marked = !marked; } public void mark() { marked = true; } public void toggleMark(int x, int y) { if (inside (x,y)) changeMark (); } } class Door { private int left, top, winLeft, winTop; private boolean marked; public Door(int dH, int dV) { left = dH; top = dV; winLeft = left +5; winTop = top + 5; marked = false; } public void paint(Graphics g) { g.drawRect(left, top, 20, 30); if (marked) g.setColor(Color.yellow); else g.setColor (Color.gray); g.fillRect(winLeft, winTop, 10, 10); g.setColor(Color.black); g.drawRect(winLeft, winTop, 10, 10); } public boolean inside(int x, int y) { if (x > winLeft && x< winLeft + 20 && y > winTop && y < winTop + 20) return true; return false; } public boolean getMarked() { return marked; } public void changeMark() { marked = !marked; } public void mark() { marked = true; } public void toggleMark(int x, int y) { if (inside (x,y)) changeMark (); } } class CRoof { private int left, top; public CRoof(int cRH, int cRV) { left = cRH; top = cRV; } public void paint(Graphics g) { Polygon p; p = new Polygon(); p.addPoint (left, top+35); p.addPoint (left+60, top); p.addPoint (left+120, top+35); g.setColor(Color.white); g.fillPolygon(p); g.fillRect(left,top+35, 15, 120); g.fillRect(left+30,top+35, 15, 120); g.fillRect(left+75,top+35, 15, 120); g.fillRect(left+105,top+35, 15, 120); g.setColor(Color.black); g.drawPolygon(p); Polygon q; q = new Polygon(); q.addPoint (left+10, top+33); q.addPoint (left+60, top+5); q.addPoint (left+110, top+33); g.drawPolygon(q); g.drawRect(left,top+35, 15, 120); g.drawRect(left+30,top+35, 15, 120); g.drawRect(left+75,top+35, 15, 120); g.drawRect(left+105,top+35, 15, 120); } } class MRoof { private int left, top; public MRoof(int mRH, int mRV) { left = mRH; top = mRV; } public void paint(Graphics g) { Polygon p; p = new Polygon(); p.addPoint (left, top+30); p.addPoint (left+20, top); p.addPoint (left+360, top); p.addPoint (left+380, top+30); g.setColor(Color.black); g.fillPolygon(p); } }