gpt4 book ai didi

ruby - 在内部重启 Ruby 程序

转载 作者:数据小太阳 更新时间:2023-10-29 08:26:54 25 4
gpt4 key购买 nike

我正在用 Ruby 编写一个非常简单的地牢冒险游戏(新手练习)。我想自始至终都用名字称呼玩家,所以我自然要确保如果玩家向我的 Player initialize 方法传递一个空名称,如果告诉他们他们不能这样做,然后提示他们重试。

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”,所以每当玩家决定不输入他们的名字时,我基本上都会在此处重新加载整个文件。这是愚蠢的...

它有效,但以最糟糕的方式......我必须“聪明”地知道我退出程序的位置,这样玩家就不会受到我基本上对每个人都进行所有 Inception 并启动一个每次玩家开始新游戏而忘记输入他们的名字时,游戏中的游戏。例如,如果他们 3 次没有注意到他们需要输入他们的名字,因为他们没有注意,我实际上运行了 4 个游戏(原始的,以及 3 个没有输入他们的名字的提示)并且他们'我要么需要在他们厌倦了玩这些游戏时就结束它们,要么我不得不基本上用一个关键字艰难地退出整个游戏。

我的问题是:有没有办法写出我的错误“你没有进入...”退出当前游戏 session ,然后重新启动游戏?我真正想做的是确保空字符串不会传递到我的初始化方法,可能是通过引发异常,然后在脚本开头重新开始,而不是游戏中的游戏。

这里是完整代码的链接以获得更多信息: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

这应该让你继续。

关于ruby - 在内部重启 Ruby 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28003948/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com