Глава 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 от кода, которому нужен экран
Открыть практику →