我是一个相对较新的开发人员,通过JS学习。我正在尝试使用vanillaJS创建一个简单的TicTacToe游戏。
现在我有三个'模块'(它们实际上只是对象文字):Board
,Player
和TicTacToe
(基本上只是游戏状态)。
Board
具有state
属性,这是一个3 * 3数组,代表TicTacToe板。它会在调用newMove
方法时更新,并且有一个isInWinningState
方法,当某人连续三次返回时,会返回true
。
Player
具有marker
属性,即“X”或“O”。它还有一个turn
属性,当玩家回合时为true
,当玩家赢得游戏时为isWinner
属性。玩家可以move
,这意味着它会在棋盘上调用new Move
。
TicTacToe
对象具有属性board
,player1
和player2
,以及用于初始化每个属性的方法。它还有一个属性currentPlayer
,可以跟踪它的转向。
我觉得在这一点上每个对象的内部逻辑都已经完全实现了(尽管,就像我说的那样,我是一个菜鸟,可能会遗漏一些东西)。
但是,我发现每个对象之间的通信比较困难。
特别是,我不确定如何让玩家移动。 Player
对象有一个move
方法(虽然我还没有在方法中写过任何内容),而Board
对象有一个newMove
方法,但我不知道知道如何通过TicTacToe
连接它们,这样当currentPlayer
调用其move
方法时,就会调用board
的{{1}}方法。
我希望这很清楚。这是代码:
newMove
答案 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)
即可正常工作