Текстовая игра в Ruby - Разработка боевой системы - PullRequest
0 голосов
/ 05 июня 2018

В настоящее время я пытаюсь реализовать боевую систему в текстовой игре, которую я пишу.Игрок будет переходить из комнаты в комнату, а иногда сталкиваться с несколькими противниками.

Я хотел бы:

  • дать игроку старт с максимальным количеством очков жизни и уменьшить его по ходу игры

  • заранее определяют силу (максимальное количество очков жизни) каждого противника

  • позволяет игроку противостоять множеству противников одновременно

Это то, что я имею до сих пор, но мне очень трудно осмыслить взаимодействие между игроком и противниками.Кроме того, как бы я мог противостоять нескольким противникам подряд?

Любые советы очень помогли бы!

Спасибо!

GF

Код:

class Player 
    attr_accessor :hit_points, :attack_power

    def initialize
        @hit_points = MAX_HIT_POINTS
        @attack_power = rand(2 .. 15)
    end 

    def alive?
        @hit_points > 0 
    end 

    def hurt 
        @hit_points -= amount 
    end 

    def print_status
        puts "*" * 80 
        puts "HP: #{@hit_points}/#{MAX_HIT_POINTS}"
        puts "*" * 80 
    end     
 end 

class Opponent
    attr_accessor :hit_points, :attack_power

    def initialize
        @hit_points = MAX_HIT_POINTS
        @attack_power = rand(1 .. 10)
    end 

    def alive?
        @hit_points > 0 
    end 

    def hurt 
        @hit_points -= amount 
    end 

    def interact(player)
        player_damage_done = 0 
        player_damage_taken = 0 
        while player.alive?
            hurt(player.attack_power)
            player_damage_done += player.attack_power
            break unless alive?
            player.hurt(@attack_power)
            player_damage_taken += @attack_power
        end 

        if player.alive?
            print "You took #{player_damage_taken} damage and dealt #       {player_damage_done} damage, killing your opponent."
            print "\n"
            player.addPoints(player_damage_taken + player_damage_done)
        else 
            print "Your opponent was too powerful and you died."
            death 
        end     
    end 
end

1 Ответ

0 голосов
/ 05 июня 2018

У вас, вероятно, должен быть какой-то класс среды, чтобы отслеживать всех ваших персонажей.Это может быть расширено, чтобы разрешить перемещение и т. Д. Нечто сверхпростое может выглядеть так:

class Environment
  def initialize(player, baddies)
    @player = player
    @baddies = baddies
  end

  def play_game
    @baddies.each do |baddie|
      baddie.interact(@player)
    end
  end
end

baddies = 3.times.map do
  Opponent.new
end
Environment.new(Player.new, baddies).play_game

Кроме того, ваш код в представленном виде не будет работать.Ваши hurt методы действуют так, как будто они принимают параметр amount, но вы никогда этого не объявляете;Вы вызываете player.add_points, но не определяете этот метод. Дайте мне знать, если у вас есть другие конкретные вопросы

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