Skip to content

london 9 - Lovelace - Leila & Bahare - Terminal Tic-Tac-Toe #9

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions board-printer.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,28 @@
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[0] !== "_" ? row[0] : " "} | ${
row[1] !== "_" ? row[1] : " "
} | ${row[2] !== "_" ? row[2] : " "}\n=================`
);
}
}
printBoard();

/*
Given a tic-tac-toe board (an array of arrays),
- return true if there are no moves left to make (there are no more '_' values)
- return false if there are still moves that can be made
*/
export function checkIfNoMovesLeft(board) {
for (let i = 0; i < board.length; i++) {
for (let j = 0; j < board[i].length; j++) {
if (board[i][j] === "_") {
return false;
}
}
}
return true;
}
15 changes: 13 additions & 2 deletions move-maker.js
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,15 @@
];
*/
function validateMove(move, board) {
// Implement this at the end if you have time, otherwise you can help your teammates!
let regex = /[1-3]/g;
if (
move.match(regex).length === 2 &&
move[1] === "," &&
board[move[0] - 1][move[2] - 1] === "_"
)
return true;
console.log("Try again...");
return false;
}

/*
Expand All @@ -32,5 +39,9 @@ function validateMove(move, board) {
- Return true
*/
export function makeMove(board, move, player) {
return false;
if (validateMove(move, board)) {
board[move[0] - 1][move[2] - 1] = player;
return true;
}
return false;
}
130 changes: 1 addition & 129 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

64 changes: 40 additions & 24 deletions status-checker.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { checkIfNoMovesLeft } from './board-printer.js';
import { checkIfNoMovesLeft } from "./board-printer.js";

/*
Example board:
Expand All @@ -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);
}

/*
Expand All @@ -29,6 +30,12 @@ function checkRow(board, player, rowNumber) {
Otherwise, return false
*/
function checkColumn(board, player, columnNumber) {
for (let row of board) {
if (row[columnNumber] !== player) {
return false;
}
}
return true;
}

/*
Expand All @@ -39,43 +46,52 @@ 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
// 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) ||
(board[0][2] === player && board[1][1] === player && board[2][0] === player)
) {
return true;
} else {
return false;
}
}


/*
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;
}