Esempio n. 1
0
font = pygame.font.SysFont('comicsans', 30, True)
Rab = Player(300, 410, 64, 64)
goblin = Enemy(100, 410, 64, 64, 450)
shoot_loop = 0
bullets = []

running = True
while running:
    clock.tick(27)

    if goblin.visible:
        if Rab.hitbox[1] < goblin.hitbox[1] + goblin.hitbox[3] and Rab.hitbox[
                1] + Rab.hitbox[3] > goblin.hitbox[1]:
            if Rab.hitbox[0] + Rab.hitbox[2] > goblin.hitbox[0] and Rab.hitbox[
                    0] < goblin.hitbox[0] + goblin.hitbox[2]:
                Rab.hit(window)
                score -= 5

    if shoot_loop > 0:
        shoot_loop += 1
    if shoot_loop > 3:
        shoot_loop = 0

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    for bullet in bullets:
        if goblin.visible:
            if bullet.y - bullet.radius < goblin.hitbox[1] + goblin.hitbox[
                    3] and bullet.y + bullet.radius > goblin.hitbox[1]:
Esempio n. 2
0
def start(display, settings):
    """This is the main body of the game logic"""

    counter = 0
    boss_alive = False

    if settings.settings["Music"] == "On":
        pygame.mixer.music.load('assets/main_game.wav')
        pygame.mixer.music.play(-1)
    player_img, enemy_img, capital_ship_img = "assets/player_ship.png", "assets/alienship.png", "assets/capital_ship.png"
    bullet, fired_bullets, on_screen_enemies, turn_timer = False, [], 1, 0
    enemy_list = [Enemy(enemy_img, display) for i in range(on_screen_enemies)]
    player = Player(player_img, display)
    FPS = settings.settings["Framerate"]

    num_stars = 800
    stars = [
        Stars(settings.settings["Resolution"]["X"],
              settings.settings["Resolution"]["Y"]) for i in range(num_stars)
    ]

    # Game loop
    while True:
        display.fill(colour.black)
        # Draw stars
        for star in stars:
            star.draw(display)
            if star.y > settings.settings["Resolution"]["Y"]:
                stars.remove(star)
        new_height = 1
        # Add new stars - we want this to be somewhat random
        new_stars = [
            Stars(settings.settings["Resolution"]["X"], new_height)
            for i in range(int(random.uniform(0.25, 1.25)))
        ]
        for new_star in new_stars:
            stars.append(new_star)

        if turn_timer > 500:
            on_screen_enemies += 1
            for e in [
                    Enemy(enemy_img, display) for i in range(on_screen_enemies)
            ]:
                enemy_list.append(e)
            turn_timer = 0
        for e in enemy_list:
            e.draw()
            if e.load_weapons < 1:
                e.load_weapons = 100
                fired_bullets.append(e.fire())
            e.load_weapons -= 1

        # If bullet has been fired, draw it and assess whether it hits the target or not
        for b in fired_bullets:
            # Remove the bullets at the bottom so you don't move into them
            if b.y > 1080:
                fired_bullets.remove(b)
            b.draw()
            player_status = player.hit(b)
            if player_status == "hit":
                # Handle edge case where bullet goes off screen but still has causal power
                try:
                    fired_bullets.remove(b)
                except:
                    pass
            elif player_status == "dead":
                try:
                    fired_bullets.remove(b)
                except:
                    pass
                # End game
                return True, player
            for e in enemy_list:
                hit_result = e.hit(b, player)
                if hit_result == "dead":
                    fired_bullets.remove(b)
                    enemy_list.remove(e)
                elif hit_result == "hit":
                    fired_bullets.remove(b)

        player.draw()
        draw_text(display, player)

        if (player.score % 4 == 0
                and player.score != 0) and boss_alive == False:
            new_boss = True
            boss_alive = True
            counter = 100
            enemy_list.append(create_boss(capital_ship_img, display))

        if counter > 0 and new_boss == True:
            draw_boss_text(display, settings)
            counter -= 1
        else:
            counter = 120
            new_boss = False

        # Checks what events have been created and takes them off the queue
        for event in pygame.event.get():
            if event.type == QUIT or (event.type == KEYDOWN
                                      and event.key == K_ESCAPE):
                terminate()
            elif (event.type == KEYDOWN and event.key == K_a):
                player.x -= 25
            elif (event.type == KEYDOWN and event.key == K_d):
                player.x += 25
            elif (event.type == KEYDOWN and event.key == K_SPACE):
                fired_bullets.append(player.fire())

        turn_timer += 1
        # update() draws Surface object to screen
        pygame.display.update()
        pygame.time.Clock().tick(FPS)