Computer Science 120
Introduction to Programming
Spring 2011, Siena College
FallingSnowFor Demo
A working demo of FallingSnowFor will appear below. Click inside the applet to interact with it.
FallingSnowFor BlueJ Project
Click here to download a BlueJ project for FallingSnowFor.
FallingSnowFor Source Code
The Java source code for FallingSnowFor is below. Click on a file name to download it.
import objectdraw.*;
import java.awt.*;
/*
*
* Example FallingSnow: the snowflakes that fall
*
* Jim Teresco, Siena College, CSIS 120, Spring 2011
* Based on example from CSCI 134, Williams College
*
* $Id: FallingSnow.java 1573 2011-03-22 16:50:13Z terescoj $
*/
public class FallingSnow extends ActiveObject {
// delay between snow motions
private static final int DELAY_TIME = 33;
private DrawingCanvas canvas;
// speed of fall
private double ySpeed;
// the snowflake
private VisibleImage snow;
// initialize the instance variables and start the active object
public FallingSnow(DrawingCanvas aCanvas, Image aSnowPic,
double x, double aSpeed) {
canvas = aCanvas;
ySpeed = aSpeed;
snow = new VisibleImage(aSnowPic, 0, 0, canvas);
snow.move(x, - snow.getHeight());
start();
}
public void run() {
// as long as the snow is still on the screen
// move it and pause
while (snow.getY() < canvas.getHeight()) {
pause(DELAY_TIME);
snow.move(0,ySpeed);
}
snow.removeFromCanvas();
}
}
import objectdraw.*;
import java.awt.*;
/*
*
* Example FallingSnow: the main class that creates clouds, which in turn
* create falling snowflakes.
*
* Jim Teresco, Siena College, CSIS 120, Spring 2011
* Based on example from CSCI 134, Williams College
*
* $Id: Snow.java 1553 2011-02-28 02:11:43Z terescoj $
*/
// Program which creates clouds which create snow when the user clicks
public class Snow extends WindowController {
// constants for the moon size and location
private static final double MOON_INSET = 50;
private static final int MOON_SIZE = 70;
// sizes and locations for the bricks
private static final double BRICK_LINE = 40; // from bottom
private static final double BRICK_HEIGHT = 12;
private static final double BRICK_WIDTH = 30;
private static final double BRICK_SPACING = 3;
// colors of the sky, mortar, and brick
private final Color NIGHTSKY = new Color(50, 50, 100);
private final Color MORTAR = new Color(200, 200, 200);
private final Color BRICKRED = new Color(150, 40, 40);
// image of the snow
private Image snowPic;
public void begin() {
// where to draw next brick
double brickPosition;
// get leaf picture
snowPic = getImage("snow.gif");
// draw solid sky, mortar, and moon
new FilledRect(0, 0, canvas.getWidth(), canvas.getHeight() - BRICK_LINE, canvas).setColor(NIGHTSKY);
new FilledRect(0, canvas.getHeight() - BRICK_LINE, canvas.getWidth(),
canvas.getHeight(),
canvas).setColor(MORTAR);
new FilledOval(MOON_INSET,MOON_INSET,MOON_SIZE,MOON_SIZE,
canvas).setColor(Color.white);
// add the bricks
brickPosition = 0;
while ( brickPosition < canvas.getWidth() ) {
new FilledRect(brickPosition, canvas.getHeight() - BRICK_LINE,
BRICK_WIDTH, BRICK_HEIGHT,
canvas).setColor(BRICKRED);
brickPosition = brickPosition + BRICK_WIDTH + BRICK_SPACING;
}
}
public void onMouseClick(Location point) {
// make a new snow-dropping cloud when the user clicks
new Cloud(snowPic, canvas);
}
}
import objectdraw.*;
import java.awt.*;
/*
*
* Example FallingSnow: the cloud class which is responsible for
* creating a bunch of snowflakes, but this time using
* for loop for counting.
*
* Jim Teresco, Siena College, CSIS 120, Spring 2011
* Based on example from CSCI 134, Williams College
*
* $Id: Cloud.java 1553 2011-02-28 02:11:43Z terescoj $
*/
public class Cloud extends ActiveObject {
// total number of snowflakes
private static final int MAX_SNOW = 150;
// time between flakes
private static final int FLAKE_INTERVAL = 900;
// the canvas
private DrawingCanvas canvas;
// picture of a snowflake
private Image snowPic;
// used to generate random speeds and positions for snowflakes
private RandomIntGenerator snowGen;
public Cloud(Image aSnowPic, DrawingCanvas aCanvas) {
// save the parameters for the "run" method
canvas = aCanvas;
snowPic = aSnowPic;
snowGen = new RandomIntGenerator(0, canvas.getWidth());
start();
}
public void run()
{
// continue creating snow until the maximum amount
// has been created
for (int snowCount = 0; snowCount < MAX_SNOW; snowCount++) {
new FallingSnow(canvas, snowPic,
snowGen.nextValue(), // x coordinate
snowGen.nextValue()*2/canvas.getWidth()+2); // y speed
pause(FLAKE_INTERVAL);
}
}
}