コード例 #1
0
ファイル: game.py プロジェクト: tt-n-walters/tt19-pytue-game
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)
コード例 #2
0
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