コード例 #1
0
def play(screen, height):
    global current_level
    smooth_end = 0
    finished = []

    alpha_surf = pygame.Surface(screen.get_size(), pygame.SRCALPHA)
    alpha_surf.fill((255, 255, 255, 220), special_flags=pygame.BLEND_RGBA_MULT)

    camera = Camera(screen.get_size()[1])

    running = True
    player1.isMoving = True
    player1.isMovingDown = True
    player2.isMoving = True
    player2.isMovingDown = True
    draw_sprites = pygame.sprite.Group()

    while running:
        playable = player1.isPlayable and player2.isPlayable
        draw_sprites.empty()

        time_delta = clock.tick(fps) / 1000

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                terminate()
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    terminate()
                else:
                    eval(str(buttons.get(event.key)))

        alpha_surf.fill((255, 255, 255, 250),
                        special_flags=pygame.BLEND_RGBA_MULT)
        new_alpha = pygame.Surface(screen.get_size(), pygame.SRCALPHA)
        screen.fill((0, 0, 0))

        if not player1.move(time_delta, player_group, tile_group, all_sprites,
                            alpha_surf, finish):
            finished.append(1)

        if not player2.move(time_delta, player_group, tile_group, all_sprites,
                            alpha_surf, finish):
            finished.append(2)

        if playable and not finished:
            if player1.rect.y > screen.get_size()[1]:
                finish.rect.y = player2.rect.y - finish.rect.h
                finished.append(2)
            if player2.rect.y > screen.get_size()[1]:
                finish.rect.y = player1.rect.y - finish.rect.h
                finished.append(1)

        elif ((not player1.isPlayable and not player2.isPlayable)
              and (not finished and
                   (player1.rect.y <= screen.get_size()[1] * 0.6
                    or player2.rect.y <= screen.get_size()[1] * 0.6))):
            player1.isPlayable = True
            player2.isPlayable = True
            alpha_surf.blit(
                pygame.transform.scale(load_image("start.png"),
                                       screen.get_size()), (0, 0))

        player1.inverted += player2.other_inverted * 3
        player2.inverted += player1.other_inverted * 3
        player1.other_inverted, player2.other_inverted = 0, 0

        y = camera.scroll_for(
            player1 if player1.rect.y < player2.rect.y else player2)

        new_alpha.blit(alpha_surf, (0, -y))
        alpha_surf = new_alpha

        for sprite in all_sprites:
            camera.apply(sprite)
        camera.apply(finish)

        screen.blit(alpha_surf, (0, 0))

        for sprite in tile_group:
            if 0 - 2 / 3 * tile_size < sprite.rect.y < height:  # + tile_size:
                sprite.add(draw_sprites)

        draw_sprites.draw(screen)

        pygame.display.flip()

        if finished:
            if playable:
                result = "Player " + str(finished[0]) + " has won!" if len(
                    finished) == 1 else "draw!"
                if result == "draw!":
                    player1.isPlayable = False
                    player2.isPlayable = False
                else:
                    k = ("player" +
                         str(int(result.split("Player ")[1][0]) % 2 + 1) +
                         ".switch_off()")
                    eval(k)

            smooth_end += time_delta

            if smooth_end > 1.22:
                time.sleep(0.3)
                running = False
                SCORE[1] += 1 in finished
                SCORE[2] += 2 in finished
                current_level += 1
                return result