diff --git a/board-printer.js b/board-printer.js index e11a262..df4e61c 100644 --- a/board-printer.js +++ b/board-printer.js @@ -16,6 +16,10 @@ Test your function by calling it with an example tic-tac-toe board. */ export function printBoard(board) { + for (let row of board) { + console.log(row.join(" | ").replaceAll("_", " ")); + console.log("================="); + } } /* @@ -24,4 +28,10 @@ export function printBoard(board) { - return false if there are still moves that can be made */ export function checkIfNoMovesLeft(board) { + for (let row of board) { + for (let element of row) { + if (element === "_") return false; + } + } + return true; } diff --git a/move-maker.js b/move-maker.js index b462350..172b698 100644 --- a/move-maker.js +++ b/move-maker.js @@ -16,8 +16,17 @@ ]; */ function validateMove(move, board) { - // Implement this at the end if you have time, otherwise you can help your teammates! - return true; + const [x, y] = move.split(",").map((element) => Number(element)); + + const validNumbers = [1, 2, 3]; + if (!validNumbers.includes(x) || !validNumbers.includes(y)) return false; + + if (board[x - 1][y - 1] !== "_") { + console.log("Try again..."); + return false; + } + + return true; } /* @@ -32,5 +41,9 @@ function validateMove(move, board) { - Return true */ export function makeMove(board, move, player) { - return false; + if (!validateMove(move, board)) return false; + + const [x, y] = move.split(",").map((element) => Number(element)); + board[x - 1][y - 1] = player; + return true; } diff --git a/status-checker.js b/status-checker.js index 7df4962..32a8359 100644 --- a/status-checker.js +++ b/status-checker.js @@ -1,4 +1,4 @@ -import { checkIfNoMovesLeft } from './board-printer.js'; +import { checkIfNoMovesLeft } from "./board-printer.js"; /* Example board: @@ -18,6 +18,7 @@ import { checkIfNoMovesLeft } from './board-printer.js'; Otherwise, return false */ function checkRow(board, player, rowNumber) { + return board[rowNumber].every((element) => element === player); } /* @@ -29,6 +30,10 @@ function checkRow(board, player, rowNumber) { Otherwise, return false */ function checkColumn(board, player, columnNumber) { + for (let i = 0; i < 3; i++) { + if (board[i][columnNumber] !== player) return false; + } + return true; } /* @@ -39,43 +44,56 @@ function checkColumn(board, player, columnNumber) { Otherwise, return false */ function checkDiagonal(board, player) { - // It may be easier to use an if statement than a loop here -} + if ( + board[0][0] === player && + board[1][1] === player && + board[2][2] === player + ) + return true; + if ( + board[0][2] === player && + board[1][1] === player && + board[2][0] === player + ) + return true; + return false; + // It may be easier to use an if statement than a loop here +} /* There is no need to change any code below this line. */ function checkIfPlayerWon(board, player) { - for(let i = 0; i <= 2; i++) { - if(checkRow(board, player, i) || checkColumn(board, player, i)) { - return true; - } + for (let i = 0; i <= 2; i++) { + if (checkRow(board, player, i) || checkColumn(board, player, i)) { + return true; } + } - if(checkDiagonal(board, player)) { - return true; - } + if (checkDiagonal(board, player)) { + return true; + } - return false; + return false; } export function isGameOver(board) { - if(checkIfPlayerWon(board, 'X')) { - console.log('X has won the game!\n'); - return true; - } + if (checkIfPlayerWon(board, "X")) { + console.log("X has won the game!\n"); + return true; + } - if(checkIfPlayerWon(board, 'O')) { - console.log('O has won the game!\n'); - return true; - } + if (checkIfPlayerWon(board, "O")) { + console.log("O has won the game!\n"); + return true; + } - if(checkIfNoMovesLeft(board)) { - console.log('Game Over - It\s a tie!\n'); - return true; - } + if (checkIfNoMovesLeft(board)) { + console.log("Game Over - Its a tie!\n"); + return true; + } - return false; + return false; }