Я пишу очень простую приключенческую игру в подземелье на Ruby (практика для новичка). Я хочу обращаться к игроку по имени повсюду, поэтому, естественно, я хочу быть уверенным, что если игрок передаст пустое имя моему методу инициализации игрока, if сообщит им, что они не могут этого сделать, а затем предложит повторить попытку.
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 для всех и запускаю игру в game каждый раз, когда игрок начинает новую игру и не вводит свое имя. Например, если они не замечают 3 раза, что им нужно ввести свое имя, потому что они не обращают внимания, у меня фактически запущено 4 игры (оригинал и 3, вызванные не вводом их имени), и они d либо нужно заканчивать каждую из этих игр, когда они устанут играть, либо мне пришлось резко выйти из всего этого по одному ключевому слову.
У меня такой вопрос: есть ли способ написать мою ошибку "Вы не вошли..." выйти из текущей игровой сессии и перезапустить игру? Все, что я действительно хочу сделать, это гарантировать, что пустая строка не будет передана моему методу инициализации, возможно, путем возбуждения исключения, а затем начать с начала сценария без игры внутри игры.
Вот ссылка на полный код для получения дополнительной информации: http://repl.it/8QY