Last active
July 7, 2019 01:07
-
-
Save cssidy/46e0d8100a0084067badedd2e8a30457 to your computer and use it in GitHub Desktop.
Tic Tac Toe in JS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
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