{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "18c2eab9",
   "metadata": {},
   "source": [
    "# 14-26 · Гонка Turtle v2\n",
    "\n",
    "Практика к разделу [«Мини-проект: гонка Turtle v2»](../../site/chapters/glava-14/14-26-mini-proekt-gonka-v2.html)."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c2907e0a",
   "metadata": {},
   "source": [
    "## Цель\n",
    "\n",
    "Gonka как объект, управляющий списком объектов Uchastnik."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "68f6d19d",
   "metadata": {},
   "source": [
    "## О случайности в этом ноутбуке\n",
    "\n",
    "Гонка использует `random.randint()` — для предсказуемого результата в автоматическом\n",
    "выполнении здесь закрепляем случайность через `random.seed()`."
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be502b95",
   "metadata": {},
   "source": [
    "## Настройка (выполнить один раз)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1739957c",
   "metadata": {},
   "outputs": [],
   "source": [
    "import turtle\n",
    "\n",
    "screen = turtle.Screen()\n",
    "print(\"Окно Turtle готово.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "90135020",
   "metadata": {},
   "source": [
    "## Рабочий пример"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ad34113c",
   "metadata": {},
   "outputs": [],
   "source": [
    "import random\n",
    "\n",
    "random.seed(7)\n",
    "screen.setup(520, 420)\n",
    "\n",
    "class Uchastnik:\n",
    "    def __init__(self, cvet, startovyj_y):\n",
    "        self.t = turtle.Turtle()\n",
    "        self.t.shape(\"turtle\")\n",
    "        self.t.color(cvet)\n",
    "        self.t.penup()\n",
    "        self.t.goto(-220, startovyj_y)\n",
    "        self.cvet = cvet\n",
    "        self.finishiroval = False\n",
    "\n",
    "    def sdelat_shag(self):\n",
    "        if not self.finishiroval:\n",
    "            self.t.forward(random.randint(1, 10))\n",
    "\n",
    "    def proverit_finish(self, finish_x):\n",
    "        if self.t.xcor() >= finish_x:\n",
    "            self.finishiroval = True\n",
    "        return self.finishiroval\n",
    "\n",
    "\n",
    "class Gonka:\n",
    "    def __init__(self, cveta, finish_x):\n",
    "        self.finish_x = finish_x\n",
    "        self.uchastniki = [\n",
    "            Uchastnik(cvet, i * 50 - 75) for i, cvet in enumerate(cveta)\n",
    "        ]\n",
    "        self.rezultaty = []\n",
    "\n",
    "    def narisovat_finish(self):\n",
    "        liniya = turtle.Turtle()\n",
    "        liniya.hideturtle()\n",
    "        liniya.penup()\n",
    "        liniya.goto(self.finish_x, -120)\n",
    "        liniya.pendown()\n",
    "        liniya.pencolor(\"#0D0230\")\n",
    "        liniya.pensize(3)\n",
    "        liniya.setheading(90)\n",
    "        liniya.forward(240)\n",
    "\n",
    "    def sygrat_do_kontsa(self):\n",
    "        self.narisovat_finish()\n",
    "        while len(self.rezultaty) < len(self.uchastniki):\n",
    "            for u in self.uchastniki:\n",
    "                u.sdelat_shag()\n",
    "                if u.proverit_finish(self.finish_x) and u.cvet not in self.rezultaty:\n",
    "                    self.rezultaty.append(u.cvet)\n",
    "\n",
    "gonka = Gonka([\"red\", \"blue\", \"green\"], 210)\n",
    "gonka.sygrat_do_kontsa()\n",
    "print(f\"Порядок финиша: {gonka.rezultaty}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a0cac182",
   "metadata": {},
   "source": [
    "## Завершение (выполнить один раз, в самом конце)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "68d8bcf5",
   "metadata": {},
   "outputs": [],
   "source": [
    "screen.bye()\n",
    "print(\"Окно Turtle закрыто.\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Cartesian Python 3.14",
   "language": "python",
   "name": "cartesian-python314"
  },
  "language_info": {
   "name": "python",
   "version": "3.14.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
