diff options
-rw-r--r-- | app.js | 239 | ||||
-rw-r--r-- | package.json | 12 |
2 files changed, 251 insertions, 0 deletions
@@ -0,0 +1,239 @@ +let board = [ + [0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0], + [0, 0, 0, 0, 0, 0, 0, 0], +] + +console.log(board.length) + +console.log(amelia_move(board, 3, 3)) + +function king_move(board, y, x) { + let moves = [] + + for (let i = y - 1; i <= y + 1; i += 1) { + for (let j = x - 1; j <= x + 1; j += 1) { + if ((i == y && j == x) || i < 0 || j < 0 || i >= board.length || j >= board[i].length) { + continue + } + if (board[i][j] == 0) { + moves.push([i, j]) + } + } + } + + return moves +} + +function knight_move(board, y, x) { + let moves = [] + + let cand = [ + [y + 2, x + 1], + [y + 2, x - 1], + [y + 1, x - 2], + [y + 1, x + 2], + [y - 2, x + 1], + [y - 2, x - 1], + [y - 1, x + 2], + [y - 1, x - 2], + ] + + for (let k = 0; k < cand.length; k++) { + if (cand[k][0] < 0 || cand[k][1] < 0 || cand[k][0] >= board.length || cand[k][1] >= board[cand[k][0]].length) { + continue + } + + if (board[i][j] == 0) { + moves.push([i, j]) + } + } + + return moves +} + + +function rook_move(board, y, x) { + let moves = [] + + for (let i = x + 1; i < board[1].length; i++) { + if (board[y][i] != 0) { + break + } + moves.push([y, i]) + } + + for (let i = x - 1; i >= 0; i--) { + if (board[y][i] != 0) { + break + } + moves.push([y, i]) + } + + + for (let i = y + 1; i < board.length; i++) { + if (board[i][x] != 0) { + break + } + moves.push([i, x]) + } + + for (let i = y - 1; i >= 0; i--) { + if (board[i][x] != 0) { + break + } + moves.push([i, x]) + } + + return moves +} + +function bishop_move(board, y, x) { + let moves = [] + + let i = y + 1; + let j = x + 1; + + while (!(i < 0 || j < 0 || i >= board.length || j >= board[i].length)) { + if (board[i][j] != 0) { + break + } + + moves.push([i, j]) + i += 1 + j += 1 + } + + i = y - 1; + j = x - 1; + + while (!(i < 0 || j < 0 || i >= board.length || j >= board[i].length)) { + if (board[i][j] != 0) { + break + } + + moves.push([i, j]) + i -= 1 + j -= 1 + } + + i = y - 1; + j = x + 1; + + while (!(i < 0 || j < 0 || i >= board.length || j >= board[i].length)) { + if (board[i][j] != 0) { + break + } + + moves.push([i, j]) + i -= 1 + j += 1 + } + + i = y + 1; + j = x - 1; + + while (!(i < 0 || j < 0 || i >= board.length || j >= board[i].length)) { + if (board[i][j] != 0) { + break + } + + moves.push([i, j]) + i += 1 + j -= 1 + } + + return moves +} + +function amelia_move(board, y, x) { + let moves = [] + + for (let i = x + 1; i < board[0].length; i++) { + if (board[y][i] != 0) { + break + } + moves.push([y, i]) + } + + for (let i = x - 1; i >= 0; i--) { + if (board[y][i] != 0) { + break + } + moves.push([y, i]) + } + + + for (let i = y + 1; i < board.length; i++) { + if (board[i][x] != 0) { + break + } + moves.push([i, x]) + } + + for (let i = y - 1; i >= 0; i--) { + if (board[i][x] != 0) { + break + } + moves.push([i, x]) + } + + let i = y + 1; + let j = x + 1; + + while (!(i < 0 || j < 0 || i >= board.length || j >= board[i].length)) { + if (board[i][j] != 0) { + break + } + + moves.push([i, j]) + i += 1 + j += 1 + } + + i = y - 1; + j = x - 1; + + while (!(i < 0 || j < 0 || i >= board.length || j >= board[i].length)) { + if (board[i][j] != 0) { + break + } + + moves.push([i, j]) + i -= 1 + j -= 1 + } + + i = y - 1; + j = x + 1; + + while (!(i < 0 || j < 0 || i >= board.length || j >= board[i].length)) { + if (board[i][j] != 0) { + break + } + + moves.push([i, j]) + i -= 1 + j += 1 + } + + i = y + 1; + j = x - 1; + + while (!(i < 0 || j < 0 || i >= board.length || j >= board[i].length)) { + if (board[i][j] != 0) { + break + } + + moves.push([i, j]) + i += 1 + j -= 1 + } + + return moves +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..3098cdc --- /dev/null +++ b/package.json @@ -0,0 +1,12 @@ +{ + "name": "chess", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "description": "" +} |