计算机在井字游戏React.js中始终移动到随机的空单元格?

时间:2018-09-13 08:46:56

标签: javascript reactjs

我正在尝试用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();
        }

但是有时它会导致计算机移动以某种方式放置在非空单元格上。

所以问题是将计算机移动到游戏板上的方式是什么?

1 个答案:

答案 0 :(得分:1)

  1. 制作新数组
  2. 遍历板阵列并将空单元格的索引推入该阵列
  3. 现在您有了一个空单元格数组,将随机数设置为0到该数组的大小之间,现在您可以保证最终只会得到一个空单元格

代码:

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);
  }
相关问题