Ruby编写石头剪刀布游戏无报错但运行结果不符合预期如何解决
问题定位
你的代码存在3个核心问题:
- 数组索引取值错误:Ruby的数组下标从
0开始计数,你定义的cchoice数组下标0对应"Rock"、1对应"Paper"、2对应"Scissors",但你用rand(1..3)生成的随机数是1、2、3,当随机数取3时cchoice[comp]会返回空值,同时1、2对应的选项也和你后续的胜负判断逻辑不匹配。 - 完全缺失平局场景的处理:当用户选择和电脑选择一致时,你的代码没有对应判断分支,会直接走默认的
won=false逻辑判定为用户输,不符合游戏规则。 - 胜负判断逻辑和数组取值不对应:因为前面的随机数是从1开始取的,和你写的胜负判断条件里的comp数值对应关系完全错位,导致输赢结果完全不符合预期。
修正后可正常运行的代码
puts "Rock, Paper or Scissors" choice = gets.chomp cchoice = ["Rock", "Paper","Scissors"] # 生成0-2的随机数对应数组下标 comp = rand(0..2) won = false tie = false puts "Computer chose #{cchoice[comp]}" if (choice == "Rock") if (comp == 1) # 电脑出Paper,用户输 won = false elsif (comp == 2) # 电脑出Scissors,用户赢 won = true else # comp==0,电脑也出Rock,平局 tie = true end elsif (choice == "Paper") if (comp == 2) # 电脑出Scissors,用户输 won = false elsif (comp == 0) # 电脑出Rock,用户赢 won = true else # 平局 tie = true end elsif (choice == "Scissors") if (comp == 0) # 电脑出Rock,用户输 won = false elsif (comp == 1) # 电脑出Paper,用户赢 won = true else # 平局 tie = true end else puts "I dont know what that means so-" exit end if tie puts "It's a tie!" elsif (won) puts "YOU WON!!!" else puts "You lost.." end
内容的提问来源于stack exchange,提问作者Bradley Joe Joseph
相关产品推荐
相关产品推荐

