Computer Science 252
Problem Solving with Java
Spring 2014, The College of Saint Rose
VanishingScribble Demo
A working demo of VanishingScribble will appear below. Click inside the applet to interact with it.
VanishingScribble BlueJ Project
Click here to download a BlueJ project for VanishingScribble.
VanishingScribble Source Code
The Java source code for VanishingScribble is below. Click on a file name to download it.
import objectdraw.*;
import java.awt.*;
import java.util.Random;
/*
* Example VanishingScribble: draw using lines that either fall off the canvas
* or fade away.
*
* Jim Teresco, Siena College, CSIS 120, Spring 2011
* The College of Saint Rose, Fall 2013
*
* $Id: VanishingScribble.java 2218 2013-10-18 14:06:39Z terescoj $
*/
public class VanishingScribble extends WindowController {
// random generator to pick line types
private Random whichType = new Random();
// the current line type: 0=fading, 1=falling, 2=rising
private int lineType;
// location of last mouse position to draw scribble components
private Location lastMouse;
// pick a type of line (fading or falling) for this scribble
// and remember starting point
public void onMousePress(Location point) {
lineType = whichType.nextInt(3);
lastMouse = point;
}
// draw a segment of the appropriate type of line then update lastMouse
public void onMouseDrag(Location point) {
if (lineType == 0) {
new FadingLine(lastMouse, point, canvas);
}
else if (lineType == 1) {
new FallingLine(lastMouse, point, canvas);
}
else {
new RisingLine(lastMouse, point, canvas);
}
lastMouse = point;
}
}
import objectdraw.*;
import java.awt.*;
/*
* Fading line segments for the VanishingScribble example
*
* A simple active object that controls a line that fades from black
* through shades of grey, then is removed from the canvas when it becomes
* white
*
* Jim Teresco, Siena College, CSIS 120, Spring 2011
* The College of Saint Rose, Fall 2013
*
* $Id: FadingLine.java 2218 2013-10-18 14:06:39Z terescoj $
*/
public class FadingLine extends ActiveObject {
// amount and speed of the fade
private static final double FADE_BY = 2;
private static final int DELAY_TIME = 33;
private static final int INITIAL_DELAY = 1000;
// the line controlled by this instance
private Line line;
// Draw a line and start it falling.
public FadingLine(Location start, Location end, DrawingCanvas aCanvas) {
// draw the line at its initial position
line = new Line(start, end, aCanvas);
// activate!
start();
}
// change the line's color periodically so it fades to white
public void run() {
pause(INITIAL_DELAY);
int hue = 0;
while (hue < 255) {
line.setColor(new Color(hue, hue, hue));
pause(DELAY_TIME);
hue += FADE_BY;
}
line.removeFromCanvas();
}
}
import objectdraw.*;
import java.awt.*;
/*
* Falling line segments for the VanishingScribble example
*
* A simple active object that controls a line that falls down the
* canvas and disappears when it goes off the end.
*
* Jim Teresco, Siena College, CSIS 120, Spring 2011
* The College of Saint Rose, Fall 2013
*
* $Id: FallingLine.java 2218 2013-10-18 14:06:39Z terescoj $
*/
public class FallingLine extends ActiveObject {
// size and speed of falling lines
private static final double INITIAL_Y_SPEED = 0.0001;
private static final int DELAY_TIME = 33;
private static final int INITIAL_DELAY = 100;
// the line controlled by this instance
private Line line;
// how far to fall before stopping and disappearing?
private double yMax;
// Draw a ball and start it falling.
public FallingLine(Location start, Location end, DrawingCanvas aCanvas) {
// draw the line at its initial position
line = new Line(start, end, aCanvas);
// ask the canvas how big it is so we know when to stop
yMax = aCanvas.getHeight();
// activate!
start();
}
// move the line repeatedly until it falls off screen
public void run() {
pause(INITIAL_DELAY);
// start out with a slow fall, then accelerate
double ySpeed = INITIAL_Y_SPEED;
while ((line.getStart().getY() <= yMax) ||
(line.getEnd().getY() <= yMax)) {
line.move(0, ySpeed);
ySpeed = ySpeed * 1.1;
pause(DELAY_TIME);
}
line.removeFromCanvas();
}
}
import objectdraw.*;
import java.awt.*;
/*
* Rising line segments for the VanishingScribble example
*
* A simple active object that controls a line that falls up the
* canvas and disappears when it goes off the end.
*
* Jim Teresco, Siena College, CSIS 120, Spring 2011
* The College of Saint Rose, Fall 2013
*
* $Id: RisingLine.java 2218 2013-10-18 14:06:39Z terescoj $
*/
public class RisingLine extends ActiveObject {
// size and speed of falling lines
private static final double INITIAL_Y_SPEED = 0.0001;
private static final int DELAY_TIME = 33;
private static final int INITIAL_DELAY = 100;
// the line controlled by this instance
private Line line;
// Draw a ball and start it falling.
public RisingLine(Location start, Location end, DrawingCanvas aCanvas) {
// draw the line at its initial position
line = new Line(start, end, aCanvas);
// activate!
start();
}
// move the line repeatedly until it falls off screen
public void run() {
pause(INITIAL_DELAY);
// start out with a slow fall, then accelerate
double ySpeed = -INITIAL_Y_SPEED;
while ((line.getStart().getY() >= 0) ||
(line.getEnd().getY() >= 0)) {
line.move(0, ySpeed);
ySpeed = ySpeed * 1.1;
pause(DELAY_TIME);
}
line.removeFromCanvas();
}
}