class Game(arcade.Window): def __init__(self): super().__init__(title="Game", width=15 * 64, height=9 * 64, fullscreen=False) # Load background image self.background_sprite = arcade.Sprite("assets/background.png", center_x=self.width / 2, center_y=self.height / 2) self.static_sprites = arcade.SpriteList(is_static=True) self.static_sprites.append(self.background_sprite) # Create game objects self.test_gun = Gun(300, 200) self.bullets = [] self.player = Player(50, 50) def on_key_press(self, symbol, modifiers): if symbol == arcade.key.ESCAPE: arcade.close_window() if symbol == arcade.key.SPACE: self.bullets.append(self.test_gun.fire()) # Start moving the player in the direction indicated if symbol == arcade.key.W: self.player.move_up(4) if symbol == arcade.key.A: self.player.move_left(4) if symbol == arcade.key.S: self.player.move_down(4) if symbol == arcade.key.D: self.player.move_right(4) def on_key_release(self, symbol, modifiers): # Stop moving the player if the correct key is released if symbol == arcade.key.W and self.player.direction == "up": self.player.stop() if symbol == arcade.key.A and self.player.direction == "left": self.player.stop() if symbol == arcade.key.S and self.player.direction == "down": self.player.stop() if symbol == arcade.key.D and self.player.direction == "right": self.player.stop() def on_draw(self): arcade.start_render() # Draw backgroud and all non-moving sprites self.static_sprites.draw() # Draw game objects self.player.draw() self.test_gun.draw() for bullet in self.bullets: bullet.draw() def on_update(self, deltatime): # Update game objects for bullet in self.bullets: bullet.update() self.test_gun.update(deltatime) self.player.update() self.player.update_animation(deltatime)
class Fleet: def __init__(self, setting: settings, shoot_sound): self.shoot_sound = shoot_sound self.fleet = list() self.move_speed = setting.alien_speed self.creep_speed = setting.creep_speed self.gun = Gun(setting) self.setting = setting self.saucer = Saucer(setting, Vector2(-64, 64 * 2)) for i in range(10): self.fleet.append(Squid(setting, pygame.Vector2(70 * i, 70))) for i in range(10): self.fleet.append(Squid(setting, pygame.Vector2(70 * i, 70 * 2))) for i in range(10): self.fleet.append(Jelly(setting, pygame.Vector2(70 * i, 70 * 3))) for i in range(10): self.fleet.append(Jelly(setting, pygame.Vector2(70 * i, 70 * 4))) for i in range(10): self.fleet.append(Crab(setting, pygame.Vector2(70 * i, 70 * 5))) for i in range(10): self.fleet.append(Crab(setting, pygame.Vector2(70 * i, 70 * 6))) def draw(self, surface, frame): for alien in self.fleet: alien.draw(surface, frame) self.gun.draw(surface) if self.saucer.spawned and not self.saucer.despawned: self.saucer.draw(surface, frame) def move(self): for alien in self.fleet: alien.move(self.move_speed) if check_shoot(): self.shoot_sound.play() self.gun.shoot( self.setting, Vector2( alien.position.x + alien.sprite_sheet.cell_width / 2, alien.position.y + alien.sprite_sheet.cell_height), 'down') for bullet in self.gun.bullet_list: bullet.move() self.gun.out_of_bound() if self.saucer.spawned and not self.saucer.despawned: self.saucer.move() else: self.saucer.start_move() def creep(self): for alien in self.fleet: alien.creep(self.creep_speed) def out_of_bound(self, setting: settings): hit = False for alien in self.fleet: if alien.rect.left < 0: hit = True if alien.rect.right > setting.screen_width: hit = True if hit: self.move_speed = self.move_speed * -1 self.creep() def speedup(self): self.move_speed *= self.setting.speedup_scale