关于 Ruby:Ruby – 试图创造一个无与伦比的游戏

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