nand2/07_Operating_System/12_Tetris/Grid.jack

90 lines
1.6 KiB
Plaintext
Raw Permalink Normal View History

2023-01-11 10:13:09 +00:00
class Grid {
field Array grid;
/** Constructs a new Tile
*/
constructor Grid new() {
var int i;
let grid = Array.new(220);
do Screen.setPenColor(Screen.DARKGREY());
do Screen.drawRectangle(2,4,3,283);
do Screen.drawRectangle(2,284,147,285);
do Screen.drawRectangle(146,4,147,285);
let i=0;
while (i<220){
let grid[i]=-1;
let i=i+1;
}
return this;
}
/** Deallocates the Tile's memory. */
method void dispose() {
do grid.dispose();
do Memory.deAlloc(this);
return;
}
method void draw(int x, int y, int color){
do Screen.setPenColor(color);
do Screen.drawRectangle((x*14)+6,(y*14)-24,(x*14)+18,(y*14)-12);
if ((x<10)&(x>-1)&(y>-1)&(y<22)) {let grid[(y*10)+x] = color;}
return;
}
method boolean hasTile(int x, int y){
if ((x>9)|(x<0)|(y>21)|(y<0)){
return true;
}
if (grid[(y*10)+x]=-1){
return false;
}
return true;
}
method boolean isClear(int x, int y){
return (grid[(y*10)+x]=Screen.DARKGREY());
}
method int clearRow(){
var int x,y,z;
var int r;
var boolean isClear;
let y=0;
let r=0;
while (y<22){
let isClear = true;
let x=0;
while (x<10){
if (~hasTile(x,y)) { let isClear = false;}
let x=x+1;
}
if (isClear){
let r=r+1;
let x=0;
while (x<10){
do draw(x,y,Screen.DARKGREY());
let x=x+1;
}
}
let y = y+1;
}
let y=1;
while (y<22){
let x=0;
while (x<10){
if (isClear(x,y)) {
let z=y;
while (z>0){
do draw(x,z,grid[(z*10)-10+x]);
let z=z-1;
}
}
let x=x+1;
}
let y = y+1;
}
return r;
}
}