(Ruby), а l oop останавливает выполнение моего кода - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь запустить следующий код (моей целью было создать «игру», в которой я создаю два объекта и заставляю их «сражаться» друг с другом):

#player definition
Player=Struct.new(:health, :dmg)
active_player=Player.new(10, 2)

puts "test"

#monster definition
class Monster
    attr_accessor :health, :damage
    def initialize(health, damage)
        @health=health
        @damage=damage
    end
end
big_spider=Monster.new(4, 1)


player_win=false
monster_win=false

#the fight itself
while (!player_win) or (!monster_win)
    big_spider.health-=active_player.dmg
    active_player.health-=big_spider.damage
    if big_spider.health<=0
        player_win=true
    elsif active_player.health<=0
        monster_win=true
    end
end

#prints out who wins
case monster_win
    when true
        puts "the monster wins"
    when false
        puts "the player wins"
    else
        puts "error"
end

gets.chomp #is there to ensure that the program doesn't exit immediately after execution(yes i have tried removing it)

Когда я пытаюсь запустите этот код (из Windows 10 PowerShell), он распечатает "test", а затем остановится, как если бы он запрашивал ввод, однако, когда я пытаюсь ввести что-либо, оно не появляется на экране, и я не могу реагировать с PowerShell любым другим способом, кроме закрытия / минимизации (я даже пытаюсь нажать Ctrl + D , как при выходе из irb). Я пробовал запускать код многими другими способами (через Notepad ++, из файлового проводника и через cmd.exe), но все равно столкнулся с той же проблемой. Когда я закомментирую строки из комментария «сам бой» до конца кода, программа выводит «тест», затем запрашивает ввод и прекращает выполнение. Я действительно нигде не нашел никого с подобной проблемой.

1 Ответ

3 голосов
/ 10 июля 2020

Это l oop вращается, пока ОБЕИ не выиграют. С вашим текущим кодом это невозможно. Вы хотите изменить его на что-то вроде

while !player_win && !monster_win

Лично я предпочитаю писать такие циклы, как это:

loop do
  break if player_win
  break if monster_win
  ...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...