Беда, заставляющая случайных нерестящихся врагов стрелять пулями - PullRequest
0 голосов
/ 05 июля 2019

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

Я создал класс Bullet и класс Enemy.Я использую attr_reader, чтобы найти врагов и вызвать координаты x и y в новом методе Bullet, но он не может найти, где находится враг.

require 'gosu'
require_relative 'player'
require_relative 'enemy'
require_relative 'bullet'


class Proto < Gosu::Window
  WIDTH = 1000
  HEIGHT = 800
  ENEMY_FREQUENCY = 0.03
  attr_reader :x, :y, :radius, :angle
  def initialize
    super(WIDTH,HEIGHT)
    self.caption = "Proto"
    @player = Player.new(self)
    @enemies = []
    @bullets = []
    @framecounter = 0

  end

def update
  @framecounter += 1
@player.turn_left if button_down?(Gosu::KbLeft)
@player.turn_right if  button_down?(Gosu::KbRight)
@player.accelerate if button_down?(Gosu::KbUp)
@player.backward if  button_down?(Gosu::KbDown)
@player.move
   if rand < ENEMY_FREQUENCY
      @enemies.push Enemy.new(self)
   end
   @enemies.each do |enemy|
      enemy.move
      if @framecounter % 60 == 0 && @enemies[3]
        @bullets.push Bullet.new(self, @enemy.x, @enemy.y, @enemy.angle)
      end
   end
   @bullets.each do |bullet|
     bullet.move
   end
end

    def draw
       @player.draw
       @enemies.each  do |enemy|
             enemy.draw
       end
       @bullets.each do |bullet|
             bullet.draw
       end
    end
end

window = Proto.new
window.show




class Enemy
  SPEED = 1
  attr_reader :x, :y, :radius, :angle

  def initialize(window)
    @radius = 20
    @x = rand(window.width - 2 * @radius) + @radius
    @y = 0

    @image = Gosu::Image.new('ima/tile000.png')
  end

  def move
    @y += SPEED
  end

  def draw
    @image.draw(@x - @radius, @y - @radius, 2)
  end
end







require_relative 'enemy'

class Bullet
      SPEED = 5
  def initialize(window, x, y, angle)
    @x = x
    @y = y
    @direction = angle
    @image = Gosu::Image.new('ima/tile000.png')
    @imaget = Gosu::Image.new('ima/tile000.png')
    @radius = 3
    @window = window
  end

  def move
      @y += SPEED
  end

  def draw
    @image.draw(@x - @radius, @y - @radius, 1)
    @imaget.draw(@enemy.x - radius, @enemy.y - @radius, 1)
  end
end

Я ожидаю, что случайные враги будут стрелять пулями.

1 Ответ

1 голос
/ 06 июля 2019

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

@enemies.each do |enemy|
  @enemy.draw
end

вместо

@enemies.each do |enemy|
  enemy.draw
end
...