Загрузка данных
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)