109 lines
2.8 KiB
Plaintext
109 lines
2.8 KiB
Plaintext
// This file is part of www.nand2tetris.org
|
|
// and the book "The Elements of Computing Systems"
|
|
// by Nisan and Schocken, MIT Press.
|
|
// File name: projects/09/Square/Square.jack
|
|
|
|
/** Implements a graphical square. */
|
|
class Square {
|
|
|
|
field int x, y; // screen location of the square's top-left corner
|
|
field int size; // length of this square, in pixels
|
|
|
|
/** Constructs a new square with a given location and size. */
|
|
constructor Square new(int Ax, int Ay, int Asize) {
|
|
let x = Ax;
|
|
let y = Ay;
|
|
let size = Asize;
|
|
do draw();
|
|
return this;
|
|
}
|
|
|
|
/** Disposes this square. */
|
|
method void dispose() {
|
|
do Memory.deAlloc(this);
|
|
return;
|
|
}
|
|
|
|
/** Draws the square on the screen. */
|
|
method void draw() {
|
|
do Screen.setColor(true);
|
|
do Screen.drawRectangle(x, y, x + size, y + size);
|
|
return;
|
|
}
|
|
|
|
/** Erases the square from the screen. */
|
|
method void erase() {
|
|
do Screen.setColor(false);
|
|
do Screen.drawRectangle(x, y, x + size, y + size);
|
|
return;
|
|
}
|
|
|
|
/** Increments the square size by 2 pixels. */
|
|
method void incSize() {
|
|
if (((y + size) < 254) & ((x + size) < 510)) {
|
|
do erase();
|
|
let size = size + 2;
|
|
do draw();
|
|
}
|
|
return;
|
|
}
|
|
|
|
/** Decrements the square size by 2 pixels. */
|
|
method void decSize() {
|
|
if (size > 2) {
|
|
do erase();
|
|
let size = size - 2;
|
|
do draw();
|
|
}
|
|
return;
|
|
}
|
|
|
|
/** Moves the square up by 2 pixels. */
|
|
method void moveUp() {
|
|
if (y > 1) {
|
|
do Screen.setColor(false);
|
|
do Screen.drawRectangle(x, (y + size) - 1, x + size, y + size);
|
|
let y = y - 2;
|
|
do Screen.setColor(true);
|
|
do Screen.drawRectangle(x, y, x + size, y + 1);
|
|
}
|
|
return;
|
|
}
|
|
|
|
/** Moves the square down by 2 pixels. */
|
|
method void moveDown() {
|
|
if ((y + size) < 254) {
|
|
do Screen.setColor(false);
|
|
do Screen.drawRectangle(x, y, x + size, y + 1);
|
|
let y = y + 2;
|
|
do Screen.setColor(true);
|
|
do Screen.drawRectangle(x, (y + size) - 1, x + size, y + size);
|
|
}
|
|
return;
|
|
}
|
|
|
|
/** Moves the square left by 2 pixels. */
|
|
method void moveLeft() {
|
|
if (x > 1) {
|
|
do Screen.setColor(false);
|
|
do Screen.drawRectangle((x + size) - 1, y, x + size, y + size);
|
|
let x = x - 2;
|
|
do Screen.setColor(true);
|
|
do Screen.drawRectangle(x, y, x + 1, y + size);
|
|
}
|
|
return;
|
|
}
|
|
|
|
/** Moves the square right by 2 pixels. */
|
|
method void moveRight() {
|
|
if ((x + size) < 510) {
|
|
do Screen.setColor(false);
|
|
do Screen.drawRectangle(x, y, x + 1, y + size);
|
|
let x = x + 2;
|
|
do Screen.setColor(true);
|
|
do Screen.drawRectangle((x + size) - 1, y, x + size, y + size);
|
|
}
|
|
return;
|
|
}
|
|
}
|