2015-11-03 107 views
0

比賽,我試圖讓這個程序運行:,石頭,剪刀紅寶石

cpucount = 0 
playercount = 0 
tiecount = 0 

playerchoice = 

while playerchoice != "n" 
    puts "Chose your Weapon. Paper (0), Rock (1), Scissors (2)" 
    player1 = 0 #gets 
    cpuplayer = 2#rand(3) 
    puts player1 
    puts cpuplayer 
    if player1 == 0 and cpuplayer == 1 
    puts "You Win" 
    playercount +=1 
    elsif player1 == 1 and cpuplayer == 2 
    puts "You Win!" 
    playercount +=1 
    elsif player1 == 2 and cpuplayer == 0 
    puts "You Win!" 
    playercount +=1 
    elsif player1 == cpuplayer 
    puts "You tied!" 
    tiecount +=1 
    else 
    puts "You lose" 
    cpucount +=1 
    end 
    puts cpucount 
    puts playercount 
    puts tiecount 
    puts "Do you want to play again? y/n?" 
    playerchoice = gets 
    puts playerchoice 
end 

但也有一些問題。

首先,無論我選擇"y"繼續另一輪還是"n"退出,它仍然運行另一輪。

其次,當我手動輸入player1和cpuplayer的值時,邏輯是好的,但是當我使用rand方法和用戶輸入時,程序會採用這些方法,然後邏輯不起作用。

任何幫助,將不勝感激。

+0

當處理多個條件時,請嘗試像case([player1,cpuplayer])',然後像'when [0,1]'一樣分支出來處理這些子句。這比一堆龐大的if語句要容易得多。還要小心。 'playerchoice = nil'是以前需要的,否則它會賦予'while'的結果。 – tadman

+0

我在研究這個時利用了你所解釋的東西,看了一段示例代碼。我將在未來更多地玩這個遊戲,但是現在我知道該怎麼做,如果 - 那麼,但是謝謝你的反饋! – R2DeeTard

+0

有一些答案[你可能會覺得有趣的[這個SO問題](http://stackoverflow.com/questions/32105234/drying-up-rock-paper-scissors)。 –

回答

2

在您使用gets的輸入語句中,您需要考慮放置在字符串中的換行符以及它是字符串的事實。當玩家輸入時,它以文字形式出現,而不是整數。一個簡單的方法來做到這一點是讓輸入一個整數,通過

player1 = gets.to_i 

這將保證您用它來測試針對整數條件邏輯是不會失敗,因爲你是一個比較字符串。

隨着playerchoice輸入的換行符需要小心以使比較愉快。所以,還有另一種方法來擺脫換行符。

playerchoice = gets.chomp 
+0

謝謝,這解決了邏輯問題! – R2DeeTard

0

嘗試通過以下方式分配playerchoice變量:

playerchoice = gets.chomp 

#gets方法本身並輸出任何回車來與用戶的輸入,這就是爲什麼如果你是來檢查返回值playerchoice,你會看到,而不是"n",返回的值實際上是"n\n",導致您的比較恢復循環遊戲。在該值上調用#chomp會去掉回車符(\ n,\ r,\ r \ n),如果用戶鍵入「n」,遊戲就會結束。

希望它有幫助!

+0

謝謝!我剛纔嘗試使用chomp,並且遇到了一些關於常量的錯誤,我只是用它看起來錯了。 有關條件的任何想法? – R2DeeTard