import java.awt.*; /** * A person that can be manipulated and that draws itself on a canvas. * * @author Michael Kšlling and David J. Barnes * @version 2011.07.31 */ public class Person { private int height; private int width; private int xPosition; private int yPosition; private String color; private boolean isVisible; /** * Create a new person at default position with default color. */ public Person() { height = 60; width = 30; xPosition = 280; yPosition = 190; color = "black"; isVisible = false; } /** * Make this person visible. If it was already visible, do nothing. */ public void makeVisible() { isVisible = true; draw(); } /** * Make this person invisible. If it was already invisible, do nothing. */ public void makeInvisible() { erase(); isVisible = false; } /** * Move the person a few pixels to the right. */ public void moveRight() { moveHorizontal(20); } /** * Move the person a few pixels to the left. */ public void moveLeft() { moveHorizontal(-20); } /** * Move the person a few pixels up. */ public void moveUp() { moveVertical(-20); } /** * Move the person a few pixels down. */ public void moveDown() { moveVertical(20); } /** * Move the person horizontally by 'distance' pixels. */ public void moveHorizontal(int distance) { erase(); xPosition += distance; draw(); } /** * Move the person vertically by 'distance' pixels. */ public void moveVertical(int distance) { erase(); yPosition += distance; draw(); } /** * Slowly move the person 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 person 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 newHeight, int newWidth) { erase(); height = newHeight; width = newWidth; draw(); } /** * Change the color. Valid colors are "red", "yellow", "blue", "green", * "magenta" and "black". */ public void changeColor(String newColor) { color = newColor; draw(); } /** * Draw the person with current specifications on screen. */ private void draw() { int bh = (int)(height * 0.7); // body height int hh = (height - bh) / 2; // half head height int hw = width / 2; // half width int x = xPosition; int y = yPosition; if(isVisible) { Canvas canvas = Canvas.getCanvas(); int[] xpoints = { x-3, x-hw, x-hw, x-(int)(hw*0.2)-1, x-(int)(hw*0.2)-1, x-hw, x-hw+(int)(hw*0.4)+1, x, x+hw-(int)(hw*0.4)-1, x+hw, x+(int)(hw*0.2)+1, x+(int)(hw*0.2)+1, x+hw, x+hw, x+3, x+(int)(hw*0.6), x+(int)(hw*0.6), x+3, x-3, x-(int)(hw*0.6), x-(int)(hw*0.6) }; int[] ypoints = { y, y+(int)(bh*0.2), y+(int)(bh*0.4), y+(int)(bh*0.2), y+(int)(bh*0.5), y+bh, y+bh, y+(int)(bh*0.65), y+bh, y+bh, y+(int)(bh*0.5), y+(int)(bh*0.2), y+(int)(bh*0.4), y+(int)(bh*0.2), y, y-hh+3, y-hh-3, y-hh-hh, y-hh-hh, y-hh-3, y-hh+3 }; canvas.draw(this, color, new Polygon(xpoints, ypoints, 21)); canvas.wait(10); } } /** * Erase the person on screen. */ private void erase() { if(isVisible) { Canvas canvas = Canvas.getCanvas(); canvas.erase(this); } } }