def next_spawn(self):
        """spawn next wave adding dificulty and keeping the game going"""
        self._spawn += 1
        self.hud.spawn = self._spawn

        # lets use fibonacci
        a, b = 0, 1
        for i in range(0, self._spawn):
            a, b = b, a + b
        num_asteroids = a

        asteroids = load.asteroids(
            num_asteroids,
            self.player_ship.position,
            (self.width, self.height),
            batch=self.game_batch)
        self._event_stack_size += len([self.push_handlers(x) for x in asteroids])

        self.physical_objects += asteroids


        self.spawn_condition 
        if self._spawn <= 2:
            self.spawn_condition = num_asteroids
        elif self._spawn >= 3:
            self.spawn_condition = num_asteroids -1
def reset_level(num_lives=3):
    global player_ship, player_lives, game_objects, event_stack_size, level_reached

    # Clear the event stack of any remaining handlers from other levels
    while event_stack_size > 0:
        game_window.pop_handlers()
        event_stack_size -= 1

    for life in player_lives:
        life.delete()

    player_ship = Player(x=resources.WIDTH / 2,
                         y=resources.HEIGHT / 2,
                         batch=main_batch)

    player_lives = load.player_lives(num_lives, batch=main_batch)

    asteroids = load.asteroids(num_asteroids,
                               player_ship.position,
                               batch=main_batch,
                               speed=40 + level_reached * 5)
    level_label.text = f'Level {level_reached + 1}'
    game_objects = [player_ship] + asteroids

    for o in game_objects:
        for handler in o.event_handlers:
            # Player is an event handler so we need to push it onto the event stack
            game_window.push_handlers(handler)
            event_stack_size += 1
Example #3
0
def reset_level(num_lives=2):
    global player_ship, player_lives, game_objects, event_stack_size
    
    # 清除事件栈
    while event_stack_size > 0:
        game_window.pop_handlers()
        event_stack_size -= 1
    
    for life in player_lives:
        life.delete()
        
    # 初始化飞船
    player_ship = player.Player(x=400, y=300, batch=main_batch)
    
    # 初始化飞船生命
    player_lives = load.player_lives(num_lives, batch=main_batch)
    
    # 初始化小行星
    asteroids = load.asteroids(num_asteroids, player_ship.position, batch=main_batch)
    
    # 保存所有对象
    game_objects = [player_ship] + asteroids
    
    # 添加所有对象的事件到游戏事件栈中
    for obj in game_objects:
        for handler in obj.event_handlers:
            game_window.push_handlers(handler)
            event_stack_size += 1
def reset_level():
    global player_ship, game_objects, event_stack_size

    # clear the event handler stack
    while event_stack_size > 0:
        game_window.pop_handlers()
        event_stack_size -= 1

    # initialize the player ship if it doesn't already exist in the level
    if player_ship is None:
        player_ship = player.Player(x=width // 2,
                                    y=height // 2,
                                    batch=main_batch)

    # adding asteroids makes the game less boring
    asteroids = load.asteroids(current_level, player_ship.position, main_batch)

    if not game_objects:
        game_objects = [player_ship]
    game_objects = game_objects + asteroids  # keeps bullets flying between levels

    # add event handlers
    for obj in game_objects:
        for handler in obj.event_handlers:
            game_window.push_handlers(
                handler)  # tells pyglet who responds to events
            event_stack_size += 1

    level_label.text = 'Level: {0}'.format(current_level)
Example #5
0
def reset_level(num_lives=parameters.num_lives):
    global player_ship, player_lives, game_objects, event_stack_size, level, num_asteroids

    # Clear the event stack of any remaining handlers from other levels
    while event_stack_size > 0:
        game_window.pop_handlers()
        event_stack_size -= 1

    # Initialize the player sprite
    player_ship = player.Player(x=parameters.half_width,
                                y=parameters.half_height,
                                batch=main_batch)

    # Make a number of sprites to represent remaining lives
    player_lives = load.player_lives(num_lives, batch=main_batch)

    # Make some asteroids so we have something to shoot at
    asteroids = load.asteroids(num_asteroids,
                               player_ship.position,
                               batch=main_batch)

    # Store all objects that update each frame in a list
    game_objects = [player_ship] + asteroids

    # Add any specified event handlers to the event handler stack
    for obj in game_objects:
        for handler in obj.event_handlers:
            game_window.push_handlers(handler)
            event_stack_size += 1

    level_label.text = f"Level: {level}"
