Computer Science 252
Problem Solving with Java
Spring 2014, The College of Saint Rose
FallingSnow Demo
A working demo of FallingSnow will appear below. Click inside the applet to interact with it.
FallingSnow BlueJ Project
Click here to download a BlueJ project for FallingSnow.
FallingSnow Source Code
The Java source code for FallingSnow 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
* The College of Saint Rose, Fall 2013
* Based on example from CSCI 134, Williams College
*
* $Id: FallingSnow.java 2218 2013-10-18 14:06:39Z 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
* The College of Saint Rose, Fall 2013
* Based on example from CSCI 134, Williams College
*
* $Id: Snow.java 2322 2014-02-13 02:04:20Z 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: note that the getImage method is only
// provided in WindowController classes, so we need to
// do this here and pass it along to the other classes where
// we use it to construct a VisibleImage that can be
// placed on the canvas
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 onMousePress(Location point) {
// make a new snow-dropping cloud when the user clicks
new Cloud(snowPic, canvas);
}
}
import objectdraw.*;
import java.awt.*;
import java.util.Random;
/*
*
* Example FallingSnow: the cloud class which is responsible for
* creating a bunch of snowflakes
*
* Jim Teresco, Siena College, CSIS 120, Spring 2011
* The College of Saint Rose, Fall 2013, Spring 2014
* Based on example from CSCI 134, Williams College
*
* $Id: Cloud.java 2322 2014-02-13 02:04:20Z 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 Random snowGen;
public Cloud(Image aSnowPic, DrawingCanvas aCanvas) {
// save the parameters for the "run" method
canvas = aCanvas;
snowPic = aSnowPic;
snowGen = new Random();
start();
}
public void run()
{
// continue creating snow flakes until we've created
// MAX_SNOW of them
for (int snowCount = 0; snowCount < MAX_SNOW; snowCount++) {
new FallingSnow(canvas, snowPic,
snowGen.nextInt((int)canvas.getWidth()), // x coordinate
snowGen.nextDouble()*2+2); // y speed
pause(FLAKE_INTERVAL);
}
}
}