Computer Science 252
Problem Solving with Java
Spring 2014, The College of Saint Rose
ColorfulSunset Demo
A working demo of ColorfulSunset will appear below. Click inside the applet to interact with it.
ColorfulSunset BlueJ Project
Click here to download a BlueJ project for ColorfulSunset.
ColorfulSunset Source Code
The Java source code for ColorfulSunset is below. Click on a file name to download it.
import objectdraw.*; import java.awt.*; /* * Example ColorfulSunset * * Better simulation of the sun setting in which it changes color from * yellow to red. This program also illustrates what happens when you * attempt to create a color with values out of the 0..255 range. The * error occurs once the sun has dropped slightly below the horizon. * * Jim Teresco, Siena College, CSIS 120, Spring 2011 * The College of Saint Rose, Fall 2013 * Based on example from Williams College, CSCI 134 * * $Id: ColorfulSunset.java 2317 2014-02-03 22:54:05Z terescoj $ */ public class ColorfulSunset extends WindowController { // the graphical objects on the canvas private FilledRect sky; private FilledRect grass; private FilledOval sun; // positions and sizes of our object private static final int SCENE_WIDTH = 400; private static final int SKY_HEIGHT = 250; private static final int GROUND_HEIGHT = 150; private static final int SUN_X = 80; private static final int SUN_Y = 0; private static final int SUN_DIAMETER = 100; private static final int VELOCITY = 1; // rate at which the sun moves. /* colors for the sun */ private static final int RED_AMOUNT = 255; private static final int BLUE_AMOUNT = 0; private int greenAmount = 255; // not constant, so I can vary it /* * Set up initial scene. */ public void begin() { sky = new FilledRect(0, 0, SCENE_WIDTH, SKY_HEIGHT, canvas); sun = new FilledOval(SUN_X, SUN_Y, SUN_DIAMETER, SUN_DIAMETER, canvas); grass = new FilledRect(0, SKY_HEIGHT, SCENE_WIDTH, GROUND_HEIGHT, canvas); sky.setColor(Color.blue); grass.setColor(Color.green); sun.setColor(new Color(RED_AMOUNT, greenAmount, BLUE_AMOUNT)); } /* * Move the sun down the screen, * changing its color gradually by removing a bit of green * on each step. */ public void onMouseMove(Location point) { sun.move(0, VELOCITY); // remove a little green from the color we're about to create, but // only if this would not make our greenAmount become negative, // which would result in an error. if (greenAmount > 0) { greenAmount--; } sun.setColor(new Color(RED_AMOUNT, greenAmount, BLUE_AMOUNT)); } }