我试图创建游戏。这是我的代码:
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
有很多方法可以进一步改进,但我会把它留给你。