2016-05-27 102 views
0

阵列由索引我想通过一个Ruby阵列由索引进行迭代。我有一个游戏,我希望玩家可以单独轮流掷骰子,直到达到20,每轮都会增加他们的分数。到目前为止,它会为玩家1所有的圈,直到他们到达20,然后会做玩家2,直到他们得到20迭代通过在红宝石

players_array.each do |player| 
     player = Person.new(player) 
     until player.players_score.inject(0, :+) >= 20 do 
      score = player.dice_roll 
      player.add_to_score(score) 
      print player.players_score 
      print "\n" 
      print player, + player.players_score.inject(0, :+).to_s 
      print "\n" 
     end 
    end 

我的理解可能与each_with_index 任何想法?

感谢

新代码:

players_array.each do |player| 
    while TRUE 
    player = Person.new(player) 
    score = player.dice_roll 
    player.add_to_score(score) 
    if player.players_score.inject(0, :+) > 20 
     # puts player.players_score 
     puts '20 hit' 
     break 
    else 
     next 
    end 
    end 
end 
+0

更改到'players_array.each_with_index模拟做|播放器,IDX |',其中IDX将是索引 – Santhosh

+0

@Santhosh你的意思是'players_array.each_with_index ...'? –

+0

是的,这是一个错字。我的错。谢谢 – Santhosh

回答

1

你的问题是,在第一个球员迭代,until表达迭代,直到比分达到20它从来没有得到任何其他球员。

我建议去掉until表达,围绕球员循环使用loop一个无限循环,然后break当玩家达到20 break可能只从内环突破,所以最好是写,做的方法这一切,然后从方法return,而不是break荷兰国际集团。更准确地说,我建议你写一个方法,把玩家数组(也许是20个门槛)作为输入,并且返回你需要的任何信息(也许赢得玩家对象和最终分数)作为它的返回表达式。

可以在红宝石返回多个表达式作为阵列,例如['Juan De La Cruz', 22],然后解构,就像这样:

winning_player, winning_score = play_round(players, 20) 
+0

确定还没有得到它。看到编辑后的代码,看看你能否再次提供帮助。谢谢 – hellogoodbye

+0

比'while ... end'更好地使用'loop do ... end'。 'loop do ... end'应该在* players.each之外*另外,请修复缩进。此外,休息可能不起作用,您可能需要将其放入方法并返回。 –

0

下面是一个尝试使用一些成语红宝石做同样的。

players = ["P1", "P2"].cycle 

scores = Hash.new {|hash, k| hash[k] = []} 

begin 
    scores[winner = players.next] << (1..6).to_a.sample 
end until scores.any? {|_,v| v.reduce(:+) >= 20} 

p winner # Prints winning player's id 

说明:

  1. players是含有的播放器清单阵列。

  2. players.cycle是一个枚举,要求其next将给我们从数组下一个元素,并返回数组的最后一个元素之后,以next下次调用返回的第一个元素 - 这有效地建立了一个球员变成一个循环。

  3. scores是哈希来跟踪所有使用玩家的ID为重点的掷骰。它已设置了这样一种方式,当不存在的键被第一次访问时,它被初始化为具有一个空数组([])作为其值。

  4. 接下来是begin ... until循环,它将逐个掷出一个骰子给每个玩家,并且循环将打破任何玩家的得分超过20的时刻。为了追踪获胜者,捕获掷骰子的最后一个用户以巧妙的方式在变量winner中。骰子的

  5. 辊由从含有数字1的阵列采样值至6。