在ruby

时间:2016-11-28 16:01:54

标签: ruby

我正在尝试创造一种“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'

1 个答案:

答案 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)