這是我的代碼:在Ruby中的紙,剪刀,岩石遊戲。當一個數組變化的數據,它改變了另一個數組的數據(?¿)
class RockPaperScissors
# Exceptions this class can raise:
class NoSuchStrategyError < StandardError
end
def self.winner(player1, player2)
if ((player1[1] == 'R') && (player2[1] == 'S') ||
(player1[1] == 'S') && (player2[1] == 'P') ||
(player1[1] == 'P') && (player2[1] == 'R'))
return player1
elsif ((player1[1] == 'R') && (player2[1] == 'P') ||
(player1[1] == 'S') && (player2[1] == 'R') ||
(player1[1] == 'P') && (player2[1] == 'S'))
return player2
elsif ((player1[1] == 'R') && (player2[1] == 'R') ||
(player1[1] == 'S') && (player2[1] == 'S') ||
(player1[1] == 'P') && (player2[1] == 'P'))
return player1
end
end
def self.tournament_winner(tournament)
player1 = Array.new
player2 = Array.new
nextround = Array.new
while tournament.length != 1 do
tournament.each_with_index {|item, index|
if (index%2!=0)
player2[0] = item[0]
player2[1] = item[1]
elsif (index%2 ==0)
player1[0] = item[0]
player1[1] = item[1]
else
puts 'bananas'
end
if (index%2!=0)
nextround[(index-1)/2] = winner(player1, player2)
end
}
tournament=nextround
end
return tournament
end
end
RockPaperScissors.tournament_winner([["num1", "R"], ["num2", "P"], ["num3", "P"], ["num4", "R"]])
好了,最後一行是執行發射。這段代碼使岩石,剪刀的比賽。它將每個角色及其攻擊的陣列數組作爲輸入,並且必須返回數組中的冠軍及其攻擊。
比賽是num1 vs num2(num2 wins),而num3 vs num4(num3 wins)。然後決賽是Num2 vs Num3,並且在這個穩定的隊友中贏得陣列中的第一個人(Num2)。
它似乎過於複雜,因爲代碼必須使用任意數量的字符,只要它們的編號是base2(2,4,8,16個字符...等)。
我的問題是下一步(調試代碼,你會看到)。當它改變數組'Player1'或'Player2'的值時,它也會改變數組'nextround'中的值,即使它不在該行中!
這不是假定發生!
順便說一句,我正在學習Ruby,所以這可能是一個非常愚蠢的失敗。
好的,它已經解決了。 看起來數組'nextround'包含[player1,player2]或類似的東西。 – pfernandez
tournament_winner的第一個參數是'[「num1」,「R」]'。這是否意味着玩家1將始終播放「R」?如果是這樣,如果在比賽的某個時刻,玩家1遇到玩家4,而玩家「R」,會發生什麼?如果沒有,請澄清你對每個玩家使用策略的解釋。 –