package graphics15; import java.awt.*; import java.awt.desktop.ScreenSleepEvent; import java.awt.geom.*; import javax.swing.JFrame; /** * William Smolinski * CISS 241 * Cat Snake assignment: Draws a scene with a cat that moves across the screen until it reaches the edge. When it is started * the background scene is created which includes a sun, tree with leaves, blue-white gradient sky, and green grass. The cat is * also created on start and begins to move. There is a tenth of a second delay between each time the cat moves. When the cat moves * the program redraws the grass then draws the cat at a larger x value until it reaches the edge of the screen. */ public class CatSnake extends JFrame { //Used to keep track if it is the first time the paint method has been called private boolean first = true; //The x value of the cat private int x = 40; public CatSnake() { setSize(750, 500); setVisible(true); } public void update(Graphics g) { paint(g); } public void paint(Graphics g) { Graphics2D g2 = (Graphics2D) g; int y = (getHeight() / 2) + 50; //If it is the first time the program will set everything up and it if itsn't, it will move the cat if(first) { //Creating the sky Point2D skyTopLeft = new Point2D.Float(0, 0); Point2D skyBottomRight = new Point2D.Float(getWidth(), getHeight() / 2); GradientPaint sky = new GradientPaint(skyTopLeft, Color.cyan, skyBottomRight, Color.white); g2.setPaint(sky); Rectangle2D skyBox = new Rectangle2D.Float(0, 0, getWidth(), getHeight() / 2); g2.fill(skyBox); //Creating the ground g2.setColor(Color.green); Rectangle2D ground = new Rectangle2D.Float(0, getHeight() / 2, getWidth(), getHeight() / 2); g2.fill(ground); //Creating the tree trunk g2.setColor(Color.darkGray); Rectangle2D trunk = new Rectangle2D.Float(getWidth() / 2, (getHeight() / 2) - 100, 10, 100); g2.fill(trunk); //Creating the tree leaves g2.setColor(Color.green); Arc2D leaves = new Arc2D.Float((getWidth() / 2) - 45, (getHeight() / 2) - 125, 100, 75, 0, 180, Arc2D.OPEN); g2.fill(leaves); //Creating the sun g2.setColor(Color.yellow); Ellipse2D sun = new Ellipse2D.Float(75, 50, 50, 50); g2.fill(sun); //Creating the cat g2.setColor(Color.red); GeneralPath cat = new GeneralPath(); BasicStroke b1 = new BasicStroke(3); cat.moveTo(x, y); cat.lineTo(x += 30, y); cat.lineTo(x += 10, y -= 10); cat.lineTo(x, y += 50); cat.lineTo(x -= 50, y); cat.lineTo(x, y -= 50); cat.lineTo(x += 10, y += 10); g2.setStroke(b1); g2.draw(cat); //Creating the eyes g2.setColor(Color.blue); Ellipse2D leftEye = new Ellipse2D.Float(x, y + 10, 10, 10); Ellipse2D rightEye = new Ellipse2D.Float(x + 20, y + 10, 10, 10); g2.fill(leftEye); g2.fill(rightEye); first = false; } //Will loop until the cat is at the edge of the screen while(x + 50 < getWidth()) { x += 10; try { //Sleeps for a tenth of a second Thread.sleep(100); } catch (InterruptedException e) { //Do nothing } //Drawing over the previous drawing g2.setColor(Color.green); Rectangle2D ground = new Rectangle2D.Float(0, getHeight() / 2, getWidth(), getHeight() / 2); g2.fill(ground); //Creating the cat g2.setColor(Color.red); GeneralPath cat = new GeneralPath(); BasicStroke b1 = new BasicStroke(3); cat.moveTo(x, y); cat.lineTo(x += 30, y); cat.lineTo(x += 10, y -= 10); cat.lineTo(x, y += 50); cat.lineTo(x -= 50, y); cat.lineTo(x, y -= 50); cat.lineTo(x += 10, y += 10); g2.setStroke(b1); g2.draw(cat); //Creating the eyes g2.setColor(Color.blue); Ellipse2D leftEye = new Ellipse2D.Float(x, y + 10, 10, 10); Ellipse2D rightEye = new Ellipse2D.Float(x + 20, y + 10, 10, 10); g2.fill(leftEye); g2.fill(rightEye); repaint(); } } public static void main(String[] args) { CatSnake f = new CatSnake(); } }