コード例 #1
0
def main():
    """Run main program"""
    rules_and_agreements()
    enemy = Enemy()
    enemy.make_battlefield()
    enemy.make_ships()

    player = Player()
    player.make_battlefield()
    player.make_ships()

    print(player.battlefield.get_map)
    my_turn = ask_yes_no("Would you like to move first?")
    if my_turn == "n":
        my_turn = False

    game_over = None
    while not game_over:
        if my_turn:
            game_over = player.fire(enemy)
            if game_over:
                enemy.says_after_losing()
        else:
            game_over = enemy.fire(player)
            if game_over:
                enemy.says_after_victory()
        my_turn = not my_turn
コード例 #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)