我正在尝试用Javascript井字游戏,但我被计算机移动所困。
我的游戏板是一个空数组,我像这样board: new Array(9).fill("")
然后换角羚,我做这个
board: state.board.map((item, index) => index === action.index ? item = action.player : item)
因此,我在板上进行映射,并检查单元格的index
是否等于传递的index
。如果是的话,我用'X'
或'O'
代替空白,如果不是,它将保留为空单元格。
我的玩家转弯功能看起来像这样
userTurn (index) {
if(this.props.gameFinished) {return}
if(this.props.board[index] === '') {
this.props.takeTurn(index, this.props.player);
this.computerTurn();
}
}
然后我的电脑转
computerTurn() {
const randomNumber = Math.floor(Math.random() * 10);
if(this.props.board[randomNumber] === '') {
this.props.takeTurn(randomNumber, this.props.computer);
}
}
在我的计算机转弯功能中,我不确定this.props.board[randomNumber]
不是空字符串时该怎么办。因为如果现在不为空,则什么也不会发生,并且计算机也不会在板上放置它的符号。
到目前为止,我试图像这样添加else语句
if(this.props.board[randomNumber] === '') {
this.props.takeTurn(randomNumber, this.props.computer);
} else {
this.computerTurn();
}
但是有时它会导致计算机移动以某种方式放置在非空单元格上。
所以问题是将计算机移动到游戏板上的方式是什么?
答案 0 :(得分:1)
代码:
computerTurn() {
cells = [];
for (i = 0; i < 10; i++) {
if (this.props.board[i] === "") cells.push(i);
}
const randomNumber = Math.floor(Math.random() * cells.length);
this.props.takeTurn(cells[randomNumber], this.props.computer);
}