Skip to content

Commit 037915c

Browse files
committed
2nd step: Improve code style.
1 parent 637b164 commit 037915c

File tree

2 files changed

+28
-5
lines changed

2 files changed

+28
-5
lines changed

src/index.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,7 @@ ol, ul {
5151
.game-info {
5252
margin-left: 20px;
5353
}
54+
55+
.winner {
56+
color: red;
57+
}

src/index.js

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class Game extends React.Component {
3636
}
3737

3838
jumpTo(step) {
39+
this.winner = null;
3940
this.setState({
4041
stepNumber: step,
4142
xIsNext: (step % 2) === 0,
@@ -44,9 +45,10 @@ class Game extends React.Component {
4445

4546
render() {
4647
const MAX_LEN = 9;
48+
let winnerResult;
4749
this.history = this.state.history;
4850
this.current = this.history[this.state.stepNumber];
49-
this.winner = calculateWinner(this.current.squares);
51+
winnerResult = calculateWinner(this.current.squares);
5052

5153
const moves = this.history.map((step, move) => {
5254
const desc = move ? 'Go to move #' + move : 'Go to game start';
@@ -57,7 +59,8 @@ class Game extends React.Component {
5759
);
5860
});
5961
let status;
60-
if (this.winner) {
62+
if (winnerResult) {
63+
this.winner = winnerResult.shift();
6164
status = 'Winner: ' + this.winner;
6265
} else if (this.history.length-1 === MAX_LEN) {
6366
status = 'Draw...';
@@ -70,6 +73,7 @@ class Game extends React.Component {
7073
<div className="game-board">
7174
<Board
7275
squares={this.current.squares}
76+
winnerLine={winnerResult}
7377
onClick={(i) => this.handleClick(i)}
7478
/>
7579
</div>
@@ -87,7 +91,8 @@ class Board extends React.Component {
8791

8892
renderSquare(i) {
8993
return (
90-
<Square
94+
<Square
95+
winner={isWinner(i, this.props.winnerLine)}
9196
value={this.props.squares[i]}
9297
onClick={() => this.props.onClick(i)}
9398
/>
@@ -118,14 +123,19 @@ class Board extends React.Component {
118123
}
119124

120125
function Square(props) {
126+
var liClasses = "square"
127+
128+
if (props.winner) { liClasses = liClasses.concat(" winner") }
129+
121130
return (
122-
<button className="square" onClick={props.onClick}>
131+
<button className={liClasses} onClick={props.onClick}>
123132
{props.value}
124133
</button>
125134
);
126135
}
127136

128137
function calculateWinner(squares) {
138+
const winnerLine = [];
129139
const lines = [
130140
[0, 1, 2],
131141
[3, 4, 5],
@@ -139,12 +149,21 @@ function calculateWinner(squares) {
139149
for (let i = 0; i < lines.length; i++) {
140150
const [a, b, c] = lines[i];
141151
if (squares[a] && squares[a] === squares[b] && squares[a] === squares[c]) {
142-
return squares[a];
152+
winnerLine.push(a,b,c);
153+
return [squares[a], winnerLine];
143154
}
144155
}
145156
return null;
146157
}
147158

159+
function isWinner(i, winnerLine) {
160+
if (!winnerLine) { return; }
161+
return i === winnerLine[0][0] ||
162+
i === winnerLine[0][1] ||
163+
i === winnerLine[0][2];
164+
165+
}
166+
148167
// ==================================
149168

150169
ReactDOM.render(

0 commit comments

Comments
 (0)