Загрузка данных


import pygame, random, time, math, sys

# --- Инициализация Бездны ---
W, H = 1000, 900
FPS = 10
pygame.init()
screen = pygame.display.set_mode((W, H))
pygame.display.set_caption("НП 35: FINAL APOCALYPSE (DURAK-POKER-BILLIARDS)")


def load_a(name, size):
    try:
        return pygame.transform.scale(pygame.image.load(name).convert_alpha(), size)
    except:
        s = pygame.Surface(size);
        s.fill((random.randint(0, 255), 0, 0))
        return s


# Ассеты
skull_img = load_a("grass.png", (60, 60))
box_img = load_a("box.png", (60, 60))
mario_img = load_a("mario.png", (150, 150))
man_img = load_a("man.png", (300, 300))
fon_img = load_a("fon.png", (W, H))

f_huge = pygame.font.SysFont("Impact", 150)
f_sys = pygame.font.SysFont("Courier New", 30, bold=True)


class ChaosEngine:
    def __init__(self):
        self.reset()

    def reset(self):
        self.fx = self.fy = self.inv = False
        self.bombs = [[(random.random() < 0.2) for _ in range(10)] for _ in range(10)]
        self.opened = [[False for _ in range(10)] for _ in range(10)]
        self.cards = [random.randint(6, 14) for _ in range(20)]  # "Дурак"
        self.ball_pos = [W // 2, H // 2]
        self.ball_v = [15, 15]  # "Бильярд"
        self.dead = False


game = ChaosEngine()
clock = pygame.time.Clock()
world = pygame.Surface((W, H))

while True:
    now = time.time()
    mx, my = pygame.mouse.get_pos()
    world.fill((30, 0, 0) if not game.inv else (200, 255, 255))

    # Реверс координат
    rmx, rmy = (W - mx if game.fx else mx), (H - my if game.fy else my)

    for event in pygame.event.get():
        if event.type == pygame.QUIT: pygame.quit(); sys.exit()
        if event.type == pygame.MOUSEBUTTONDOWN:
            game.inv = not game.inv
            if event.button == 1: game.fx = not game.fx
            if event.button == 3: game.fy = not game.fy

            gx, gy = (rmx - 200) // 60, (rmy - 200) // 60
            if 0 <= gx < 10 and 0 <= gy < 10:
                if game.bombs[gy][gx]:
                    game.dead = True
                else:
                    game.opened[gy][gx] = True

    if not game.dead:
        # 1. САПЕР (Сетка)
        for y in range(10):
            for x in range(10):
                r = pygame.Rect(x * 60 + 200, y * 60 + 200, 58, 58)
                if game.opened[y][x]:
                    pygame.draw.rect(world, (100, 0, 0), r)
                else:
                    world.blit(skull_img, r)

        # 2. БИЛЬЯРД (Летающий шар №8)
        game.ball_pos[0] += game.ball_v[0];
        game.ball_pos[1] += game.ball_v[1]
        if game.ball_pos[0] <= 0 or game.ball_pos[0] >= W: game.ball_v[0] *= -1
        if game.ball_pos[1] <= 0 or game.ball_pos[1] >= H: game.ball_v[1] *= -1
        pygame.draw.circle(world, (0, 0, 0), game.ball_pos, 30)
        pygame.draw.circle(world, (255, 255, 255), (game.ball_pos[0] - 10, game.ball_pos[1] - 10), 10)

        # 3. ПОКЕР/ДУРАК (Летающие карты)
        for i in range(10):
            cx = (math.sin(now + i) * 400) + W // 2
            cy = (math.cos(now * 0.5 + i) * 400) + H // 2
            pygame.draw.rect(world, (255, 255, 255), (cx, cy, 60, 90), border_radius=5)
            world.blit(f_sys.render(str(random.choice(game.cards)), True, (255, 0, 0)), (cx + 15, cy + 30))

        # Мемы
        world.blit(mario_img, (rmx - 75, rmy - 75))
    else:
        # ФИНАЛЬНЫЙ ПИЗДЕЦ
        world.blit(fon_img, (0, 0))
        world.blit(man_img, (W // 2 - 150, H // 2 - 150))
        txt = f_huge.render("ПИЗДЕЦ system32", True, (255, random.randint(0, 255), 0))
        world.blit(txt, (W // 2 - txt.get_width() // 2 + random.randint(-20, 20), 300))
        world.blit(f_sys.render("УДАЛЕНИЕ ВСЕГО: DUEL POKER LOSS", True, (255, 255, 255)), (250, 500))

    # ПРИМЕНЯЕМ ОСИ И ЛОБОТОМИЮ
    out = pygame.transform.flip(world, game.fx, game.fy)
    s_w = W + int(math.sin(now * 15) * 100)
    out = pygame.transform.scale(out, (s_w, H))

    screen.fill((0, 0, 0))
    screen.blit(out, ((W - s_w) // 2, 0))

    # СЛУЧАЙНЫЕ ГЛИТЧИ
    if random.random() > 0.8:
        pygame.draw.rect(screen, (0, 255, 0), (random.randint(0, W), 0, 5, H))
        screen.blit(f_sys.render("ЛОБОТОМИЯ 35", True, (255, 0, 255)), (random.randint(0, W), random.randint(0, H)))

    pygame.display.flip()
    clock.tick(FPS)