我想让这个程序运行:
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 :(得分:2)
在使用gets
的输入语句中,您需要考虑字符串中的换行符,以及它是字符串的事实。当玩家输入它时,它以文本形式进入,而不是整数。一种简单的方法是通过
player1 = gets.to_i
这将保证您用于测试整数的条件逻辑不会因为您正在比较字符串而失败。
带有playerchoice
输入需求的换行符会让人感到高兴,以便进行比较。所以,还有另一种摆脱换行的方法。
playerchoice = gets.chomp
答案 1 :(得分:0)
尝试按以下方式分配playerchoice
变量:
playerchoice = gets.chomp
#gets
方法本身将输出用户输入附带的任何回车,这就是为什么如果你要检查playerchoice
的返回值,你就是' d看到而不是"n"
,返回的值实际上是"n\n"
,导致您的比较恢复循环游戏。在该值上调用#chomp
会删除回车符(\ n,\ r,\ r \ n),如果" n"由用户输入。
希望它有所帮助!