Skip to content

Instantly share code, notes, and snippets.

@cssidy
Last active July 7, 2019 01:07
Show Gist options
  • Save cssidy/46e0d8100a0084067badedd2e8a30457 to your computer and use it in GitHub Desktop.
Save cssidy/46e0d8100a0084067badedd2e8a30457 to your computer and use it in GitHub Desktop.
Tic Tac Toe in JS
/*
Cassidy Brooke - Recurse Center
Written in JavaScript, Node
July 6, 2019
*/
// this is required to take terminal inputs in Node.js
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
// welcome message
console.log('\n');
console.log('******************************');
console.log('* Tic-Tac-Toe *');
console.log('******************************');
console.log('\n');
console.log('How to play:' + '\n' + 'Select a square on your turn.' + '\n' + 'Player to get three vertically, horizontally or diagonally in a row wins.' + '\n');
// store board state in data structure
board = {
'top-L': ' ', 'top-M': ' ', 'top-R': ' ',
'mid-L': ' ', 'mid-M': ' ', 'mid-R': ' ',
'bot-L': ' ', 'bot-M': ' ', 'bot-R': ' '
}
// print board state to console
function drawBoard(board) {
console.log(board['top-L'] + '|' + board['top-M'] + '|' + board['top-R']);
console.log('-+-+-');
console.log(board['mid-L'] + '|' + board['mid-M'] + '|' + board['mid-R']);
console.log('-+-+-');
console.log(board['bot-L'] + '|' + board['bot-M'] + '|' + board['bot-R']);
}
// possible winning combos
function checkForWinner(board, turn) {
if ((board['top-L'] === winner && board['top-M'] === winner && board['top-R'] == winner) ||
(board['mid-L'] === winner && board['mid-M'] === winner && board['mid-R'] == winner) ||
(board['bot-L'] === winner && board['bot-M'] === winner && board['bot-R'] == winner) ||
(board['top-L'] === winner && board['mid-L'] === winner && board['bot-L'] == winner) ||
(board['top-M'] === winner && board['mid-M'] === winner && board['mid-R'] == winner) ||
(board['top-R'] === winner && board['mid-M'] === winner && board['bot-R'] == winner) ||
(board['top-L'] === winner && board['mid-M'] === winner && board['bot-R'] == winner) ||
(board['bot-L'] === winner && board['mid-M'] === winner && board['top-R'] == winner)) {
return true
} else {
return false
}
}
// initialize blank board for first turn
drawBoard(board);
let won = false;
let winner;
let turn = 'X';
let move;
function processInput() {
rl.question('\n' + 'Turn for ' + turn + '. Your move: ', function(move) {
winner = turn;
won = checkForWinner(board, winner);
if (won === true) {
console.log('Game over: Player ' + winner + ' wins the game!')
rl.close();
} else {
board[move] = turn;
if (turn === 'X') {
turn = 'O';
} else {
turn = 'X';
};
drawBoard(board);
processInput();
}
});
}
processInput();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment