mirror of
https://github.com/soconnor0919/eceg431.git
synced 2025-12-11 22:54:43 -05:00
project09 - template
This commit is contained in:
103
09/Pong/Bat.jack
Normal file
103
09/Pong/Bat.jack
Normal file
@@ -0,0 +1,103 @@
|
||||
// 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/9/Pong/Bat.jack
|
||||
/**
|
||||
* A graphical bat in a Pong game.
|
||||
* Displayed as a filled horizontal rectangle that has a screen location,
|
||||
* a width and a height.
|
||||
* Has methods for drawing, erasing, moving left and right, and changing
|
||||
* its width (to make the hitting action more challenging).
|
||||
* This class should have been called "Paddle", following the
|
||||
* standard Pong terminology. Unaware of this terminology,
|
||||
* we called it "bat", and the name stuck.
|
||||
*/
|
||||
class Bat {
|
||||
|
||||
field int x, y; // the bat's screen location
|
||||
field int width, height; // the bat's width and height
|
||||
field int direction; // direction of the bat's movement
|
||||
// (1 = left, 2 = right)
|
||||
|
||||
/** Constructs a new bat with the given location and width. */
|
||||
constructor Bat new(int Ax, int Ay, int Awidth, int Aheight) {
|
||||
let x = Ax;
|
||||
let y = Ay;
|
||||
let width = Awidth;
|
||||
let height = Aheight;
|
||||
let direction = 2;
|
||||
do show();
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Deallocates the object's memory. */
|
||||
method void dispose() {
|
||||
do Memory.deAlloc(this);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Shows the bat. */
|
||||
method void show() {
|
||||
do Screen.setColor(true);
|
||||
do draw();
|
||||
return;
|
||||
}
|
||||
|
||||
/** Hides the bat. */
|
||||
method void hide() {
|
||||
do Screen.setColor(false);
|
||||
do draw();
|
||||
return;
|
||||
}
|
||||
|
||||
/** Draws the bat. */
|
||||
method void draw() {
|
||||
do Screen.drawRectangle(x, y, x + width, y + height);
|
||||
return;
|
||||
}
|
||||
|
||||
/** Sets the bat's direction (0=stop, 1=left, 2=right). */
|
||||
method void setDirection(int Adirection) {
|
||||
let direction = Adirection;
|
||||
return;
|
||||
}
|
||||
|
||||
/** Returns the bat's left edge. */
|
||||
method int getLeft() {
|
||||
return x;
|
||||
}
|
||||
|
||||
/** Returns the bat's right edge. */
|
||||
method int getRight() {
|
||||
return x + width;
|
||||
}
|
||||
|
||||
/** Sets the bat's width. */
|
||||
method void setWidth(int Awidth) {
|
||||
do hide();
|
||||
let width = Awidth;
|
||||
do show();
|
||||
return;
|
||||
}
|
||||
|
||||
/** Moves the bat one step in the bat's direction. */
|
||||
method void move() {
|
||||
if (direction = 1) {
|
||||
let x = x - 4;
|
||||
if (x < 0) { let x = 0; }
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle((x + width) + 1, y, (x + width) + 4, y + height);
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle(x, y, x + 3, y + height);
|
||||
}
|
||||
else {
|
||||
let x = x + 4;
|
||||
if ((x + width) > 511) { let x = 511 - width; }
|
||||
do Screen.setColor(false);
|
||||
do Screen.drawRectangle(x - 4, y, x - 1, y + height);
|
||||
do Screen.setColor(true);
|
||||
do Screen.drawRectangle((x + width) - 3, y, x + width, y + height);
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user