Skip to content

Commit 3619c94

Browse files
committed
final game commit
Signed-off-by: Tathagat Thapliyal <[email protected]>
1 parent 3533595 commit 3619c94

File tree

3 files changed

+86
-34
lines changed

3 files changed

+86
-34
lines changed

src/components/Board.js

+29-21
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,34 @@
11
import React from 'react'
22
import Square from './Square'
33

4-
export default function Board(props) {
5-
return (
6-
<div>
7-
<div className="border-row">
8-
<Square insideValue = {props.value}/>
9-
<Square/>
10-
<Square/>
4+
export default class Board extends React.Component {
5+
renderSquare = (i) => {
6+
return(
7+
<Square value = {this.props.squares[i]} handleClick = {() => this.props.clickAction(i)}/>
8+
)
9+
}
10+
11+
render() {
12+
return (
13+
<div>
14+
<div className="border-row">
15+
{this.renderSquare(0)}
16+
{this.renderSquare(1)}
17+
{this.renderSquare(2)}
18+
</div>
19+
20+
<div className="border-row">
21+
{this.renderSquare(3)}
22+
{this.renderSquare(4)}
23+
{this.renderSquare(5)}
24+
</div>
25+
26+
<div className="border-row">
27+
{this.renderSquare(6)}
28+
{this.renderSquare(7)}
29+
{this.renderSquare(8)}
30+
</div>
1131
</div>
12-
13-
<div className="border-row">
14-
<Square/>
15-
<Square/>
16-
<Square/>
17-
</div>
18-
19-
<div className="border-row">
20-
<Square/>
21-
<Square/>
22-
<Square/>
23-
</div>
24-
</div>
25-
)
32+
)
33+
}
2634
}

src/components/Game.js

+55-11
Original file line numberDiff line numberDiff line change
@@ -10,30 +10,74 @@ export default class Game extends React.Component {
1010
history: [
1111
{squares: Array(9).fill(null)}
1212
],
13-
value: 5
1413
}
1514
}
1615

17-
changeState = () => {
16+
handleClick = (i) => {
17+
const history = this.state.history
18+
const current = history[history.length - 1]
19+
const squares = current.squares
20+
21+
const winner = calculateWinner(squares)
22+
23+
if(winner || squares[i]) {
24+
return
25+
}
26+
27+
squares[i] = this.state.xIsNext ? 'X' : 'O'
1828
this.setState({
19-
value: 6
29+
history: history.concat({
30+
squares:squares
31+
}),
32+
xIsNext: !this.state.xIsNext,
33+
stepNumber: history.length
2034
})
2135
}
2236

23-
someFunction = () => {
24-
return 5
25-
}
2637

27-
render() {
28-
console.log(this.state)
29-
const result = this.someFunction()
38+
render() {
39+
const history = this.state.history
40+
const current = history[this.state.stepNumber]
41+
let status
42+
const winner = calculateWinner(current.squares)
43+
44+
if(winner) {
45+
status = 'Winner is' + winner
46+
} else {
47+
status = 'Next Player is ' + (this.state.xIsNext ? 'X' : 'O')
48+
}
3049
return(
3150
<div className= "game">
3251
<div className = "game-board">
33-
<Board value = {result}/>
34-
<button onClick = {() => this.changeState()}>Click Me!</button>
52+
<Board clickAction = {(i) => this.handleClick(i)} squares = {current.squares}/>
53+
</div>
54+
55+
<div className = "game-info">
56+
<div>{status}</div>
3557
</div>
3658
</div>
3759
)
3860
}
61+
}
62+
63+
function calculateWinner (squares) {
64+
const possibilities = [
65+
[0, 1, 2],
66+
[3, 4, 5],
67+
[6, 7, 8],
68+
[0, 3, 6],
69+
[1, 4, 7],
70+
[2, 5, 8],
71+
[0, 4, 8],
72+
[2, 4, 6]
73+
]
74+
75+
for(let i = 0; i < possibilities.length; i++) {
76+
const [a, b, c] = possibilities[i]
77+
if(squares[a] && squares[a] === squares[b] && squares[b] === squares[c]) {
78+
return squares[a]
79+
}
80+
}
81+
82+
return null
3983
}

src/components/Square.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import React from 'react'
22

33
export default function Square(props) {
44
return (
5-
<button className = "square">
6-
{props.insideValue}
5+
<button className = "square" onClick = {props.handleClick}>
6+
{props.value}
77
</button>
88
)
99
}

0 commit comments

Comments
 (0)