Example #6
0
def reset_level(num_lives=2):
    global player_ship, player_lives, game_objects, event_stack_size

    # Clear the event stack of any remaining handlers from other levels
    while event_stack_size > 0:
        game_window.pop_handlers()
        event_stack_size -= 1

    for life in player_lives:
        life.delete()

    # Initialize the player sprite
    player_ship = player.Player(x=400, y=300, batch=main_batch)

    # Make three sprites to represent remaining lives
    player_lives = load.player_lives(num_lives, main_batch)

    # Make some asteroids so we have something to shoot at
    asteroids = load.asteroids(num_asteroids, player_ship.position, main_batch)

    # Store all objects that update each frame in a list
    game_objects = [player_ship] + asteroids

    # Add any specified event handlers to the event handler stack
    for obj in game_objects:
        for handler in obj.event_handlers:
            game_window.push_handlers(handler)
            event_stack_size += 1
Example #7
0
def reset_level(num_lives=2):
    global player_ship, player_lives, game_objects, event_stack_size

    # 清空事件栈
    while event_stack_size > 0:
        game_window.pop_handlers()
        event_stack_size -= 1

    for life in player_lives:
        life.delete()

    # 创建Player的实例
    player_ship = player.Player(x=400, y=300, batch=main_batch)

    # 加载小飞船图标
    player_lives = load.player_lives(num_lives, main_batch)

    # 加载多个小行星
    asteroids = load.asteroids(num_asteroids, player_ship.position, main_batch)

    # 加载多个陨石
    meteorites = load.meteorites(num_meteorites, player_ship.position, main_batch)

    # 为了调用每一个物体的update函数,需要一个列表来存放这些物体。
    game_objects = [player_ship] + asteroids + meteorites

    '''
    告诉pyglet 哪些实例是事件句柄(event handler)
    用game_window.push_handlers()函数把它压入事件栈中
    '''
    for obj in game_objects:
        for handler in obj.event_handlers:
            game_window.push_handlers(handler)
            event_stack_size += 1
Example #8
0
def reset_level(num_lives=2):
    global player_ship, player_lives, game_objects, event_stack_size
    
    # Clear the event stack of any remaining handlers from other levels
    while event_stack_size > 0:
        game_window.pop_handlers()
        event_stack_size -= 1
    
    for life in player_lives:
        life.delete()
    
    # Initialize the player sprite
    player_ship = player.Player(x=400, y=300, batch=main_batch)

    # Make three sprites to represent remaining lives
    player_lives = load.player_lives(num_lives, main_batch)
    
    # Make some asteroids so we have something to shoot at 
    asteroids = load.asteroids(num_asteroids, player_ship.position, main_batch)

    # Store all objects that update each frame in a list
    game_objects = [player_ship] + asteroids

    # Add any specified event handlers to the event handler stack
    for obj in game_objects:
        for handler in obj.event_handlers:
            game_window.push_handlers(handler)
            event_stack_size += 1
