Javascript Tic-tac-toe,如何在模块之间传递“移动”

时间:2017-06-20 17:06:06

标签: javascript tic-tac-toe

我是一个相对较新的开发人员,通过JS学习。我正在尝试使用vanillaJS创建一个简单的TicTacToe游戏。

现在我有三个'模块'(它们实际上只是对象文字):BoardPlayerTicTacToe(基本上只是游戏状态)。

Board具有state属性,这是一个3 * 3数组,代表TicTacToe板。它会在调用newMove方法时更新,并且有一个isInWinningState方法,当某人连续三次返回时,会返回true

Player具有marker属性,即“X”或“O”。它还有一个turn属性,当玩家回合时为true,当玩家赢得游戏时为isWinner属性。玩家可以move,这意味着它会在棋盘上调用new Move

TicTacToe对象具有属性boardplayer1player2,以及用于初始化每个属性的方法。它还有一个属性currentPlayer,可以跟踪它的转向。

我觉得在这一点上每个对象的内部逻辑都已经完全实现了(尽管,就像我说的那样,我是一个菜鸟,可能会遗漏一些东西)。

但是,我发现每个对象之间的通信比较困难。

特别是,我不确定如何让玩家移动。 Player对象有一个move方法(虽然我还没有在方法中写过任何内容),而Board对象有一个newMove方法,但我不知道知道如何通过TicTacToe连接它们,这样当currentPlayer调用其move方法时,就会调用board的{​​{1}}方法。

我希望这很清楚。这是代码:

newMove

1 个答案:

答案 0 :(得分:1)

TicTacToe对象传递给其子对象的方法。您可以稍后使用它来回调主对象中的游戏更新方法,并允许您访问游戏中的其他对象。

<强>播放器

  function doMove(game,x,y,marker)= {
   // you do move here
   game.update(x,y,marker);
  }

<强>井字游戏

  function update(x,y,marker)={
   this.board.updateBoard(this,x,y,marker);
  }

董事会

  function updateBoard (game,x,y,marker)={
   //do some update board rendering
  }

然后在TicTacToe对象中,您只需调用this.player1.doMove(this,x,y,marker)即可正常工作