-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtictactoe.txt
More file actions
130 lines (123 loc) · 2.97 KB
/
tictactoe.txt
File metadata and controls
130 lines (123 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//Validation
function isValidMove(gameState, move) {
return gameState.gameBoard[move] === 0;
}
//Game Logic
function doMove(gameState) {
if (gameState.isOver) return;
if (gameState.isPlayerTurn) {
const input = getUserInput(gameState);
while (gameState.isPlayerTurn) {
if (isValidMove(gameState, input)) {
gameState.isPlayerTurn = false;
gameState.gameBoard[input] = 1;
++gameState.usedCells;
}
}
} else {
while (!gameState.isPlayerTurn) {
const input = Math.floor(Math.random() * 9);
if (isValidMove(gameState, input)) {
gameState.isPlayerTurn = true;
gameState.gameBoard[input] = 7;
++gameState.usedCells;
}
}
}
}
//Output Gameboard for console
function getGameboardResult(gameState) {
let _board = "";
for (let i = 0; i < 3; ++i) {
_board +=
"\n" +
(gameState.gameBoard[i * 3] == 0
? i * 3
: gameState.gameBoard[i * 3] === 1
? "X"
: "O");
_board +=
" " +
(gameState.gameBoard[i * 3 + 1] == 0
? i * 3 + 1
: gameState.gameBoard[i * 3 + 1] === 1
? "X"
: "O");
_board +=
" " +
(gameState.gameBoard[i * 3 + 2] == 0
? i * 3 + 2
: gameState.gameBoard[i * 3 + 2] === 1
? "X"
: "O");
}
return _board;
}
//User Input Logic
function getUserInput(gameState) {
let _board = getGameboardResult(gameState);
const input = +prompt(
`Is Player Turn: ${gameState.isPlayerTurn} \n Player symbol: X \n Board: ${_board}`
);
if (isValidMove(gameState, input)) return input;
else return getUserInput(gameState);
}
//GameOver Logic
function isGameOver(gameState, winnerCombos) {
for (let i = 0; i < winnerCombos.length; ++i) {
const match = winnerCombos[i];
const a = match[0];
const b = match[1];
const c = match[2];
const sumResult =
gameState.gameBoard[a] + gameState.gameBoard[b] + gameState.gameBoard[c];
if (sumResult != 0) {
gameState.isOver = sumResult === 3;
if (!gameState.isOver) gameState.isOver = sumResult === 21;
}
if (gameState.isOver) {
gameState.winner = gameState.isPlayerTurn ? "O" : "X";
console.log(
"Winning combo " +
i +
" GameBoard Result: \n " +
getGameboardResult(gameState)
);
break;
} else {
if (gameState.usedCells === 9) {
gameState.isOver = true;
gameState.winner = "None";
}
}
}
}
//Game
function game() {
//States
const winnerCombos = [
[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[0, 3, 6],
[1, 4, 7],
[2, 5, 8],
[0, 4, 8],
[2, 4, 6],
];
let gameState = {
isOver: false,
isPlayerTurn: true,
winner: "None",
gameBoard: [0, 0, 0, 0, 0, 0, 0, 0, 0],
usedCells: 0,
};
//Logic
while (!gameState.isOver) {
doMove(gameState);
isGameOver(gameState, winnerCombos);
}
//Output
console.log(`The winner is ${gameState.winner}!`);
}
game();