-1

我正在创建一个大富翁游戏。我寻找一种方法来创建一个 take_turn 方法(或一个类),这样我就可以在 player1 和 player2 之间自动切换(以及将来的 player3 等)。

在这里寻找答案,还找到了这个关于 OOP 的完整 PDF用于开发游戏,但还没有找到这个特定问题的答案。

这是我用其他几个对象进行 TDD 和构建的代码。目前仅对 player1 一切正常,我只想自动为 player1 重复这些步骤,然后自动为 player2 重复这些步骤,而无需手动执行(DRY)。

class Engine

  attr_reader :dice, :player1, :player2, :move, :board

  def initialize
    @player1 = Player.new
    @board = Board.new
    @player2 = Player.new
    @dice = Dice.new
    @move = Move.new
  end

  def run
    3.times do
        roll_and_move
        print_current_balance
        player_action
    end
  end

  def roll_and_move
    dice.roll
    move.move(player1, board, dice.value)
  end

  def print_current_balance
    player1.balance
  end

  def player_action
    player1.buy(board.tile(player1.position))
  end
end
4

1 回答 1

1

好吧,我不确定你真正的问题是什么,但也许这会有所帮助:

将您的玩家放在一个数组中:

@players = [Player.new,Player.new]

获取当前玩家的指数

@current_player_indice = 1
def current_player
  return @players[@current_player_indice]
end

用一个简单的方法推进一个回合:

def next_player
  @current_player_indice = (@current_player_indice+1)%@players.size
end

用 current_player 替换你对 player1 的调用,你应该很好。

于 2013-04-01T09:44:28.760 回答