Computer Science 120
Introduction to Programming
Spring 2011, Siena College
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 * Based on example from CSCI 134, Williams College * * $Id: FallingSnow.java 1553 2011-02-28 02:11:43Z 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 * * 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() { int snowCount= 0; // continue creating snow until the maximum amount // has been created while (snowCount < MAX_SNOW ) { snowCount = snowCount + 1; new FallingSnow(canvas, snowPic, snowGen.nextValue(), // x coordinate snowGen.nextValue()*2/canvas.getWidth()+2); // y speed pause(FLAKE_INTERVAL); } } }