Ruby中的摇滚,纸张,剪刀游戏

时间:2015-11-03 21:24:47

标签: ruby

我想让这个程序运行:

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方法和用户输入时,程序会接受这些,然后逻辑不起作用。

任何帮助都将不胜感激。

2 个答案:

答案 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"由用户输入。

希望它有所帮助!