Computer Science 252
Problem Solving with Java
Fall 2015, The College of Saint Rose
DrinkMug Demo
A working demo of DrinkMug will appear below. Click inside the applet to interact with it.
DrinkMug BlueJ Project
Click here to download a BlueJ project for DrinkMug.
DrinkMug Source Code
The Java source code for DrinkMug is below. Click on a file name to download it.
import objectdraw.*;
import java.awt.*;
/*
* Example DrinkMug: a custom class representing a refreshing
* mug of some beverage. It is capable of many things.
*
* Jim Teresco, The College of Saint Rose, CSC 252, Fall 2015
*
* $Id: DrinkMug.java 2717 2015-09-29 17:07:09Z terescoj $
*/
public class DrinkMug {
private static final double WIDTH = 50;
private static final double HEIGHT = 100;
private static final double HANDLE = 20;
private static final double THICKNESS = 5;
private FilledRect background;
private FilledOval handle;
private FilledRect contents;
public DrinkMug(Location position, DrawingCanvas c) {
background = new FilledRect(position, WIDTH, HEIGHT, c);
handle = new FilledOval(position.getX() + WIDTH - HANDLE / 2,
position.getY() + (HEIGHT - HANDLE)/ 2,
HANDLE, HANDLE, c);
contents = new FilledRect(position.getX() + THICKNESS,
position.getY() + HEIGHT - THICKNESS*2,
WIDTH - THICKNESS*2, 0, c);
contents.setColor(Color.white);
}
public boolean contains(Location point) {
return background.contains(point) || handle.contains(point);
}
public void move(double dx, double dy) {
background.move(dx, dy);
contents.move(dx, dy);
handle.move(dx, dy);
}
// check if any component here overlaps with the given object
public boolean overlaps(Drawable2DInterface other) {
return other.overlaps(background) || other.overlaps(handle);
}
// fill it up!
public void fill() {
contents.setHeight(HEIGHT-THICKNESS);
contents.moveTo(contents.getX(), background.getY());
}
// chill
public void chill() {
if (contents.getHeight() > 0) {
contents.setColor(Color.blue);
}
}
// heat
public void heat() {
if (contents.getHeight() > 0) {
contents.setColor(Color.red);
}
}
}
/**
* Example DrinkMug: the window controller class for the DrinkMug
* custom class example
*
* Developed partially in class by CSC 252 Fall 2015
*
* @author Jim Teresco
*/
import objectdraw.*;
import java.awt.*;
public class DrinkMugGame extends WindowController
{
private static final double FAUCET_SIZE = 40;
private FilledRect fridge;
private FilledRect stove;
private DrinkMug mug1, mug2;
private FilledRect stream;
// support for dragging
private DrinkMug draggingMug = null;
private Location lastMouse;
public void begin()
{
double w = canvas.getWidth();
double h = canvas.getHeight();
// fridge and stove
fridge = new FilledRect(2*w/3, 2*h/3, w/3, h/3, canvas);
fridge.setColor(Color.blue);
stove = new FilledRect(2*w/3, 0, w/3, w/3, canvas);
stove.setColor(Color.red);
// faucet
new FilledRect(0, h/2, FAUCET_SIZE*2, FAUCET_SIZE, canvas);
new FilledRect(FAUCET_SIZE, h/2 + FAUCET_SIZE, FAUCET_SIZE, FAUCET_SIZE, canvas);
stream = new FilledRect(FAUCET_SIZE*1.33, h/2+2*FAUCET_SIZE, FAUCET_SIZE/3,
FAUCET_SIZE, canvas);
stream.setColor(Color.blue);
// mugs
mug1 = new DrinkMug(new Location(50, 50), canvas);
mug2 = new DrinkMug(new Location(200, 250), canvas);
}
// set up for standard dragging
public void onMousePress(Location point) {
if (mug1.contains(point)) {
draggingMug = mug1;
}
else if (mug2.contains(point)) {
draggingMug = mug2;
}
else {
draggingMug = null;
}
lastMouse = point;
}
// standard dragging
public void onMouseDrag(Location point) {
if (draggingMug != null) {
draggingMug.move(point.getX() - lastMouse.getX(),
point.getY() - lastMouse.getY());
lastMouse = point;
}
}
public void onMouseRelease(Location point) {
if (draggingMug != null) {
// regular dragging move
draggingMug.move(point.getX() - lastMouse.getX(),
point.getY() - lastMouse.getY());
// check for filling, heating, cooling
if (draggingMug.overlaps(stream)) {
draggingMug.fill();
}
if (draggingMug.overlaps(fridge)) {
draggingMug.chill();
}
if (draggingMug.overlaps(stove)) {
draggingMug.heat();
}
}
draggingMug = null;
}
}