Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (() => {
- "use strict";
- const game = () => {
- let done;
- const solutions = [
- [ 0, 1, 2 ], [ 0, 3, 6 ], [ 0, 4, 8 ],
- [ 1, 4, 7 ], [ 2, 4, 6 ], [ 2, 5, 8 ],
- [ 3, 4, 5 ], [ 6, 7, 8 ]
- ];
- const check = abc => abc.filter(e => board[e] !== ' '
- && board[e] === board[abc[0]])
- .length === 3;
- const win = (...args) => {
- done = args;
- };
- const board = new Proxy([...' '], {
- set: (t, k, v) => {
- if (t[k] === ' ') {
- t[k] = v;
- } else {
- return false;
- }
- const correct = solutions.filter(e => e.includes(+k) && check(e));
- if (correct.length > 0) win(k, v, correct);
- return true;
- },
- get: (t, k) => { return t[k]; },
- });
- const render = message => {
- const b = board;
- return `
- ${ message }
- 0: ${ b[0] } | 1: ${ b[1] } | 2: ${ b[2] }
- 3: ${ b[3] } | 4: ${ b[4] } | 5: ${ b[5] }
- 6: ${ b[6] } | 7: ${ b[7] } | 8: ${ b[8] }`;
- };
- const play = (() => {
- let turn = 0;
- return () => {
- if(done) {
- const [k, v, correct] = done;
- if(confirm(render(`${ v } won! play again?`))) {
- game();
- }
- return false;
- }
- if(turn > 8) {
- if(confirm(render(`Game over, play again?`))) {
- game();
- }
- return false;
- }
- const value = ['X', 'O'][turn++ % 2];
- const index = prompt(render(`Player ${ value }, choose a space:`));
- if(index === null) {
- if(confirm(render(`${ value } forfeit the game, play again?`))) {
- game();
- }
- return false;
- }
- if(!(index in board)) {
- if(confirm(render(`${ index } is an invalid index, try again?`))) {
- play(--turn);
- }
- return false;
- }
- try {
- board[+index] = value;
- play();
- } catch(e) {
- if(confirm(render(`${ index } is occupied, choose again?`))) {
- play(--turn);
- }
- }
- };
- })();
- return play();
- };
- game();
- })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement