Computer Science 120
Introduction to Programming
Spring 2012, Siena College
House Demo
A working demo of House will appear below. Click inside the applet to interact with it.
House BlueJ Project
Click here to download a BlueJ project for House.
House Source Code
The Java source code for House is below. Click on a file name to download it.
import objectdraw.*;
/**
* WindowController for a House Application. When you click on the screen, you
* create a house with a roof and door. If you click on a door, it (opens/closes).
*
* @author Darren Lim
* @version 1.0
*/
public class HouseWindow extends WindowController
{
House houseReference;
/**
* begin overriden method for our HouseWindow application. Initializes our house reference
* to null
*/
public void begin()
{
houseReference = null;
}
/**
* onMouseClick overridden method for our HouseWindow application. Checks whether we
* should create a new house if we click on a non-door location on the screen.
*
* @param point Location of mouse click
*/
public void onMouseClick(Location point)
{
if (houseReference == null)
{
//First House to be drawn
houseReference = new House(point, canvas);
}
else if (houseReference.onDoorClick(point))
{
//Check to see if the active house's door has been clicked on
houseReference.changeDoor();
}
else
{
houseReference.removeFromCanvas();
houseReference = new House(point, canvas);
}
}
}
import objectdraw.*;
import java.awt.*;
/**
* Draws a Wire-frame house on the screen.
*
* @author Darren Lim
* @version 1.0
*/
public class House
{
// instance variables - replace the example below with your own
private Line leftRoofEdge, rightRoofEdge, topOfHouse;
private FramedRect bodyOfHouse, closedDoor;
private FramedOval doorKnob;
private FilledRect openDoor;
private DrawingCanvas canvas;
/**
* Constructor for objects of class House. The point is assumed to be the top
* of the house (roof point). The house is 50 x 50 with the roof 30 pixels high.
* The roof extends from the body of the house by 10 pixels. An open door is a FilledRect,
* and a closed door is a FramedRect with a doorknob
*
* @param point Location of the top point of the roof
* @param acanvas Drawing canvas for our house
*/
public House(Location point, DrawingCanvas acanvas)
{
canvas = acanvas;
//Coordinates of the top of the roof
double x = point.getX(), y = point.getY();
//Draw Roof
leftRoofEdge = new Line(x, y, x - 30, y + 30, canvas);
rightRoofEdge = new Line(x, y, x + 30, y + 30, canvas);
topOfHouse = new Line(x + 30, y + 30, x - 30, y + 30, canvas);
bodyOfHouse = new FramedRect(x - 25, y + 30, 50, 50, canvas);
closedDoor = new FramedRect(x - 10, y + 50, 20, 30, canvas);
doorKnob = new FramedOval(x - 8, y + 50 + 15 - 2, 4, 4, canvas);
openDoor = new FilledRect(x - 10, y + 50, 20, 30, canvas);
openDoor.setColor(Color.BLACK);
openDoor.hide();
}
/**
* Returns true if the point parameter is contained by the open door.
*
* @param point Location of a click
* @return whether the door was clicked on or not
*/
public boolean onDoorClick(Location point)
{
if (openDoor.contains(point))
return true;
return false;
}
/**
* Removes all objects from the canvas
*
*/
public void removeFromCanvas()
{
leftRoofEdge.removeFromCanvas();
rightRoofEdge.removeFromCanvas();
topOfHouse.removeFromCanvas();
bodyOfHouse.removeFromCanvas();
openDoor.removeFromCanvas();
doorKnob.removeFromCanvas();
closedDoor.removeFromCanvas();
}
/**
* Reverts between an open door (black rectangle) and a closed door (framed rect with
* a door knob)
*
*/
public void changeDoor()
{
if (openDoor.isHidden())
{
openDoor.show();
doorKnob.hide();
closedDoor.hide();
}
else
{
openDoor.hide();
doorKnob.show();
closedDoor.show();
}
}
}