2016-11-28 50 views
0

我正在尝试创建一个像游戏一样的“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

请把代码放在问题中。外部链接需要额外的工作才能打开,有些人不愿点击任意的非现场链接,其内容可能会过期。 – tadman

+0

好的。我不想在这里发布这么大的代码块,所以如果有人想要看到Dog对象,只需点击我保存该项目的链接repl.it –

+0

最好发布最少量的代码你的问题,并允许其他人重现它。你在这里有什么是几乎太多,但很好。你真正需要的是一个事件循环,你可以在等待用户输入时旋转。这是大多数游戏的基本核心。 – tadman

回答

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)