Вы уверены, что ваш т правильно?Мне кажется, что это должно быть примерно так:
t = [
[["Armando", "P"],["Dave", "S"]],
[["Richard", "R"],["Michael", "S"]],
[["Allen", "S"],["Omer", "P"]],
[["David E.", "R"], ["Richard X.", "P"]]
]
Я предполагаю, что Армандо играет Дэйва в первой игре.Ричард играет Майкла и т. Д.
В вашем коде [["Armando", "P"], ["Dave", "S"]] играет [["Allen", "S"], ["Omer"", "П"]].Поэтому, когда ваш rps_game_winner проверяет игру [0] [1], он на самом деле возвращает ["Dave", "S"].Не P.
edit1 : если вы хотите выполнить логику набора, о которой вы говорите, вам нужно изменить rps_tournament_winner следующим образом:
def rps_tournament_winner(t)
t.each do |pair|
pair.each do |g|
puts 'winner:', yield(g)
end
end
end
edit2: сделал мою собственную реализацию.возьми из него что хочешь.но он делает то, что вы хотите.https://github.com/SpoBo/rock-paper-scissors
Вы должны отслеживать победителей и позволить победителям играть против себя.моя реализация позволяет любому количеству игроков играть друг против друга.Единственная проблема, с которой я столкнулся, заключается в том, что игрок всегда играет одну и ту же руку, и как только 2 игрока с одинаковыми руками встретятся, игра станет непредсказуемой.так что для этого нужны некоторые модификации.