带有红宝石定义比较的石头剪刀布纸游戏不起作用



我试图创建游戏。这是我的代码:

puts "Welcome to our Rock, Paper, Scissors Game"
puts "Do you want to play? (yes/no)"
answer = gets.chomp.downcase
while answer == "yes" do
options = ["rock", "paper", "scissors"]
computer_choice = options[rand(options.length)]
puts "Please choose Rock, Paper or Scissors!"
player_choice = gets.chomp.downcase
def compare
if (player_choice == "rock" && computer_choice == "scissors")
puts "computer choice is: " + computer_choice + " , you win! :)"
elsif (player_choice == "rock" && computer_choice == "paper")
puts "computer choice is: " + computer_choice + " ,computer wins :("
elsif (player_choice == "paper" && computer_choice == "scissors")
puts "computer choice is: " + computer_choice + " ,computer wins :("
elsif (player_choice == "paper" && computer_choice == "rock")
puts "computer choice is: " + computer_choice + " , you win! :)"
elsif (player_choice == "scissors" && computer_choice == "rock")
puts "computer choice is: " + computer_choice + " ,computer wins :("
elsif (player_choice == "scissors" && computer_choice == "paper")
puts "computer choice is: " + computer_choice + " , you win! :)"
elsif (player_choice === computer_choice)
puts "It's a tie!"
else
puts "Error"
end
end
end

它重复询问我的选择,并且没有进行我的def比较。我错过了什么?

让我们把它分成三个部分。首先,让我们编写玩游戏的主循环:

puts "Welcome to our Rock, Paper, Scissors Game"
loop do
puts "Do you want to play? (yes/no)"
answer = gets.chomp.downcase
if answer == "yes"
play_game
elsif answer == "no"
puts "Bye!"
break
elsif
puts "Invalid answer (must be 'yes' or 'no')"
end
end

这修复了您的第一个问题,即"您想玩吗"实际上没有被循环。

现在,让我们定义play_game方法:

def play_game
options = ["rock", "paper", "scissors"]
computer_choice = options.sample
loop do
puts "Please choose Rock, Paper or Scissors!"
player_choice = gets.chomp.downcase
if options.include?(player_choice)
compare(player_choice, computer_choice)
break
else
puts "Invalid answer (must be 'rock', 'paper' or 'scissors')"
end
end
end

这解决了你的第二个问题,玩家在每个游戏中都陷入了无限循环。

最后,让我们定义compare方法:

def compare(player_choice, computer_choice)
puts "Computer choice is: " + computer_choice + ". "
if(player_choice == "rock" && computer_choice == "scissors")
puts "You win! :)"
elsif(player_choice == "rock" && computer_choice == "paper")
puts "Computer wins :("
elsif(player_choice == "paper" && computer_choice == "scissors")
puts "Computer wins :("
elsif(player_choice == "paper" && computer_choice == "rock")
puts "You win! :)"
elsif(player_choice == "scissors" && computer_choice == "rock")
puts "Computer wins :("
elsif(player_choice == "scissors" && computer_choice == "paper")
puts "You win! :)"
else
puts "It's a tie!"
end
end

您可能会进一步改进该方法,但我至少删除了puts语句之间最大的重复。

把这些放在一起,这里是游戏的完整工作版本:

def play_game 
options = ["rock", "paper", "scissors"] 
computer_choice = options.sample 
loop do 
puts "Please choose Rock, Paper or Scissors!" 
player_choice = gets.chomp.downcase 
if options.include?(player_choice) 
compare(player_choice, computer_choice) 
break 
else 
puts "Invalid answer (must be 'rock', 'paper' or 'scissors')" 
end 
end 
end 
def compare(player_choice, computer_choice) 
puts "Computer choice is: " + computer_choice + ". " 
if(player_choice == "rock" && computer_choice == "scissors") 
puts "You win! :)" 
elsif(player_choice == "rock" && computer_choice == "paper") 
puts "Computer wins :(" 
elsif(player_choice == "paper" && computer_choice == "scissors") 
puts "Computer wins :(" 
elsif(player_choice == "paper" && computer_choice == "rock") 
puts "You win! :)" 
elsif(player_choice == "scissors" && computer_choice == "rock") 
puts "Computer wins :(" 
elsif(player_choice == "scissors" && computer_choice == "paper") 
puts "You win! :)" 
else 
puts "It's a tie!" 
end 
end 

puts "Welcome to our Rock, Paper, Scissors Game" 
loop do 
puts "Do you want to play? (yes/no)" 
answer = gets.chomp.downcase 
if answer == "yes" 
play_game 
elsif answer == "no" 
puts "Bye!" 
break 
elsif 
puts "Invalid answer (must be 'yes' or 'no')" 
end 
end

有很多方法可以进一步改进,但我会把它留给你。

最新更新