Example #1
0
class Window(pyglet.window.Window):
  player = None
  enemy_qty = 100
  enemy = []
  label_mouse_xy = None
  mouse_x = 0
  mouse_y = 0

  # Class initializer
  def __init__(self, size_x, size_y, resize):
    super(Window, self).__init__(resizable = resize, visible = True, vsync = False)
    self.set_size(size_x, size_y)
    self.set_caption('SpaceCow')
    self.maximize()

    self.player = Player((self.width / 2), (self.height / 2), 0, "resources/ship.png")

    for enemies in range(self.enemy_qty):
      self.enemy.append(Enemy((self.width / 2), (self.height / 2), 0, "resources/cow.png"))

    for e in self.enemy:
      e.x_pos = randint(0, self.width)
      e.y_pos = randint(0, self.height)
      e.rotation = randint(0, 360)

    self.player.x_pos = self.width / 2
    self.player.y_pos = self.height / 2
    self.label_mouse_xy = pyglet.text.Label("Mouse Location")

    self.play_bg_music()

  def play_bg_music(self):
    bg_music = pyglet.media.Player()
    music = pyglet.media.load('resources/635964_A-Heros-Destiny.mp3')
    
    bg_music.queue(music)

    bg_music.eos_action = pyglet.media.Player.EOS_LOOP

    bg_music.play()

  def follow_mouse(self, player, timer, speed):
    player.c_val = sqrt((self.mouse_x - player.x_pos) ** 2 + \
      (self.mouse_y - player.y_pos) ** 2)
    player.x_pos -= ((player.x_pos - self.mouse_x) / player.c_val * speed * timer)
    player.y_pos -= ((player.y_pos - self.mouse_y) / player.c_val * speed * timer)
    delta_x = player.x_pos - self.mouse_x
    delta_y = player.y_pos - self.mouse_y

    if player.c_val > 1.0:
      player.rotation = atan2(delta_y, delta_x) / pi * 180 * -1

  def follow(self, enemy, timer, speed):
    enemy.c_val = sqrt((enemy.x_pos - self.player.x_pos) ** 2 + \
      (enemy.y_pos - self.player.y_pos) ** 2)
    enemy.x_pos -= ((enemy.x_pos - self.player.x_pos) / enemy.c_val * speed * timer)
    enemy.y_pos -= ((enemy.y_pos - self.player.y_pos) / enemy.c_val * speed * timer)
    delta_x =  enemy.x_pos - self.player.x_pos
    delta_y =  enemy.y_pos - self.player.y_pos

    if enemy.c_val > 1.0:
      enemy.rotation = atan2(delta_y, delta_x) / pi * 180 * -1

  def update(self, dt):
    self.label_mouse_xy.text = \
      "mouse_x: %d mouse_y: %d | player_x: %d player_y: %d | delta: %f | rotation: %f" % \
      (self.mouse_x,
        self.mouse_y,
        self.player.x_pos,
        self.player.y_pos,
        self.player.c_val,
        self.player.rotation)
    self.follow_mouse(self.player, dt, self.player.speed)

    for e in self.enemy:
      self.follow(e, dt, 10)

  def on_draw(self):
    self.clear()
    self.player.draw_player()

    for e in self.enemy:
      e.draw_player()

    self.label_mouse_xy.draw()

  def on_mouse_motion(self, x, y, dx, dy):
    self.label_mouse_xy.x = 10.0
    self.label_mouse_xy.y = 10.0
    self.mouse_x = x
    self.mouse_y = y