import java.awt.*; /** * A square that can be manipulated and that draws itself on a canvas. * * @author Michael Kolling and David J. Barnes * @version 1.0 (15 July 2000) */ public class Square { private int size; private int xPosition; private int yPosition; private String color; private boolean isVisible; /** * Create a new square at default position with default color. */ public Square() { /* size = 30; xPosition = 60; yPosition = 50; color = "red"; isVisible = false; */ this(60, 50,20,"blue"); } public Square(int xStart, int yStart, int sizeStart, String colorStart) { size = sizeStart; xPosition = xStart; yPosition = yStart; color = colorStart; isVisible = false; } /** * Make this square visible. If it was already visible, do nothing. */ public void makeVisible() { isVisible = true; draw(); } /** * Make this square invisible. If it was already invisible, do nothing. */ public void makeInvisible() { erase(); isVisible = false; } /** * Move the square a few pixels to the right. */ public void moveRight() { moveHorizontal(20); } /** * Move the square a few pixels to the left. */ public void moveLeft() { moveHorizontal(-20); } /** * Move the square a few pixels up. */ public void moveUp() { moveVertical(-20); } /** * Move the square a few pixels down. */ public void moveDown() { moveVertical(20); } /** * Move the square horizontally by 'distance' pixels. */ public void moveHorizontal(int distance) { erase(); xPosition += distance; draw(); } /** * Move the square vertically by 'distance' pixels. */ public void moveVertical(int distance) { erase(); yPosition += distance; draw(); } /** * Slowly move the square horizontally by 'distance' pixels. */ public void slowMoveHorizontal(int distance) { int delta; if(distance < 0) { delta = -1; distance = -distance; } else { delta = 1; } for(int i = 0; i < distance; i++) { xPosition += delta; draw(); } } /** * Slowly move the square vertically by 'distance' pixels. */ public void slowMoveVertical(int distance) { int delta; if(distance < 0) { delta = -1; distance = -distance; } else { delta = 1; } for(int i = 0; i < distance; i++) { yPosition += delta; draw(); } } /** * Change the size to the new size (in pixels). Size must be >= 0. */ public void changeSize(int newSize) { erase(); size = newSize; draw(); } /** * Change the color. Valid colors are "red", "yellow", "blue", "green", * "magenta" and "black". */ public void changeColor(String newColor) { color = newColor; draw(); } /* * Draw the square with current specifications on screen. */ private void draw() { if(isVisible) { Canvas canvas = Canvas.getCanvas(); canvas.draw(this, color, new Rectangle(xPosition, yPosition, size, size)); canvas.wait(10); } } /* * Erase the square on screen. */ private void erase() { if(isVisible) { Canvas canvas = Canvas.getCanvas(); canvas.erase(this); } } public static void relay() { Square one, two, three, four; one = new Square(10, 10, 30,"red"); two = new Square(570, 10,20,"blue"); three = new Square(570, 570,30,"magenta"); four = new Square(10, 570,20,"yellow"); relay(one, two, three, four); } public static void relay(Square nw, Square ne, Square se, Square sw) { nw.makeVisible(); sw.makeVisible(); ne.makeVisible(); se.makeVisible(); nw.slowMoveHorizontal(570); nw.erase(); ne.slowMoveVertical(570); ne.erase(); se.slowMoveHorizontal(-570); se.erase(); sw.slowMoveVertical(-570); } }