М19. Тетрис: вершина «от NAND до игры»
Паспорт модуля
| Параметр | Значение |
|---|---|
| Аудитория | 🔴 (команда 2–3 чел.); пройдены М14, М17, М18; 🟡 — тир Б |
| Аутентичная задача | довести систему до состояния «в это можно играть» и выдержать стресс-тест жюри: зажатые кнопки, вращение у стенки, одновременное сжигание линий |
| Объём | 6 занятий × 90 мин + шоу-демонстрация |
| Оборудование | тир А: связка М17+М18, 5 кнопок (влево/вправо/поворот/сброс/пауза) через debounce М15; тир Б: LED-матрица 8×32 на MAX7219 или WS2812 + любой CPU линии (честная оговорка: макеточной машине на герцах игра не по силам — Тетрис живёт на ПЛИС-CPU или, в тире Б, на RP2350 как референс-платформе) |
| Ограничения | ТБ WS2812: расчёт тока ленты (до 60 мА/пиксель на белом), питание — отдельной шиной, не от дока ПЛИС |
Цели
| № | Обучающиеся … | Блум—Андерсон | Миллер | Проверка |
|---|---|---|---|---|
| 1 | проектируют представление состояния: поле 10×20 в памяти, фигура = таблица смещений | создавать | делает | ревью структуры данных до кода |
| 2 | реализуют игровой цикл: ввод → проверка коллизии → фиксация → сжигание линий → гравитация | создавать | делает | функциональный чек-лист (ниже) |
| 3 | тестируют игру системно: составляют и прогоняют стресс-сценарии | оценивать | делает | протокол стресс-теста |
| 4 | распределяют работу в команде и держат интеграционные интерфейсы | применять | делает | ретроспектива + работающая интеграция |
Проектный worked example (разбирается ДО кодирования)
Представление: поле — байтовая матрица в RAM/BRAM (клетка = код тайла); фигура — 4 пары смещений (x,y) от опорной точки; поворот — либо 4 предвычисленные ориентации в таблице (путь курса: таблица вместо формулы — та же философия, что знакогенератор М2 и микрокод М12), либо матричный поворот для желающих. Коллизия — единственная функция-предикат fits(фигура, ориентация, x, y): выход за границы или занятая клетка. Всё остальное (сдвиг, поворот у стенки, посадка) — вызовы этого предиката: одна проверка, много применений — обсудить как принцип проектирования.
flowchart TB
T[Тик таймера/кнопка] --> IN[Считать ввод]
IN --> TRY{fits?}
TRY -- да --> MOVE[Применить ход]
TRY -- нет, ход вниз --> LOCK[Зафиксировать фигуру в поле]
LOCK --> LINES{Полные линии?}
LINES -- да --> BURN[Сжечь, сдвинуть, счёт]
LINES -- нет --> SPAWN[Новая фигура]
SPAWN --> OVER{Помещается?}
OVER -- нет --> GAMEOVER
BURN --> SPAWN
MOVE --> T
Функциональный чек-лист приёмки (публикуется заранее — это и есть критерии жюри): фигура не проходит сквозь стенки и стакан; поворот у стенки не телепортирует; одновременное сжигание 2–4 линий корректно сдвигает всё выше; ускорение падения растёт со счётом; game over определяется честно; зажатая кнопка не ломает состояние (авто-повтор с периодом, а не «на каждый опрос»).
Оценивание
Итог линии В и де-факто генеральная репетиция конференции: 10-минутная демонстрация (живая игра + рассказ «путь от NAND до этого экрана» с показом артефактов каждого модуля) + стресс-тест по чек-листу руками «жюри» (другая команда) + вопросы на глубину (случайный модуль из М1–М18 — кумулятивное оценивание всей программы, объявлено заранее: это делает retrieval-подготовку к защите неизбежной).