我正在用Ruby写一个非常简单的地牢冒险游戏(练习newb)。我想通篇通过名字来称呼球员,所以自然而然地我想确保,如果球员告诉我他们不能这么做,然后提示他们重试,那么将一个空名传递给我的球员初始化方法。
class Player
attr_accessor :name, :location
def initialize(name)
if name.empty? == false
@name = name
else
puts "You did not enter your name! Try again, please"
load 'game.rb'
end
end
end
文件名是“ game.rb”,所以每次玩家决定不输入名字时,我基本上都是在这里重新加载整个文件。这是愚蠢的...
它可以工作,但是以最坏的方式...我必须对离开程序的位置“保持精明”,以便使玩家免受这样的事实的困扰:我基本上是将所有人都投入了《盗梦空间》,然后在每次玩家开始新游戏而忽略输入他们的名字时的游戏。例如,如果他们因为不专心而没有3次注意到需要输入姓名,那么我实际上就运行了4场比赛(原始比赛,而3场比赛未输入姓名提示),他们d或者当他们厌倦了玩游戏时就必须结束每个游戏,否则我必须从一个关键词开始彻底退出整个游戏。
我的问题是:有没有办法写我的错误“您没有输入...”,退出当前游戏会话,然后重新启动游戏?我真正想做的就是确保不将空字符串传递给我的initialize方法,这可能是通过引发异常,然后在没有脚本进行游戏的情况下从脚本的开头重新开始。
以下是完整代码的链接,以获取更多见解:http : //repl.it/8QY
不了解整个游戏结构就很难知道,但是您的主文件可能看起来像
game_initialized = false
while ! game_initialized
begin
# here, initialize the game, including initialization
game_initialized = true
rescue NoNameError
# do nothing, but it will restart the game
end
end
# now play the game
然后在您的构造函数中,添加
class NoNameError < Exception
end
class Player
attr_accessor :name, :location
def initialize(name)
if name.empty? == false
@name = name
else
puts "You did not enter your name! Try again, please"
raise NoNameError
end
end
end
那应该让你走。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句