Ruby - Trying to create an unbeatable game
我正在尝试创建我创建的游戏版本,其中程序(计算机)总是获胜。游戏是石头剪刀布。
我是 Ruby 的初学者,我已经成功创建了游戏的"普通"版本,计算机随机选择结果。我一直在寻找一段时间,并在这个简单的问题上停留了大约一天。
如果有人能指出我的写作方向,因为我真的不想为我解决解决方案,因为我真的在努力学习这一点。但我觉得我错过了一些重要的东西。我有使用 Minimax 算法的想法,所以我也开始阅读它。
我对这个问题的不同解决方案持开放态度。
以下是我目前的"普通"版本的游戏。还有我认为需要进行更改的部分......计算机根据用户输入进行选择。然后我将展示我在同一个游戏中尝试制作的部分,但让计算机始终获胜。
问题:我如何让计算机根据用户输入正确选择?我知道 Ruby 中存在许多选项,我对可以合并到我的程序中的不同解决方案或解决方案类型持开放态度。
感谢您提前做出任何/所有回复。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | def get_player_play prompt @player_play = gets.chomp.upcase.to_sym @winner = :invalid if @player_play != :R || :P || :S @winner = :score if @player_play == :X @winner ="" if @player_play == :Q end def get_computer_play @computer_play = WINS.keys.sample end def get_winner if @player_play == @computer_play then @winner = nil else @winner = :player if WINS[@player_play] == @computer_play @winner = :computer if WINS[@computer_play] == @player_play end end |
这是我尝试过的(加上同类型 if/else 语句的许多变体)。
1 2 3 4 5 6 7 8 9 10 11 | #this makes it a tie def get_computer_play if NAME[@player_play] == ( NAME[:R] ) return @computer_play = WIN[:P] elsif NAME[@player_play] == ( NAME[:P] ) return @computer_play = WIN[:S] else NAME[@player_play] == ( NAME[:S] ) return @computer_play = WIN[:R] end end |
这是一种不同的、更像 Ruby 的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | WINNERS = {"rock"=>"paper","scissors"=>"rock","paper"=>"scissors" } def cheat loop do puts"rock, paper or scissors?" computer = WINNERS[gets.downcase.chomp] if computer puts"You lose, computer chose #{computer}." break end puts"That entry is invalid. Try again." end end cheat #=> (enter"rock") "You lose, computer chooses paper." cheat #=> (enter"papter") "That entry is invalid. Try again." cheat #=> (enter"paper") "You lose, computer chooses scissors." cheat #=> (enter"scissors")"You lose, computer chooses rock." |
要创建一个被操纵的游戏,请使用类似于以下行的 case-expression:
1 2 3 4 5 6 7 8 9 10 11 | puts"Rock, paper or scissors?" ans = gets.downcase.chomp case ans when"rock" puts"You lose, computer chose paper" when"paper" #insert code here when"scissors" #insert code here end |