{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "910bdf7c",
   "metadata": {},
   "source": [
    "# 19-32 · Snake Pro целиком\n",
    "\n",
    "Практика к разделу [«Snake Pro целиком»](../../site/chapters/glava-19/19-32-snake-pro-itogi.html). Тот же код, что и в `projects/turtle/snake/snake.py`."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f3b2274c",
   "metadata": {},
   "source": [
    "## Цель\n",
    "\n",
    "Запустить настоящий SnakeApp и провести его через несколько тиков без реального таймера."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9702203e",
   "metadata": {},
   "source": [
    "## Настройка (SnakeApp сам открывает свой экран — отдельно ничего настраивать не нужно)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "87e75601",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-03T00:54:37.312712Z",
     "iopub.status.busy": "2026-09-03T00:54:37.312517Z",
     "iopub.status.idle": "2026-09-03T00:54:37.495007Z",
     "shell.execute_reply": "2026-09-03T00:54:37.494449Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Статус при создании: GameStatus.READY\n"
     ]
    }
   ],
   "source": [
    "import random\n",
    "import sys\n",
    "sys.path.insert(0, \"../../projects/turtle/snake\")\n",
    "import snake as s\n",
    "\n",
    "app = s.SnakeApp(rng=random.Random(11))\n",
    "print(\"Статус при создании:\", app.state.status)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e0cf78d4",
   "metadata": {},
   "source": [
    "## Рабочий пример"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "2e4b7d28",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-03T00:54:37.496657Z",
     "iopub.status.busy": "2026-09-03T00:54:37.496466Z",
     "iopub.status.idle": "2026-09-03T00:54:37.528369Z",
     "shell.execute_reply": "2026-09-03T00:54:37.527801Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Счёт: 10 | Длина змейки: 2\n"
     ]
    }
   ],
   "source": [
    "app.request_direction(s.Direction.RIGHT)   # READY -> RUNNING\n",
    "app.state.food = s.next_head(app.state.snake[0], s.Direction.RIGHT)\n",
    "app.game_tick()\n",
    "print(\"Счёт:\", app.state.score, \"| Длина змейки:\", len(app.state.snake))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "11c5f9da",
   "metadata": {},
   "source": [
    "## Проверка результата"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "9eb424a7",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-03T00:54:37.529887Z",
     "iopub.status.busy": "2026-09-03T00:54:37.529747Z",
     "iopub.status.idle": "2026-09-03T00:54:37.533979Z",
     "shell.execute_reply": "2026-09-03T00:54:37.533034Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Настоящий SnakeApp работает без единого вызова screen.mainloop().\n"
     ]
    }
   ],
   "source": [
    "assert app.state.status is s.GameStatus.RUNNING\n",
    "assert app.state.score == 10\n",
    "assert len(app.state.snake) == 2\n",
    "print(\"Настоящий SnakeApp работает без единого вызова screen.mainloop().\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "71b72722",
   "metadata": {},
   "source": [
    "## Завершение (выполнить один раз, в самом конце)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "c302ff87",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-09-03T00:54:37.535481Z",
     "iopub.status.busy": "2026-09-03T00:54:37.535339Z",
     "iopub.status.idle": "2026-09-03T00:54:37.539263Z",
     "shell.execute_reply": "2026-09-03T00:54:37.538755Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Окно закрыто.\n"
     ]
    }
   ],
   "source": [
    "app.screen.bye()\n",
    "print(\"Окно закрыто.\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Cartesian Python 3.14",
   "language": "python",
   "name": "cartesian-python314"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.14.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
