Глава 19 · Архитектура
Чистая игровая логика без Turtle
Правила игры — обычные функции над числами и списками; Turtle нужен только для того, чтобы их показать.
Ни одна из функций правил не открывает окно
Оглянемся на все функции, разобранные с раздела 19.9: next_head(),
move_snake(), is_wall_collision(),
is_self_collision(), choose_food(),
calculate_delay(). Ни одна из них не создаёт
turtle.Turtle(), не читает golova.xcor()
и вообще ничего не знает про экран:
Правила игры — обычные функции над числами и списками
next_head(head, direction)
кортеж → кортеж
раздел 19.11
move_snake(snake, head, grow)
список → список
раздел 19.18
is_wall_collision(head)
кортеж → bool
раздел 19.19
is_self_collision(head, body)
кортеж, список → bool
раздел 19.20
choose_food(snake, rng)
список → кортеж
раздел 19.18
calculate_delay(score)
int → int
раздел 19.14
Это не случайность, а сознательное разделение: правила «Змейки» — это математика над координатами, а Turtle — только один из способов эту математику показать. Раздел 19.30 использует ровно это свойство, чтобы протестировать правила напрямую, без единого настоящего окна.
Тот же принцип, что и в главе 18
normalize_bounds() и Shape в PaintApp (глава 18) были ровно такими же — чистыми функциями и данными без tkinter внутри. Пользы от этого две: логику проще тестировать, и её проще понять — читая функцию, не нужно держать в голове состояние целого окна.Практика: какие функции — чистая логика
Автоматическая проверка — функция is_pure_logic(): отличаем правила без Turtle от кода, которому нужен экран