Код IT Загрузка примера кода…

Python main.py
#!/usr/bin/env python3

import pygame
import sys

pygame.init()
W, H = 720, 520
screen = pygame.display.set_mode((W, H))
pygame.display.set_caption("Breakout")
clock = pygame.time.Clock()
font = pygame.font.SysFont(None, 28)

paddle = pygame.Rect(W // 2 - 60, H - 36, 120, 14)
ball = pygame.Rect(W // 2, H - 60, 16, 16)
vx, vy = 5, -5

BRICK_ROWS, BRICK_COLS = 5, 10
brick_w = W // BRICK_COLS - 4
brick_h = 22
bricks = []
colors = [(220, 80, 80), (220, 160, 60), (220, 220, 80), (80, 200, 120), (80, 160, 220)]
for row in range(BRICK_ROWS):
    for col in range(BRICK_COLS):
        rect = pygame.Rect(2 + col * (brick_w + 4), 40 + row * (brick_h + 4), brick_w, brick_h)
        bricks.append({"rect": rect, "color": colors[row], "alive": True})

lives = 3
won = False
lost = False

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN and (won or lost) and event.key == pygame.K_SPACE:
            bricks = []
            for row in range(BRICK_ROWS):
                for col in range(BRICK_COLS):
                    rect = pygame.Rect(2 + col * (brick_w + 4), 40 + row * (brick_h + 4), brick_w, brick_h)
                    bricks.append({"rect": rect, "color": colors[row], "alive": True})
            ball.center = (W // 2, H - 60)
            vx, vy = 5, -5
            lives = 3
            won = lost = False

    if not won and not lost:
        mx, _ = pygame.mouse.get_pos()
        paddle.centerx = max(paddle.w // 2, min(W - paddle.w // 2, mx))
        ball.x += vx
        ball.y += vy
        if ball.left <= 0 or ball.right >= W:
            vx = -vx
        if ball.top <= 0:
            vy = -vy
        if ball.colliderect(paddle) and vy > 0:
            vy = -abs(vy)
            offset = (ball.centerx - paddle.centerx) / (paddle.w / 2)
            vx = int(6 * offset)
        if ball.bottom >= H:
            lives -= 1
            ball.center = (W // 2, H - 60)
            vx, vy = 5, -5
            if lives <= 0:
                lost = True
        for brick in bricks:
            if brick["alive"] and ball.colliderect(brick["rect"]):
                brick["alive"] = False
                vy = -vy
                break
        if all(not b["alive"] for b in bricks):
            won = True

    screen.fill((18, 22, 32))
    for brick in bricks:
        if brick["alive"]:
            pygame.draw.rect(screen, brick["color"], brick["rect"], border_radius=4)
    pygame.draw.rect(screen, (200, 210, 240), paddle, border_radius=6)
    pygame.draw.ellipse(screen, (255, 240, 120), ball)
    screen.blit(font.render(f"Жизни: {lives}", True, (230, 230, 240)), (12, 8))
    if won:
        screen.blit(font.render("Победа! Пробел", True, (120, 255, 160)), (W // 2 - 90, H // 2))
    if lost:
        screen.blit(font.render("Поражение. Пробел", True, (255, 120, 120)), (W // 2 - 110, H // 2))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
sys.exit()
#!/usr/bin/env python3

import pygame
import sys

pygame.init()
W, H = 720, 520
screen = pygame.display.set_mode((W, H))
pygame.display.set_caption("Breakout")
clock = pygame.time.Clock()
font = pygame.font.SysFont(None, 28)

paddle = pygame.Rect(W // 2 - 60, H - 36, 120, 14)
ball = pygame.Rect(W // 2, H - 60, 16, 16)
vx, vy = 5, -5

BRICK_ROWS, BRICK_COLS = 5, 10
brick_w = W // BRICK_COLS - 4
brick_h = 22
bricks = []
colors = [(220, 80, 80), (220, 160, 60), (220, 220, 80), (80, 200, 120), (80, 160, 220)]
for row in range(BRICK_ROWS):
    for col in range(BRICK_COLS):
        rect = pygame.Rect(2 + col * (brick_w + 4), 40 + row * (brick_h + 4), brick_w, brick_h)
        bricks.append({"rect": rect, "color": colors[row], "alive": True})

lives = 3
won = False
lost = False

running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN and (won or lost) and event.key == pygame.K_SPACE:
            bricks = []
            for row in range(BRICK_ROWS):
                for col in range(BRICK_COLS):
                    rect = pygame.Rect(2 + col * (brick_w + 4), 40 + row * (brick_h + 4), brick_w, brick_h)
                    bricks.append({"rect": rect, "color": colors[row], "alive": True})
            ball.center = (W // 2, H - 60)
            vx, vy = 5, -5
            lives = 3
            won = lost = False

    if not won and not lost:
        mx, _ = pygame.mouse.get_pos()
        paddle.centerx = max(paddle.w // 2, min(W - paddle.w // 2, mx))
        ball.x += vx
        ball.y += vy
        if ball.left <= 0 or ball.right >= W:
            vx = -vx
        if ball.top <= 0:
            vy = -vy
        if ball.colliderect(paddle) and vy > 0:
            vy = -abs(vy)
            offset = (ball.centerx - paddle.centerx) / (paddle.w / 2)
            vx = int(6 * offset)
        if ball.bottom >= H:
            lives -= 1
            ball.center = (W // 2, H - 60)
            vx, vy = 5, -5
            if lives <= 0:
                lost = True
        for brick in bricks:
            if brick["alive"] and ball.colliderect(brick["rect"]):
                brick["alive"] = False
                vy = -vy
                break
        if all(not b["alive"] for b in bricks):
            won = True

    screen.fill((18, 22, 32))
    for brick in bricks:
        if brick["alive"]:
            pygame.draw.rect(screen, brick["color"], brick["rect"], border_radius=4)
    pygame.draw.rect(screen, (200, 210, 240), paddle, border_radius=6)
    pygame.draw.ellipse(screen, (255, 240, 120), ball)
    screen.blit(font.render(f"Жизни: {lives}", True, (230, 230, 240)), (12, 8))
    if won:
        screen.blit(font.render("Победа! Пробел", True, (120, 255, 160)), (W // 2 - 90, H // 2))
    if lost:
        screen.blit(font.render("Поражение. Пробел", True, (255, 120, 120)), (W // 2 - 110, H // 2))
    pygame.display.flip()
    clock.tick(60)

pygame.quit()
sys.exit()