使用React实现井字棋小游戏
- 按照React官方教程来实现一个井字棋小游戏并完善其他功能,这里主要讲怎么完善这些功能
- 在游戏历史记录列表显示每一步棋的坐标,格式为 (列号, 行号)。
- 在历史记录列表中加粗显示当前选择的项目。
- 使用两个循环来渲染出棋盘的格子,而不是在代码里写死(hardcode)。
- 添加一个可以升序或降序显示历史记录的按钮。
- 每当有人获胜时,高亮显示连成一线的 3 颗棋子。
- 当无人获胜时,显示一个平局的消息。
- 点击此处获取React官方井字棋小游戏源码———官方代码.
- 点击此处获取已完善的井字棋的源码———已完善代码.
1.添加坐标功能
- 在state的history中添加coordinate
this.state = {
xIsNext: true,
history: [
{
square: Array(9).fill(null),
coordinate: 0
}
],
stepNumber: 0,
order: false
}
- 点击时根据index添加坐标信息
handleClick(i) {
let history = this.state.history.slice(0, this.state.stepNumber + 1);
let current = history[history.length - 1]
let square = current.square.slice();
if (calculateWinner(square) || square[i]) {
return;
}
square[i] = this.state.xIsNext ? "X" : "O";
let x = Math.floor(i / 3) + 1
let y = i % 3 + 1
let coordinate = square[i] + '(' + x + ',' + y + ')'
this.setState({
history: history.concat([
{
square: square,
coordinate: coordinate
}
]),
stepNumber: history.length,
xIsNext: !this.state.xIsNext
});
}
- 渲染时渲染坐标
const moves = history.map((step, index) => {
const desc = index ?
'Go to move : ' + step.coordinate :
'Go to game start';
return (
<li key={
index}>
<button onClick={
() => this.jumpTo(index)} className=