Example #9
0
def create_objects():
    player_ship = player.Player(x=window_width//2, y=window_height//2, batch=main_batch)
    game_window.push_handlers(player_ship)
    game_window.push_handlers(player_ship.key_handler)

    asteroids = load.asteroids(3, player_ship.position, batch=main_batch)

    game_objects = [player_ship] + asteroids

    return player_ship, game_objects
Example #10
0
def update(dt):
    global score, level
    # checa por colisoes
    for i in range(len(objects)):
        for j in range(i + 1, len(objects)):
            obj_1 = objects[i]
            obj_2 = objects[j]
            if not obj_1.dead and not obj_2.dead:
                if obj_1.collides_with(obj_2):
                    p1 = obj_1.handle_collision_with(obj_2)
                    p2 = obj_2.handle_collision_with(obj_1)

    to_add = []
    asteroids_count = 0
    player_dead = False
    points = 0

    # adciona novos objetos ao jogo (tiros e asteroids)
    for obj in objects:
        obj.update(dt)
        to_add.extend(obj.new_objects)
        obj.new_objects = []

        if isinstance(obj, game_objects.Asteroid):
            asteroids_count += 1

    # remove objetos mortos
    for to_remove in [obj for obj in objects if obj.dead]:
        if isinstance(to_remove, game_objects.Player):
            player_dead = True
        if isinstance(to_remove, game_objects.Asteroid):
            points += to_remove.points

        to_add.extend(obj.new_objects)
        to_remove.delete()
        objects.remove(to_remove)

    objects.extend(to_add)

    # atuliza o estado do jogo
    if points > 0 and not player_dead:
        score += points
        score_label.text = "Nvl: {} Pontos {}".format(level, score)
    if player_dead:
        menu(dead=True)
    elif asteroids_count == 0:
        level += 1
        score_label.text = "Nvl: {} Pontos: {}".format(level, score)
        asteroids = load.asteroids(n_asteroids + int(2 * log(level, 2)),
                                   player_ship.position, window.width,
                                   window.height, main_batch)
        objects.extend(asteroids)
Example #11
0
def init():
    global objects, score, lives, player_lives, level

    score = 0
    level = 1
    lives = max_lives

    asteroids = load.asteroids(n_asteroids, player_position, window.width,
                               window.height, main_batch)
    player_lives = load.player_lives(lives, width, height, main_batch)

    objects = asteroids
    menu()
Example #12
0
def refresh(keep_values):
    """
    Refreshes the game when either the player has lost or the level is completed. This is
    illustrated by all asteroids having been destroyed. The *args are used to transfer
    characteristics of the last player_ship onto the new one, such as the lives remaining
    and the player's score.

    Inputs
    ======================================================================================
    *args           Boolean; qualities to move over to the new character. Currently
                    only player_lives and player_score are supported.

    Outputs
    ======================================================================================
    None
    """
    global asteroids, game_objects, player_ship, lives
    game_objects.clear()

    # All characteristics of the player_ship
    player_ship.visible = True
    player_ship.dead = False
    player_ship.x = 1000 / 2
    player_ship.velocity_x = 0
    player_ship.y = 800 / 2
    player_ship.velocity_y = 0
    if keep_values:
        pass
    else:
        player_ship.lives = 3
        player_ship.score = 0
        player_ship.level = 1

    # Redrawing the various indicators
    lives.clear()
    lives = load.player_lives(player_ship.lives, main_batch)
    score_label.text = 'Score: %d' % player_ship.score
    level_label.text = 'Level: %d' % player_ship.level

    # Respawning the asteroids
    asteroids = load.asteroids(max(player_ship.level, 3), player_ship.position,
                               main_batch)

    # Re-establishin the new game_objects
    game_objects = [player_ship] + asteroids
Example #13
0
def reset_game():
	global player_ship, game_objects, asteroids_present, event_stack_size
	
	while event_stack_size > 0:
		game_window.pop_handlers()
		event_stack_size -= 1
	
	player_ship = player.Player(x=400, y=300, batch=main_batch)
	asteroids = load.asteroids(num_asteroids, player_ship.position, batch=main_batch)
	asteroids_present += num_asteroids
	asteroids_label.text = "Asteroids: " + str(asteroids_present)
	game_objects = [player_ship] + asteroids
	game_over_label.y = -20
	
	for obj in game_objects:
		for handler in obj.event_handlers:
			game_window.push_handlers(handler)
			event_stack_size += 1
Example #14
0
def update(dt):
	global asteroids_present

	player_dead = False

	for i in xrange(len(game_objects)):
		for j in xrange(i+1, len(game_objects)):
			obj_1 = game_objects[i]
			obj_2 = game_objects[j]
			
			if not obj_1.dead and not obj_2.dead:
				if obj_1.collides_with(obj_2):
					obj_1.handle_collision_with(obj_2)
					obj_2.handle_collision_with(obj_1)
					
	to_add = []
					
	for obj in game_objects:
		obj.update(dt)
		while asteroids_present < 3:
			new_asteroids = load.asteroids(randint(1,4), player_ship.position, batch=main_batch)
			to_add.extend(new_asteroids)
			asteroids_present += len(to_add)
			asteroids_label.text = "Asteroids: " + str(asteroids_present)
		to_add.extend(obj.new_objects)
		obj.new_objects = []
					
	for to_remove in [obj for obj in game_objects if obj.dead]:
		if to_remove == player_ship:
			player_dead = True
			game_over_label.y = 534
			asteroids_present = 0
		to_add.extend(obj.new_objects)
		to_remove.delete()
		game_objects.remove(to_remove)	
	
	if player_dead:
		reset_game()
	
	game_objects.extend(to_add)
Example #15
0
# Set resources path
pyglet.resource.path = ['../resources']
# Not sure what this does right now
pyglet.resource.reindex()

# Initializes 800x600 windows
game_window = pyglet.window.Window(800, 600)

score_label = pyglet.text.Label(text="Score: 0", x=10, y=575)
level_label = pyglet.text.Label(text="Ben's Asteroid Game",
                                      x=400, y=575, anchor_x='center')

player_ship = pyglet.sprite.Sprite(img=resources.player_image, x=400, y=300)

asteroids = load.asteroids(3, player_ship.position)

@game_window.event
def on_draw():
    game_window.clear()

    level_label.draw()
    score_label.draw()
    player_ship.draw()
    for asteroid in asteroids:
        asteroid.draw()

    
        

from game import load
from game.player import Player

game_window = pyglet.window.Window(800, 600, resizable=True)
UI_batch = pyglet.graphics.Batch()
main_batch = pyglet.graphics.Batch()

score_label = pyglet.text.Label("Score: 0", x=10, y=575, batch=UI_batch)
level_label = pyglet.text.Label("Learning Pyglet :D",
                                x=400, y=575, anchor_x='center',
                                batch=UI_batch)

player_ship = Player(
    img=resources.player_image, x=400, y=300, batch=main_batch)
player_lives = load.player_lives(3, UI_batch)
asteroids = load.asteroids(3, player_ship.position, main_batch)

game_objects = [player_ship] + asteroids


def update(dt):
    to_add = []

    for obj in game_objects:
        obj.update(dt)

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

        if obj.dead:
            obj.delete()
Example #17
0
# Set up a window
game_window = pyglet.window.Window(800, 600)

# Set up the two top labels
score_label = pyglet.text.Label(text="Score: 0", x=10, y=575)
level_label = pyglet.text.Label(text="Version 1: Static Graphics",
                                x=400,
                                y=575,
                                anchor_x='center')

# Initialize the player sprite
player_ship = pyglet.sprite.Sprite(img=resources.player_image, x=400, y=300)

# Make three asteroids so we have something to shoot at
asteroids = load.asteroids(3, player_ship.position)


@game_window.event
def on_draw():
    game_window.clear()

    player_ship.draw()
    for asteroid in asteroids:
        asteroid.draw()

    level_label.draw()
    score_label.draw()


if __name__ == "__main__":
Example #18
0
def test_asteroids__20_no_collosions():
    suts = load.asteroids(3, (100, 100))

    for sut in suts:
        assert utils.distance(sut.position, (100, 100)) >= 100
Example #19
0
def test_asteroids__3():
    suts = load.asteroids(3, (100, 100))

    assert len(suts) == 3
Example #20
0
# Set up the two top labels
score_label = pyglet.text.Label(text="Score: 0", x=10, y=575, batch=main_batch)
level_label = pyglet.text.Label(text="Version 3: Basic Collision",
                                x=400,
                                y=575,
                                anchor_x='center',
                                batch=main_batch)

# Initialize the player sprite
player_ship = player.Player(x=400, y=300, batch=main_batch)

# Make three sprites to represent remaining lives
player_lives = load.player_lives(2, main_batch)

# Make three asteroids so we have something to shoot at
asteroids = load.asteroids(3, player_ship.position, main_batch)

# Store all objects that update each frame in a list
game_objects = [player_ship] + asteroids

# Tell the main window that the player object responds to events
game_window.push_handlers(player_ship.key_handler)


@game_window.event
def on_draw():
    game_window.clear()
    main_batch.draw()


def update(dt):
Example #21
0
import pyglet
from game import resources
from game import load


game_window = pyglet.window.Window(800, 600)
player_ship = pyglet.sprite.Sprite(img=resources.player_image, x=400, y=300)
asteroids = load.asteroids(10)


@game_window.event
def on_draw():
    game_window.clear()
    player_ship.draw()
    for asteroid in asteroids:
        asteroid.draw()


if __name__ == '__main__':
    pyglet.app.run()