@@ -6,6 +6,7 @@ function App() {
6
6
const [ xTurn , setXTurn ] = useState ( true ) ;
7
7
const [ xInput , setXInput ] = useState ( [ ] ) ;
8
8
const [ oInput , setOInput ] = useState ( [ ] ) ;
9
+ const [ gameOver , setGameOver ] = useState ( false ) ;
9
10
10
11
const winnings = [
11
12
[ 0 , 1 , 2 ] ,
@@ -20,26 +21,22 @@ function App() {
20
21
21
22
const checkWins = ( array ) => {
22
23
return winnings . some ( ( item ) => {
23
- return item . every ( ( index ) => array . includes ( index ) )
24
- } )
24
+ return item . every ( ( index ) => array . includes ( index ) ) ;
25
+ } ) ;
25
26
} ;
26
27
27
28
const handleClick = ( i ) => {
28
- if ( xInput . includes ( i ) || oInput . includes ( i ) ) return ;
29
- setXTurn ( ! xTurn ) ;
29
+ if ( xInput . includes ( i ) || oInput . includes ( i ) || gameOver ) return ;
30
30
31
31
if ( xTurn ) {
32
32
let tempX = [ ...xInput , i ] ;
33
33
setXInput ( tempX ) ;
34
34
35
35
if ( tempX . length >= 3 ) {
36
36
let didWin = checkWins ( tempX ) ;
37
- console . log ( 'didWin' , didWin )
38
-
39
- if ( didWin ) {
40
- alert ( 'win' )
41
- setXInput ( [ ] )
42
- setOInput ( [ ] )
37
+ if ( didWin ) {
38
+ alert ( 'X wins!' ) ;
39
+ setGameOver ( true ) ;
43
40
}
44
41
}
45
42
} else {
@@ -48,23 +45,33 @@ function App() {
48
45
49
46
if ( tempO . length >= 3 ) {
50
47
let didWin = checkWins ( tempO ) ;
51
- console . log ( 'didWin' , didWin )
52
- if ( didWin ) {
53
- alert ( 'win' )
54
- setXInput ( [ ] )
55
- setOInput ( [ ] )
48
+ if ( didWin ) {
49
+ alert ( 'O wins!' ) ;
50
+ setGameOver ( true ) ;
56
51
}
57
- }
52
+ }
53
+ }
54
+
55
+ if ( xInput . length + oInput . length + 1 === NUMBER_OF_BOXES && ! gameOver ) {
56
+ alert ( "It's a draw!" ) ;
57
+ setGameOver ( true ) ;
58
58
}
59
+
60
+ setXTurn ( ! xTurn ) ;
59
61
} ;
60
62
61
- console . log ( xInput , oInput )
63
+ const resetGame = ( ) => {
64
+ setXInput ( [ ] ) ;
65
+ setOInput ( [ ] ) ;
66
+ setXTurn ( true ) ;
67
+ setGameOver ( false ) ;
68
+ } ;
62
69
63
70
const renderBoardValue = ( i ) => {
64
71
if ( xInput . includes ( i ) ) {
65
72
return "X" ;
66
73
} else if ( oInput . includes ( i ) ) {
67
- return "0 " ;
74
+ return "O " ;
68
75
}
69
76
return "" ;
70
77
} ;
@@ -87,6 +94,7 @@ function App() {
87
94
< div className = "App" >
88
95
TicTacToe
89
96
< div className = "board-holder" > { renderBoard ( ) } </ div >
97
+ { gameOver && < button onClick = { resetGame } > Restart Game</ button > }
90
98
</ div >
91
99
) ;
92
100
}
0 commit comments