192 lines
3.6 KiB
Java
192 lines
3.6 KiB
Java
import java.awt.*;
|
|
|
|
/**
|
|
* A square 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 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 = 60;
|
|
xPosition = 310;
|
|
yPosition = 120;
|
|
color = "red";
|
|
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);
|
|
}
|
|
}
|
|
}
|