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]]
[[1,1], [1,1]]
[[0,1,0], [1,1,1]]
[[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!