我正在尝试创造一种“tamagoshi”之类的游戏来练习红宝石。我希望程序等待用户输入做某事,但不时(现在我使用10秒直到我做对了)我想要一种方法发生(宠物失去能量,随着时间变得更加悲伤) 。但是如果用户输入动作,我希望计时器停止重置。
我遇到了一些问题,尝试了不同的事情,现在,我只能做一个动作。之后,没有任何反应。我想在做“.join”后我没有创建一个新线程,但我不确定。
我非常欢迎所有关于其余代码的评论家在我开始学习ruby时提高我的技能和知识。
dog = Dog.new 'Yoshi'
def play pet
user_action = nil
timer_thread = Thread.new do
while !user_action
(1..10).each do |number|
sleep(1)
puts number
end
pet.time_goes_on
user_action = nil
end
end
user_action = gets.chomp
case user_action
when "play"
pet.play_fetch
when "eat"
pet.feed
when "train"
pet.training
when "sleep"
pet.sleep
when "walk"
pet.take_for_a_walk
else
puts "invalid command, try again"
play(pet)
end
timer_thread.join
end
while dog.is_alive
play(dog)
end
这是repl.it的完整代码: tama'yoshi'
答案 0 :(得分:0)
我想我找到了解决方案!
dog = Dog.new 'Yoshi'
def play pet
while pet.is_alive
user_action = nil
timer_thread = Thread.new do
while user_action == nil
(1..10).each do |number|
sleep(1)
number
if number == 10
pet.time_goes_on
end
break if (user_action != nil)
end
end
end
user_action = gets.chomp
case user_action
when "play"
pet.play_fetch
when "eat"
pet.feed
when "train"
pet.training
when "sleep"
pet.sleep
when "walk"
pet.take_for_a_walk
else
puts "invalid command, try again"
play(pet)
end
timer_thread.join
end
end
play(dog)