Exemplo n.º 1
0
    def create_game_objects(self, game_batch):
        player_ship = self.spawn_new_player_ship(game_batch)

        asteroids = load.asteroids(2 + self.level, player_ship.position, batch=game_batch)

        game_objects = [player_ship] + asteroids

        return game_objects, player_ship, asteroids
Exemplo n.º 2
0
    def create_main_menu(self, main_menu_batch):
        asteroids_game_label = utils.create_title_label(
            'Asteroids', main_menu_batch)
        menu_asteroids = load.asteroids(
            25, random_sizes=True, batch=main_menu_batch)        

        menu_label_texts = ['New game', 'Top scores', 'Exit']

        return (
            utils.create_menu_labels(menu_label_texts, main_menu_batch), 
            menu_asteroids,
        )
Exemplo n.º 3
0
    def update(self, dt):
        if self.game_state == AsteroidGameStates.MAIN_MENU:
            for obj in self.main_menu_asteroids:
                obj.update(dt)

        elif self.game_state == AsteroidGameStates.PLAYING:
            # throw the key states to the player_ship and update it
            self.player_ship.update(dt, self.key_handler)

            # Check collisions
            for i in range(len(self.game_objects)):
                for j in range(i+1, len(self.game_objects)):
                    obj_i = self.game_objects[i]
                    obj_j = self.game_objects[j]

                    if not obj_i.dead and not obj_j.dead:
                        if obj_i.collides_with(obj_j):
                            obj_i.handle_collision_with(obj_j)
                            obj_j.handle_collision_with(obj_i)

            # update other game objects 
            # and add new objects if they have been spawned
            to_add = []
            for obj in self.game_objects:
                if not obj == self.player_ship:
                    obj.update(dt)

                if obj in self.asteroids:
                    self.asteroids.extend(obj.new_objects)

                to_add.extend(obj.new_objects)
                obj.new_objects = []

            # Remove dead objects from the scene
            for to_remove in [obj for obj in self.game_objects if obj.dead]:
                is_bullet = isinstance(to_remove, Bullet)
                if not to_remove == self.player_ship and not is_bullet:
                    self.score += 1 / to_remove.scale

                to_remove.delete()
                self.game_objects.remove(to_remove)
                if to_remove in self.asteroids:
                    self.asteroids.remove(to_remove)

            # Update score label
            self.score_label.text = 'Score: %d' % self.score

            # Add the new objects to the scene now
            self.game_objects.extend(to_add)

            # You are dead, but you still have some lives left
            if not self.player_ship in self.game_objects and len(self.player_lives) > 1:
                self.player_lives[-1].delete()
                self.player_ship = self.spawn_new_player_ship(self.game_batch)
                self.game_objects.append(self.player_ship)
                self.player_lives.remove(self.player_lives[-1])

            # HAHAHA You suck, you couldn't even kill some lame asteroids
            # Horrible astronaut pilot skills
            elif not self.player_ship in self.game_objects and len(self.player_lives) == 1:
                self.game_state = AsteroidGameStates.GAME_OVER
                self.game_over_score_label.text = self.score_label.text

            # Level complete!
            if not len(self.asteroids) and self.game_state == AsteroidGameStates.PLAYING:
                self.level += 1
                self.level_label.text = 'Level %d' % self.level
                self.asteroids = load.asteroids(
                        2 + self.level, 
                        self.player_ship.position, 
                        batch=self.game_batch,
                    )
                self.game_objects.extend(self.asteroids)
                    
                self.player_lives = self.reset_player_lives(self.game_batch)