Files
G4G0-1/Semester 1/Programming 1/Java/Chapter01/House with Two Suns/Person.java
2024-01-15 20:14:10 +00:00

207 lines
4.6 KiB
Java

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 2016.02.29
*/
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);
}
}
}