diff options
Diffstat (limited to 'projects/09/K')
-rw-r--r-- | projects/09/K/Board.jack | 327 | ||||
-rw-r--r-- | projects/09/K/Board.vm | 1465 | ||||
-rw-r--r-- | projects/09/K/K.txt | 25 | ||||
-rw-r--r-- | projects/09/K/KGame.jack | 57 | ||||
-rw-r--r-- | projects/09/K/KGame.vm | 169 | ||||
-rw-r--r-- | projects/09/K/Main.jack | 10 | ||||
-rw-r--r-- | projects/09/K/Main.vm | 13 |
7 files changed, 0 insertions, 2066 deletions
diff --git a/projects/09/K/Board.jack b/projects/09/K/Board.jack deleted file mode 100644 index 91a8d98..0000000 --- a/projects/09/K/Board.jack +++ /dev/null @@ -1,327 +0,0 @@ -class Board { - field Array grid; - field int nTurn, seed, status; // status: 0: begin game; 1: in game; 2: lose; 3: win; - static String boardBar, strLost, strCont, strGameOver, strWon, strTurn; - - constructor Board new() { - var int i; - let grid = Array.new(4); - let i = 0; - while (i < 4) { - let grid[i] = Array.new(4); - let i = i + 1; - } - do initBoard(); - let seed = 0; - return this; - } - - function void init() { - let boardBar = "+----+"; - let strLost = "You lost!"; - let strWon = "You won!"; - let strCont = "Press any key to continue"; - let strGameOver = "Game over!"; - let strTurn = "Turn: "; - return; - } - - method void initBoard() { - var int i, j; - var Array t; - let i = 0; - while (i < 4) { - let j = 0; - let t = grid[i]; - while (j < 4) { - let t[j] = 32; - let j = j + 1; - } - let i = i + 1; - } - let t = grid[0]; - let t[0] = 65; - let nTurn = 0; - let status = 0; - return; - } - - - method void transpose() { - do exch(0, 1); - do exch(0, 2); - do exch(0, 3); - do exch(1, 2); - do exch(1, 3); - do exch(2, 3); - return; - } - - method void exch(int i, int j){ - var int t; - var Array s1, s2; - let s1 = grid[i]; - let s2 = grid[j]; - let t = s1[j]; - let s1[j] = s2[i]; - let s2[i] = t; - return; - } - - method void align(Array xs, boolean left){ - var int i, j; - let i = 0; - let j = 0; - if (left) { - while (i < 4) { - if (xs[i] > 64) { - let xs[j] = xs[i]; - let j = j + 1; - } - let i = i + 1; - } - while (j < 4) { - let xs[j] = 32; - let j = j + 1; - } - } else { - while (i < 4) { - if (xs[3 - i] > 64) { - let xs[3 - j] = xs[3 - i]; - let j = j + 1; - } - let i = i + 1; - } - while (j < 4) { - let xs[3 - j] = 32; - let j = j + 1; - } - } - return; - } - - method void reduce(Array xs, boolean left){ - if ((xs[0] = xs[1]) & (xs[2] = xs[3]) & (xs[0] > 64) & (xs[2] > 64)) { - if (left) { - let xs[0] = xs[0] + 1; - let xs[1] = xs[2] + 1; - let xs[2] = 32; - let xs[3] = 32; - } else { - let xs[3] = xs[3] + 1; - let xs[2] = xs[1] + 1; - let xs[1] = 32; - let xs[0] = 32; - } - return; - } - if ((xs[0] = xs[1]) & (xs[0] > 64)) { - if (left) { - let xs[0] = xs[0] + 1; - let xs[1] = xs[2]; - let xs[2] = xs[3]; - let xs[3] = 32; - } else { - let xs[1] = xs[1] + 1; - let xs[0] = 32; - } - return; - } - if ((xs[2] = xs[3]) & (xs[2] > 64)) { - if (left) { - let xs[2] = xs[2] + 1; - let xs[3] = 32; - } else { - let xs[3] = xs[3] + 1; - let xs[2] = xs[1]; - let xs[1] = xs[0]; - let xs[0] = 32; - } - return; - } - if ((xs[1] = xs[2]) & (xs[1] > 64)) { - if (left) { - let xs[1] = xs[1] + 1; - let xs[2] = xs[3]; - let xs[3] = 32; - } else { - let xs[2] = xs[2] + 1; - let xs[1] = xs[0]; - let xs[0] = 32; - } - return; - } - return; - } - - method void addTile(){ - var Array t; - var int r, c, parity, newTile; - /* - let t = grid[1]; - if (t[1] = 32) { - let t[1] = 65; - } - */ - - if (~(status = 1)) { - return; - } - - let seed = seed * 25173 + 13849; - if (seed < 0) { - let seed = - seed; - } - - if (seed - (seed / 2 * 2) = 0) { - let parity = 1; - } else { - let parity = -1; - } - - let seed = seed - (seed / 16 * 16); - let r = seed / 4; - let c = seed - (4 * r); - let t = grid[r]; - let newTile = 65; - - while (t[c] > 64){ - let seed = seed + parity; - if (seed < 0) { - let seed = 15; - } - let seed = seed - (seed / 16 * 16); - let r = seed / 4; - let c = seed - (4 * r); - let t = grid[r]; - let newTile = 131 - newTile; - } - let t[c] = newTile; - return; - } - - method void transform(char dir){ - var boolean isVertical, left; - var int i; - if ((dir = 0) | (dir = 1)) { - let left = true; - } else { - let left = false; - } - if ((dir = 0) | (dir = 2)) { - let isVertical = false; - } else { - let isVertical = true; - } - if (isVertical) { - do transpose(); - } - let i = 0; - while (i < 4) { - do align(grid[i], left); - do reduce(grid[i], left); - let i = i + 1; - } - if (isVertical) { - do transpose(); - } - return; - } - - method void next(int dir){ - let nTurn = nTurn + 1; - do transform(dir); - do updateStatus(); - return; - } - - method int getStatus(){ - return status; - } - - method void setStatus(int x){ - let status = x; - return; - } - - method void updateStatus(){ - var int i, j; - var Array r; - let i = 0; - while (i < 4) { - let r = grid[i]; - let j = 0; - while (j < 4) { - if (r[j] = 75) { - let status = 3; - return; - } - if (r[j] = 32) { - let status = 1; - return; - } - let j = j + 1; - } - let i = i + 1; - } - let status = 2; - return; - } - - method void draw(){ - var int r, c, i, j; - var Array t; - let r = 9; - let c = 30; - - if (status = 0) { - do Output.moveCursor(r - 1, c - 1); - do Output.printChar(75); - do Output.moveCursor(r + 1, c - 1); - do Output.printString(strCont); - } else { if (status = 2) { - do Output.moveCursor(r - 1, c - 1); - do Output.printString(strGameOver); - do Output.moveCursor(r + 1, c - 1); - do Output.printString(strLost); - do Output.moveCursor(r + 3, c - 1); - do Output.printString(strCont); - } else { if (status = 3) { - do Output.moveCursor(r - 1, c - 1); - do Output.printString(strGameOver); - do Output.moveCursor(r + 1, c - 1); - do Output.printString(strWon); - do Output.moveCursor(r + 3, c - 1); - do Output.printString(strCont); - } else { - do Output.moveCursor(r - 1, c - 1); - do Output.printString(boardBar); - do Output.moveCursor(r + 4, c - 1); - do Output.printString(boardBar); - - let i = 0; - while (i < 4) { - let j = 0; - do Output.moveCursor(r + i, c - 1); - do Output.printChar(124); // 124 is | - let t = grid[i]; - while (j < 4) { - do Output.printChar(t[j]); - let j = j + 1; - } - do Output.printChar(124); - let i = i + 1; - } - - do Output.moveCursor(r + 6, c - 2); - do Output.printString(strTurn); - do Output.printInt(nTurn); - }}} - return; - } - - method void dispose() { - do Memory.deAlloc(this); - return; - } -} diff --git a/projects/09/K/Board.vm b/projects/09/K/Board.vm deleted file mode 100644 index 985e813..0000000 --- a/projects/09/K/Board.vm +++ /dev/null @@ -1,1465 +0,0 @@ -function Board.new 1 -push constant 4 -call Memory.alloc 1 -pop pointer 0 -push constant 4 -call Array.new 1 -pop this 0 -push constant 0 -pop local 0 -label WHILE_EXP0 -push local 0 -push constant 4 -lt -not -if-goto WHILE_END0 -push local 0 -push this 0 -add -push constant 4 -call Array.new 1 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push local 0 -push constant 1 -add -pop local 0 -goto WHILE_EXP0 -label WHILE_END0 -push pointer 0 -call Board.initBoard 1 -pop temp 0 -push constant 0 -pop this 2 -push pointer 0 -return -function Board.init 0 -push constant 6 -call String.new 1 -push constant 43 -call String.appendChar 2 -push constant 45 -call String.appendChar 2 -push constant 45 -call String.appendChar 2 -push constant 45 -call String.appendChar 2 -push constant 45 -call String.appendChar 2 -push constant 43 -call String.appendChar 2 -pop static 0 -push constant 9 -call String.new 1 -push constant 89 -call String.appendChar 2 -push constant 111 -call String.appendChar 2 -push constant 117 -call String.appendChar 2 -push constant 32 -call String.appendChar 2 -push constant 108 -call String.appendChar 2 -push constant 111 -call String.appendChar 2 -push constant 115 -call String.appendChar 2 -push constant 116 -call String.appendChar 2 -push constant 33 -call String.appendChar 2 -pop static 1 -push constant 8 -call String.new 1 -push constant 89 -call String.appendChar 2 -push constant 111 -call String.appendChar 2 -push constant 117 -call String.appendChar 2 -push constant 32 -call String.appendChar 2 -push constant 119 -call String.appendChar 2 -push constant 111 -call String.appendChar 2 -push constant 110 -call String.appendChar 2 -push constant 33 -call String.appendChar 2 -pop static 4 -push constant 25 -call String.new 1 -push constant 80 -call String.appendChar 2 -push constant 114 -call String.appendChar 2 -push constant 101 -call String.appendChar 2 -push constant 115 -call String.appendChar 2 -push constant 115 -call String.appendChar 2 -push constant 32 -call String.appendChar 2 -push constant 97 -call String.appendChar 2 -push constant 110 -call String.appendChar 2 -push constant 121 -call String.appendChar 2 -push constant 32 -call String.appendChar 2 -push constant 107 -call String.appendChar 2 -push constant 101 -call String.appendChar 2 -push constant 121 -call String.appendChar 2 -push constant 32 -call String.appendChar 2 -push constant 116 -call String.appendChar 2 -push constant 111 -call String.appendChar 2 -push constant 32 -call String.appendChar 2 -push constant 99 -call String.appendChar 2 -push constant 111 -call String.appendChar 2 -push constant 110 -call String.appendChar 2 -push constant 116 -call String.appendChar 2 -push constant 105 -call String.appendChar 2 -push constant 110 -call String.appendChar 2 -push constant 117 -call String.appendChar 2 -push constant 101 -call String.appendChar 2 -pop static 2 -push constant 10 -call String.new 1 -push constant 71 -call String.appendChar 2 -push constant 97 -call String.appendChar 2 -push constant 109 -call String.appendChar 2 -push constant 101 -call String.appendChar 2 -push constant 32 -call String.appendChar 2 -push constant 111 -call String.appendChar 2 -push constant 118 -call String.appendChar 2 -push constant 101 -call String.appendChar 2 -push constant 114 -call String.appendChar 2 -push constant 33 -call String.appendChar 2 -pop static 3 -push constant 6 -call String.new 1 -push constant 84 -call String.appendChar 2 -push constant 117 -call String.appendChar 2 -push constant 114 -call String.appendChar 2 -push constant 110 -call String.appendChar 2 -push constant 58 -call String.appendChar 2 -push constant 32 -call String.appendChar 2 -pop static 5 -push constant 0 -return -function Board.initBoard 3 -push argument 0 -pop pointer 0 -push constant 0 -pop local 0 -label WHILE_EXP0 -push local 0 -push constant 4 -lt -not -if-goto WHILE_END0 -push constant 0 -pop local 1 -push local 0 -push this 0 -add -pop pointer 1 -push that 0 -pop local 2 -label WHILE_EXP1 -push local 1 -push constant 4 -lt -not -if-goto WHILE_END1 -push local 1 -push local 2 -add -push constant 32 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push local 1 -push constant 1 -add -pop local 1 -goto WHILE_EXP1 -label WHILE_END1 -push local 0 -push constant 1 -add -pop local 0 -goto WHILE_EXP0 -label WHILE_END0 -push constant 0 -push this 0 -add -pop pointer 1 -push that 0 -pop local 2 -push constant 0 -push local 2 -add -push constant 65 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 0 -pop this 1 -push constant 0 -pop this 3 -push constant 0 -return -function Board.transpose 0 -push argument 0 -pop pointer 0 -push pointer 0 -push constant 0 -push constant 1 -call Board.exch 3 -pop temp 0 -push pointer 0 -push constant 0 -push constant 2 -call Board.exch 3 -pop temp 0 -push pointer 0 -push constant 0 -push constant 3 -call Board.exch 3 -pop temp 0 -push pointer 0 -push constant 1 -push constant 2 -call Board.exch 3 -pop temp 0 -push pointer 0 -push constant 1 -push constant 3 -call Board.exch 3 -pop temp 0 -push pointer 0 -push constant 2 -push constant 3 -call Board.exch 3 -pop temp 0 -push constant 0 -return -function Board.exch 3 -push argument 0 -pop pointer 0 -push argument 1 -push this 0 -add -pop pointer 1 -push that 0 -pop local 1 -push argument 2 -push this 0 -add -pop pointer 1 -push that 0 -pop local 2 -push argument 2 -push local 1 -add -pop pointer 1 -push that 0 -pop local 0 -push argument 2 -push local 1 -add -push argument 1 -push local 2 -add -pop pointer 1 -push that 0 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push argument 1 -push local 2 -add -push local 0 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 0 -return -function Board.align 2 -push argument 0 -pop pointer 0 -push constant 0 -pop local 0 -push constant 0 -pop local 1 -push argument 2 -if-goto IF_TRUE0 -goto IF_FALSE0 -label IF_TRUE0 -label WHILE_EXP0 -push local 0 -push constant 4 -lt -not -if-goto WHILE_END0 -push local 0 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 64 -gt -if-goto IF_TRUE1 -goto IF_FALSE1 -label IF_TRUE1 -push local 1 -push argument 1 -add -push local 0 -push argument 1 -add -pop pointer 1 -push that 0 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push local 1 -push constant 1 -add -pop local 1 -label IF_FALSE1 -push local 0 -push constant 1 -add -pop local 0 -goto WHILE_EXP0 -label WHILE_END0 -label WHILE_EXP1 -push local 1 -push constant 4 -lt -not -if-goto WHILE_END1 -push local 1 -push argument 1 -add -push constant 32 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push local 1 -push constant 1 -add -pop local 1 -goto WHILE_EXP1 -label WHILE_END1 -goto IF_END0 -label IF_FALSE0 -label WHILE_EXP2 -push local 0 -push constant 4 -lt -not -if-goto WHILE_END2 -push constant 3 -push local 0 -sub -push argument 1 -add -pop pointer 1 -push that 0 -push constant 64 -gt -if-goto IF_TRUE2 -goto IF_FALSE2 -label IF_TRUE2 -push constant 3 -push local 1 -sub -push argument 1 -add -push constant 3 -push local 0 -sub -push argument 1 -add -pop pointer 1 -push that 0 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push local 1 -push constant 1 -add -pop local 1 -label IF_FALSE2 -push local 0 -push constant 1 -add -pop local 0 -goto WHILE_EXP2 -label WHILE_END2 -label WHILE_EXP3 -push local 1 -push constant 4 -lt -not -if-goto WHILE_END3 -push constant 3 -push local 1 -sub -push argument 1 -add -push constant 32 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push local 1 -push constant 1 -add -pop local 1 -goto WHILE_EXP3 -label WHILE_END3 -label IF_END0 -push constant 0 -return -function Board.reduce 0 -push argument 0 -pop pointer 0 -push constant 0 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 1 -push argument 1 -add -pop pointer 1 -push that 0 -eq -push constant 2 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 3 -push argument 1 -add -pop pointer 1 -push that 0 -eq -and -push constant 0 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 64 -gt -and -push constant 2 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 64 -gt -and -if-goto IF_TRUE0 -goto IF_FALSE0 -label IF_TRUE0 -push argument 2 -if-goto IF_TRUE1 -goto IF_FALSE1 -label IF_TRUE1 -push constant 0 -push argument 1 -add -push constant 0 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 1 -add -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 1 -push argument 1 -add -push constant 2 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 1 -add -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 2 -push argument 1 -add -push constant 32 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 3 -push argument 1 -add -push constant 32 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -goto IF_END1 -label IF_FALSE1 -push constant 3 -push argument 1 -add -push constant 3 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 1 -add -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 2 -push argument 1 -add -push constant 1 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 1 -add -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 1 -push argument 1 -add -push constant 32 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 0 -push argument 1 -add -push constant 32 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -label IF_END1 -push constant 0 -return -label IF_FALSE0 -push constant 0 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 1 -push argument 1 -add -pop pointer 1 -push that 0 -eq -push constant 0 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 64 -gt -and -if-goto IF_TRUE2 -goto IF_FALSE2 -label IF_TRUE2 -push argument 2 -if-goto IF_TRUE3 -goto IF_FALSE3 -label IF_TRUE3 -push constant 0 -push argument 1 -add -push constant 0 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 1 -add -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 1 -push argument 1 -add -push constant 2 -push argument 1 -add -pop pointer 1 -push that 0 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 2 -push argument 1 -add -push constant 3 -push argument 1 -add -pop pointer 1 -push that 0 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 3 -push argument 1 -add -push constant 32 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -goto IF_END3 -label IF_FALSE3 -push constant 1 -push argument 1 -add -push constant 1 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 1 -add -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 0 -push argument 1 -add -push constant 32 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -label IF_END3 -push constant 0 -return -label IF_FALSE2 -push constant 2 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 3 -push argument 1 -add -pop pointer 1 -push that 0 -eq -push constant 2 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 64 -gt -and -if-goto IF_TRUE4 -goto IF_FALSE4 -label IF_TRUE4 -push argument 2 -if-goto IF_TRUE5 -goto IF_FALSE5 -label IF_TRUE5 -push constant 2 -push argument 1 -add -push constant 2 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 1 -add -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 3 -push argument 1 -add -push constant 32 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -goto IF_END5 -label IF_FALSE5 -push constant 3 -push argument 1 -add -push constant 3 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 1 -add -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 2 -push argument 1 -add -push constant 1 -push argument 1 -add -pop pointer 1 -push that 0 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 1 -push argument 1 -add -push constant 0 -push argument 1 -add -pop pointer 1 -push that 0 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 0 -push argument 1 -add -push constant 32 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -label IF_END5 -push constant 0 -return -label IF_FALSE4 -push constant 1 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 2 -push argument 1 -add -pop pointer 1 -push that 0 -eq -push constant 1 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 64 -gt -and -if-goto IF_TRUE6 -goto IF_FALSE6 -label IF_TRUE6 -push argument 2 -if-goto IF_TRUE7 -goto IF_FALSE7 -label IF_TRUE7 -push constant 1 -push argument 1 -add -push constant 1 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 1 -add -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 2 -push argument 1 -add -push constant 3 -push argument 1 -add -pop pointer 1 -push that 0 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 3 -push argument 1 -add -push constant 32 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -goto IF_END7 -label IF_FALSE7 -push constant 2 -push argument 1 -add -push constant 2 -push argument 1 -add -pop pointer 1 -push that 0 -push constant 1 -add -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 1 -push argument 1 -add -push constant 0 -push argument 1 -add -pop pointer 1 -push that 0 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 0 -push argument 1 -add -push constant 32 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -label IF_END7 -push constant 0 -return -label IF_FALSE6 -push constant 0 -return -function Board.addTile 5 -push argument 0 -pop pointer 0 -push this 3 -push constant 1 -eq -not -if-goto IF_TRUE0 -goto IF_FALSE0 -label IF_TRUE0 -push constant 0 -return -label IF_FALSE0 -push this 2 -push constant 25173 -call Math.multiply 2 -push constant 13849 -add -pop this 2 -push this 2 -push constant 0 -lt -if-goto IF_TRUE1 -goto IF_FALSE1 -label IF_TRUE1 -push this 2 -neg -pop this 2 -label IF_FALSE1 -push this 2 -push this 2 -push constant 2 -call Math.divide 2 -push constant 2 -call Math.multiply 2 -sub -push constant 0 -eq -if-goto IF_TRUE2 -goto IF_FALSE2 -label IF_TRUE2 -push constant 1 -pop local 3 -goto IF_END2 -label IF_FALSE2 -push constant 1 -neg -pop local 3 -label IF_END2 -push this 2 -push this 2 -push constant 16 -call Math.divide 2 -push constant 16 -call Math.multiply 2 -sub -pop this 2 -push this 2 -push constant 4 -call Math.divide 2 -pop local 1 -push this 2 -push constant 4 -push local 1 -call Math.multiply 2 -sub -pop local 2 -push local 1 -push this 0 -add -pop pointer 1 -push that 0 -pop local 0 -push constant 65 -pop local 4 -label WHILE_EXP0 -push local 2 -push local 0 -add -pop pointer 1 -push that 0 -push constant 64 -gt -not -if-goto WHILE_END0 -push this 2 -push local 3 -add -pop this 2 -push this 2 -push constant 0 -lt -if-goto IF_TRUE3 -goto IF_FALSE3 -label IF_TRUE3 -push constant 15 -pop this 2 -label IF_FALSE3 -push this 2 -push this 2 -push constant 16 -call Math.divide 2 -push constant 16 -call Math.multiply 2 -sub -pop this 2 -push this 2 -push constant 4 -call Math.divide 2 -pop local 1 -push this 2 -push constant 4 -push local 1 -call Math.multiply 2 -sub -pop local 2 -push local 1 -push this 0 -add -pop pointer 1 -push that 0 -pop local 0 -push constant 131 -push local 4 -sub -pop local 4 -goto WHILE_EXP0 -label WHILE_END0 -push local 2 -push local 0 -add -push local 4 -pop temp 0 -pop pointer 1 -push temp 0 -pop that 0 -push constant 0 -return -function Board.transform 3 -push argument 0 -pop pointer 0 -push argument 1 -push constant 0 -eq -push argument 1 -push constant 1 -eq -or -if-goto IF_TRUE0 -goto IF_FALSE0 -label IF_TRUE0 -push constant 0 -not -pop local 1 -goto IF_END0 -label IF_FALSE0 -push constant 0 -pop local 1 -label IF_END0 -push argument 1 -push constant 0 -eq -push argument 1 -push constant 2 -eq -or -if-goto IF_TRUE1 -goto IF_FALSE1 -label IF_TRUE1 -push constant 0 -pop local 0 -goto IF_END1 -label IF_FALSE1 -push constant 0 -not -pop local 0 -label IF_END1 -push local 0 -if-goto IF_TRUE2 -goto IF_FALSE2 -label IF_TRUE2 -push pointer 0 -call Board.transpose 1 -pop temp 0 -label IF_FALSE2 -push constant 0 -pop local 2 -label WHILE_EXP0 -push local 2 -push constant 4 -lt -not -if-goto WHILE_END0 -push pointer 0 -push local 2 -push this 0 -add -pop pointer 1 -push that 0 -push local 1 -call Board.align 3 -pop temp 0 -push pointer 0 -push local 2 -push this 0 -add -pop pointer 1 -push that 0 -push local 1 -call Board.reduce 3 -pop temp 0 -push local 2 -push constant 1 -add -pop local 2 -goto WHILE_EXP0 -label WHILE_END0 -push local 0 -if-goto IF_TRUE3 -goto IF_FALSE3 -label IF_TRUE3 -push pointer 0 -call Board.transpose 1 -pop temp 0 -label IF_FALSE3 -push constant 0 -return -function Board.next 0 -push argument 0 -pop pointer 0 -push this 1 -push constant 1 -add -pop this 1 -push pointer 0 -push argument 1 -call Board.transform 2 -pop temp 0 -push pointer 0 -call Board.updateStatus 1 -pop temp 0 -push constant 0 -return -function Board.getStatus 0 -push argument 0 -pop pointer 0 -push this 3 -return -function Board.setStatus 0 -push argument 0 -pop pointer 0 -push argument 1 -pop this 3 -push constant 0 -return -function Board.updateStatus 3 -push argument 0 -pop pointer 0 -push constant 0 -pop local 0 -label WHILE_EXP0 -push local 0 -push constant 4 -lt -not -if-goto WHILE_END0 -push local 0 -push this 0 -add -pop pointer 1 -push that 0 -pop local 2 -push constant 0 -pop local 1 -label WHILE_EXP1 -push local 1 -push constant 4 -lt -not -if-goto WHILE_END1 -push local 1 -push local 2 -add -pop pointer 1 -push that 0 -push constant 75 -eq -if-goto IF_TRUE0 -goto IF_FALSE0 -label IF_TRUE0 -push constant 3 -pop this 3 -push constant 0 -return -label IF_FALSE0 -push local 1 -push local 2 -add -pop pointer 1 -push that 0 -push constant 32 -eq -if-goto IF_TRUE1 -goto IF_FALSE1 -label IF_TRUE1 -push constant 1 -pop this 3 -push constant 0 -return -label IF_FALSE1 -push local 1 -push constant 1 -add -pop local 1 -goto WHILE_EXP1 -label WHILE_END1 -push local 0 -push constant 1 -add -pop local 0 -goto WHILE_EXP0 -label WHILE_END0 -push constant 2 -pop this 3 -push constant 0 -return -function Board.draw 5 -push argument 0 -pop pointer 0 -push constant 9 -pop local 0 -push constant 30 -pop local 1 -push this 3 -push constant 0 -eq -if-goto IF_TRUE0 -goto IF_FALSE0 -label IF_TRUE0 -push local 0 -push constant 1 -sub -push local 1 -push constant 1 -sub -call Output.moveCursor 2 -pop temp 0 -push constant 75 -call Output.printChar 1 -pop temp 0 -push local 0 -push constant 1 -add -push local 1 -push constant 1 -sub -call Output.moveCursor 2 -pop temp 0 -push static 2 -call Output.printString 1 -pop temp 0 -goto IF_END0 -label IF_FALSE0 -push this 3 -push constant 2 -eq -if-goto IF_TRUE1 -goto IF_FALSE1 -label IF_TRUE1 -push local 0 -push constant 1 -sub -push local 1 -push constant 1 -sub -call Output.moveCursor 2 -pop temp 0 -push static 3 -call Output.printString 1 -pop temp 0 -push local 0 -push constant 1 -add -push local 1 -push constant 1 -sub -call Output.moveCursor 2 -pop temp 0 -push static 1 -call Output.printString 1 -pop temp 0 -push local 0 -push constant 3 -add -push local 1 -push constant 1 -sub -call Output.moveCursor 2 -pop temp 0 -push static 2 -call Output.printString 1 -pop temp 0 -goto IF_END1 -label IF_FALSE1 -push this 3 -push constant 3 -eq -if-goto IF_TRUE2 -goto IF_FALSE2 -label IF_TRUE2 -push local 0 -push constant 1 -sub -push local 1 -push constant 1 -sub -call Output.moveCursor 2 -pop temp 0 -push static 3 -call Output.printString 1 -pop temp 0 -push local 0 -push constant 1 -add -push local 1 -push constant 1 -sub -call Output.moveCursor 2 -pop temp 0 -push static 4 -call Output.printString 1 -pop temp 0 -push local 0 -push constant 3 -add -push local 1 -push constant 1 -sub -call Output.moveCursor 2 -pop temp 0 -push static 2 -call Output.printString 1 -pop temp 0 -goto IF_END2 -label IF_FALSE2 -push local 0 -push constant 1 -sub -push local 1 -push constant 1 -sub -call Output.moveCursor 2 -pop temp 0 -push static 0 -call Output.printString 1 -pop temp 0 -push local 0 -push constant 4 -add -push local 1 -push constant 1 -sub -call Output.moveCursor 2 -pop temp 0 -push static 0 -call Output.printString 1 -pop temp 0 -push constant 0 -pop local 2 -label WHILE_EXP0 -push local 2 -push constant 4 -lt -not -if-goto WHILE_END0 -push constant 0 -pop local 3 -push local 0 -push local 2 -add -push local 1 -push constant 1 -sub -call Output.moveCursor 2 -pop temp 0 -push constant 124 -call Output.printChar 1 -pop temp 0 -push local 2 -push this 0 -add -pop pointer 1 -push that 0 -pop local 4 -label WHILE_EXP1 -push local 3 -push constant 4 -lt -not -if-goto WHILE_END1 -push local 3 -push local 4 -add -pop pointer 1 -push that 0 -call Output.printChar 1 -pop temp 0 -push local 3 -push constant 1 -add -pop local 3 -goto WHILE_EXP1 -label WHILE_END1 -push constant 124 -call Output.printChar 1 -pop temp 0 -push local 2 -push constant 1 -add -pop local 2 -goto WHILE_EXP0 -label WHILE_END0 -push local 0 -push constant 6 -add -push local 1 -push constant 2 -sub -call Output.moveCursor 2 -pop temp 0 -push static 5 -call Output.printString 1 -pop temp 0 -push this 1 -call Output.printInt 1 -pop temp 0 -label IF_END2 -label IF_END1 -label IF_END0 -push constant 0 -return -function Board.dispose 0 -push argument 0 -pop pointer 0 -push pointer 0 -call Memory.deAlloc 1 -pop temp 0 -push constant 0 -return diff --git a/projects/09/K/K.txt b/projects/09/K/K.txt deleted file mode 100644 index dc75c82..0000000 --- a/projects/09/K/K.txt +++ /dev/null @@ -1,25 +0,0 @@ -from a to k - -- a title frame showing game name and instructions. space to continue. -- a main frame showing the game running -- a endofgame frame showing game results: win or lose - -- a Board class with cell being a 4 by 4 two-d array. -- arrange strings according to an orientation: arrange(4 strings, dir)=cells - - dir: 0: align to left, 1: align to right, 2: align to top, 3:align to bottom - - e.g.: arrange({"abc", "bc", "dc", "efeh", 0}) gives the following board: - abc_ - bc__ - dc__ - efeh - - arrange({"abc", "bc", "dc", "efeh", 0}, 3) gives the following - ___e - a__f - bbde - ccch -- a new tile of 'a' or 'b' appears each turn somewhere, using some quasirandomisation e.g. (23 * n^2 + 79) mod 16. - - addtile(char, x, y) -- the board transformation: board.trans(dir) = arrange(dir) . (fmap reduce) . getstring(dir). calls getstrings, then reduce on each row / column -- board.getstrings(dir)= the strings according to direction dir. Inverse of arrange. -- reduce(string)=string: reduce("baac")=="bbc"; reduce("aabb")=="bc"; and reduce("cbb")== "cc" instead of "d". -- when one of the hjkl keys is pressed get the direction dir. diff --git a/projects/09/K/KGame.jack b/projects/09/K/KGame.jack deleted file mode 100644 index 017b4e8..0000000 --- a/projects/09/K/KGame.jack +++ /dev/null @@ -1,57 +0,0 @@ -class KGame{ - field Board board; - - constructor KGame new() { - let board = Board.new(); - do board.draw(); - return this; - } - - method void dispose() { - do board.dispose(); - do Memory.deAlloc(this); - return; - } - - method void run() { - var int key, key1, st; - var boolean exit; - let exit = false; - while (~exit) { - let st = board.getStatus(); - let key = 0; - while (key = 0) { - let key = Keyboard.keyPressed(); - } - let key1 = key; - while (~(key1 = 0)) { - let key1 = Keyboard.keyPressed(); - } - if (key = 81) { - let exit = true; - } else { if ((st = 0)) { - do Screen.clearScreen(); - do board.setStatus(1); - do board.draw(); - } else { if ((st = 2) | (st = 3)) { - do Screen.clearScreen(); - do board.setStatus(0); - do board.draw(); - do board.initBoard(); - } else { if (key = 82) { // r for restart - do Screen.clearScreen(); - do board.initBoard(); - do board.draw(); - } else { if ((key > 129) & (key < 134)) { - do Screen.clearScreen(); - do board.next(key - 130); - do board.draw(); - do Sys.wait(300); - do Screen.clearScreen(); - do board.addTile(); - do board.draw(); - }}}}} - } - return; - } -} diff --git a/projects/09/K/KGame.vm b/projects/09/K/KGame.vm deleted file mode 100644 index df3a069..0000000 --- a/projects/09/K/KGame.vm +++ /dev/null @@ -1,169 +0,0 @@ -function KGame.new 0 -push constant 1 -call Memory.alloc 1 -pop pointer 0 -call Board.new 0 -pop this 0 -push this 0 -call Board.draw 1 -pop temp 0 -push pointer 0 -return -function KGame.dispose 0 -push argument 0 -pop pointer 0 -push this 0 -call Board.dispose 1 -pop temp 0 -push pointer 0 -call Memory.deAlloc 1 -pop temp 0 -push constant 0 -return -function KGame.run 4 -push argument 0 -pop pointer 0 -push constant 0 -pop local 3 -label WHILE_EXP0 -push local 3 -not -not -if-goto WHILE_END0 -push this 0 -call Board.getStatus 1 -pop local 2 -push constant 0 -pop local 0 -label WHILE_EXP1 -push local 0 -push constant 0 -eq -not -if-goto WHILE_END1 -call Keyboard.keyPressed 0 -pop local 0 -goto WHILE_EXP1 -label WHILE_END1 -push local 0 -pop local 1 -label WHILE_EXP2 -push local 1 -push constant 0 -eq -not -not -if-goto WHILE_END2 -call Keyboard.keyPressed 0 -pop local 1 -goto WHILE_EXP2 -label WHILE_END2 -push local 0 -push constant 81 -eq -if-goto IF_TRUE0 -goto IF_FALSE0 -label IF_TRUE0 -push constant 0 -not -pop local 3 -goto IF_END0 -label IF_FALSE0 -push local 2 -push constant 0 -eq -if-goto IF_TRUE1 -goto IF_FALSE1 -label IF_TRUE1 -call Screen.clearScreen 0 -pop temp 0 -push this 0 -push constant 1 -call Board.setStatus 2 -pop temp 0 -push this 0 -call Board.draw 1 -pop temp 0 -goto IF_END1 -label IF_FALSE1 -push local 2 -push constant 2 -eq -push local 2 -push constant 3 -eq -or -if-goto IF_TRUE2 -goto IF_FALSE2 -label IF_TRUE2 -call Screen.clearScreen 0 -pop temp 0 -push this 0 -push constant 0 -call Board.setStatus 2 -pop temp 0 -push this 0 -call Board.draw 1 -pop temp 0 -push this 0 -call Board.initBoard 1 -pop temp 0 -goto IF_END2 -label IF_FALSE2 -push local 0 -push constant 82 -eq -if-goto IF_TRUE3 -goto IF_FALSE3 -label IF_TRUE3 -call Screen.clearScreen 0 -pop temp 0 -push this 0 -call Board.initBoard 1 -pop temp 0 -push this 0 -call Board.draw 1 -pop temp 0 -goto IF_END3 -label IF_FALSE3 -push local 0 -push constant 129 -gt -push local 0 -push constant 134 -lt -and -if-goto IF_TRUE4 -goto IF_FALSE4 -label IF_TRUE4 -call Screen.clearScreen 0 -pop temp 0 -push this 0 -push local 0 -push constant 130 -sub -call Board.next 2 -pop temp 0 -push this 0 -call Board.draw 1 -pop temp 0 -push constant 300 -call Sys.wait 1 -pop temp 0 -call Screen.clearScreen 0 -pop temp 0 -push this 0 -call Board.addTile 1 -pop temp 0 -push this 0 -call Board.draw 1 -pop temp 0 -label IF_FALSE4 -label IF_END3 -label IF_END2 -label IF_END1 -label IF_END0 -goto WHILE_EXP0 -label WHILE_END0 -push constant 0 -return diff --git a/projects/09/K/Main.jack b/projects/09/K/Main.jack deleted file mode 100644 index 7f86973..0000000 --- a/projects/09/K/Main.jack +++ /dev/null @@ -1,10 +0,0 @@ -class Main { - function void main() { - var KGame game; - do Board.init(); - let game = KGame.new(); - do game.run(); - do game.dispose(); - return; - } -} diff --git a/projects/09/K/Main.vm b/projects/09/K/Main.vm deleted file mode 100644 index 0441c7a..0000000 --- a/projects/09/K/Main.vm +++ /dev/null @@ -1,13 +0,0 @@ -function Main.main 1 -call Board.init 0 -pop temp 0 -call KGame.new 0 -pop local 0 -push local 0 -call KGame.run 1 -pop temp 0 -push local 0 -call KGame.dispose 1 -pop temp 0 -push constant 0 -return |