2017-03-09 69 views
2

我对Ruby很新,所以请给我任何建议,你可以提供。谢谢。 今天我几乎完成了一个简单的最后我问用户是否想再次玩。我知道如何做If If语句和类似的东西,但不知道如何跳回到游戏开始的代码行。我做了一些研究,发现了一些叫做goto的东西,但发现它不应该被使用。无论如何,我可以去特定的代码行,而不会搞砸一切? 感谢您的帮助。如何跳转到特定的代码行

的例子是:

print "Would you like to play again?" 
puts "Yes or no" 
again = gets.chomp! 
again.capitalize! 

if again == "Yes" 
(Code to send back to line 9) 
end 
+0

Ruby实际上并没有'goto'声明,而你真的不需要声明,它立即让你的代码无法维护。你能举出一个你想要做什么的具体例子,这样可以解释Ruby解决问题的方式吗? – tadman

+0

大多数游戏都是围绕[*事件循环*](https://en.wikipedia.org/wiki/Event_loop)的概念构建的,其中由用户或各种游戏内定时器发起的操作均由其处理。每个事件都是单独处理的,通常按顺序处理,其中事件可能是按钮按下或鼠标移动。没有必要回到任何特定的代码行,因为当处理程序结束时,它只是循环回去,并通过设计做其他事情。 – tadman

+0

尝试将你的代码放在'loop do .... end'循环中。这将继续循环,直到遇到'break'或'break x'('x'是一个返回值)。有些人使用'while(true)... end',但我最喜欢'loop do'。有关详细信息,请参见[Kernel#loop](http://ruby-doc.org/core-2.3.0/Kernel.html#method-i-loop),包括一个简单示例。 –

回答

1

这样做的依据是使用loop的方法,你可以重复的东西,直到你得到一个满意的答案:

def play_again? 
    loop do 
    print "Would you like to play again? Y/N" 
    again = gets.chomp.capitalize 

    case (again) 
    when 'N' 
     return false 
    when 'Y' 
     return true 
    else 
     puts "Huh? I don't know what that means." 
    end 
    end 
end 

然后你就可以纳入这个你主程序:

begin 
    run_game 
end while play_again? 

那将继续运行直到play_again?返回false,这只有在键入“N”时才会发生。

+0

谢谢你的帮助tadman只有在它运行时说run_game是一个未定义的变量。如果有的话我应该怎么设置?感谢您的答复。 – Alex

+0

这是一个存根,你可以放入任何你的游戏。你可以任意调用它,或者你可以把你的游戏代码放在那里。不过,将它放在方法中会使程序的整体结构更加明显。 – tadman

+0

非常感谢tadman。现在工作正常。感谢您的帮助。 – Alex