Computer Science 120
Introduction to Programming
Spring 2011, Siena College
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.*;
/*
* Example VanishingScribble: draw using lines that either fall off the canvas
* or fade away.
*
* Jim Teresco, Siena College, CSIS 120, Spring 2011
*
* $Id: VanishingScribble.java 1541 2011-02-15 21:09:53Z terescoj $
*/
public class VanishingScribble extends WindowController {
// random generator to pick line types
private RandomIntGenerator whichType = new RandomIntGenerator(0,1);
// the current line type: 0=fading, 1=falling
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.nextValue();
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 {
new FallingLine(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
*
* $Id: FadingLine.java 1541 2011-02-15 21:09:53Z 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
*
* $Id: FallingLine.java 1541 2011-02-15 21:09:53Z 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 *= 1.1;
pause(DELAY_TIME);
}
line.removeFromCanvas();
}
}