🐍
grid_onШаг 3 из 4

Фигуры и поле

Матрица игрового поля, 7 тетромино и их отрисовка

1 Игровое поле — матрица 20×10

Поле Тетриса — это обычный двумерный список (ЛР №6). Каждая ячейка хранит 0 (пусто) или номер цвета 1–7.

Создание поля editВведите вручную
# Поле: 20 строк, 10 столбцов
ROWS = 20
COLS = 10
board = [[0] * COLS for _ in range(ROWS)]

# Ячейка на строке r, столбце c:
# board[r][c]  → 0 (пусто)
# board[r][c]  → 1–7 (занята, цвет)

Визуализация: board[r][c]

c=0 c=1 c=9
r=0
r=1
всего 20 строк
r=19

Цветные ячейки = занятые блоки. Чёрные = пустые (значение 0).

2 7 тетромино — каждое как 2D список

Каждая фигура закодирована двумерным списком: 1 — блок есть, 0 — пусто.

I
[[1,1,1,1]]
O
[[1,1],
 [1,1]]
T
[[0,1,0],
 [1,1,1]]
L
[[1,0,0],
 [1,1,1]]
Все 7 фигур в коде editВведите вручную
# Каждая фигура — это список списков (матрица!)
SHAPES = [
    [[1,1,1,1]],              # I (голубой)
    [[1,1],[1,1]],          # O (жёлтый)
    [[0,1,0],[1,1,1]],     # T (фиолетовый)
    [[0,1,1],[1,1,0]],     # S (зелёный)
    [[1,1,0],[0,1,1]],     # Z (красный)
    [[1,0,0],[1,1,1]],     # L (оранжевый)
    [[0,0,1],[1,1,1]],     # J (синий)
]

COLORS = [
    (0,188,212),    # I — голубой
    (253,216,53),   # O — жёлтый
    (156,39,176),   # T — фиолетовый
    (76,175,80),    # S — зелёный
    (244,67,54),    # Z — красный
    (255,152,0),    # L — оранжевый
    (33,150,243),   # J — синий
]

3 Отрисовка поля

Чтобы нарисовать поле — проходим по всем ячейкам двойным циклом (как в ЛР №6!) и рисуем прямоугольник нужного цвета.

Функция отрисовки editВведите вручную
BLOCK = 30  # размер одного блока в пикселях

def draw_board(screen, board):
    for r in range(ROWS):          # перебираем строки
        for c in range(COLS):      # перебираем столбцы
            color_idx = board[r][c]
            if color_idx > 0:        # не пустая ячейка
                color = COLORS[color_idx - 1]
                pygame.draw.rect(screen, color,
                    (c * BLOCK, r * BLOCK, BLOCK-1, BLOCK-1))
            else:                      # пустая — рисуем тёмный фон
                pygame.draw.rect(screen, (30,30,30),
                    (c * BLOCK, r * BLOCK, BLOCK-1, BLOCK-1))

Связь с ЛР №6: Двойной цикл for r in range(ROWS): for c in range(COLS) — это именно то, как перебирается матрица в лабораторной №6!