-1

モノポリーゲームを作成しています。player1 と player2 (将来的には player3 など) を自動的に切り替えることができるように、take_turn メソッド (またはクラス) を作成する方法を探しました。

ここで回答を探し、ゲームを開発するための OOPに関するこの完全な PDFも見つけましたが、この特定の質問に対する回答は見つかりませんでした。

これは、私が TDD し、他のいくつかのオブジェクトで構築したコードです。現時点では、player1 だけですべてがうまく機能します。手動で行う必要なく (DRY)、player1 と player2 に対してこれらの手順を自動的に繰り返したいと思います。

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

player1 への呼び出しを current_player に置き換えれば、かなりうまくいくはずです。

于 2013-04-01T09:44:28.760 に答える