#----------------------------------------------------------------------><----------------------------------------------------------------------#
Snake (Питон, Удав, Змейка, Червяк и др.) — компьютерная игра, уходящая корнями в системы 1970-х. Наиболее известна версия от Nokia, впервые появившаяся в кнопочном телефоне Nokia 6110. Разработана финляндским разработчиком Танели Арманто.
>>>GAME PROCESS<<<
Игрок управляет длинным, тонким существом, напоминающим змею, которое ползает по плоскости (как правило, ограниченной стенками), собирая еду (или другие предметы), избегая столкновения с собственным хвостом и краями игрового поля (существуют варианты где при прохождении через край змея выходит из противоположного края поля). Каждый раз, когда змея съедает кусок пищи, она становится длиннее, что постепенно усложняет игру.
>>>GAME CONTROLLER<<<
#----------------------------------------------------------------------><----------------------------------------------------------------------#
Создание основной конструкции окна в PyGame.
Создание рабочего цикла игры.
Стилизация вида окна игры.
>>>PART_1<<<
- Создание основной конструкции окна в PyGame.
- Создание рабочего цикла игры.
- Стилизация вида окна игры.
>>>PART_2<<<
- В цикл игры окна добавляем цикл событий.
- Добавляем условие выхода из окна.
>>>PART_3<<<
- Создаём описание игрового окна.
- Указываем путь загрузки иконки игрового окна.
- Устанавливаем иконку игрового окна.
- Создаём переменные для размеров экрана вместо аргументов функции set_mode().
>>>RESULT_1<<
Отрисовка геометрических фигур.
Создание цикла отрисовки.
>>>PART_1<<<
- Нарисовали прямоугольник белого цвета с отступом (x=20,y=20) и размером 50x50.
>>>PART_2<<<
- Создание переменных с цветами.
- Создание базовых геометрических примитивов.
>>>PART_3<<<
- Перенос отображения в цикл игры.
- Создание рисунка из примитивов с помощью цикла.
>>>RESULT_2<<
Внедрение FPS в проект.
Управление объектом и его скоростью.
>>>PART_1<<<
- Устанавливаем количество кадров в секунду (FPS).
- Подключаем библиотеку Time.
- Прописываем команду отрисовки объекта.
>>>PART_2<<<
- Создаём события управления нажатием клавиатуры.
- Добавляем управление объектом вправо.
- Добавляем управление объектом влево.
>>>PART_3<<<
- Изменяем значение переменной position_x.
- Создаём переменные для кнопок управления.
- Создаём событие управления кнопки UP.
- Создаём событие управления кнопки DOWN.
>>>RESULT_3<<
Коллизия в игре.
Взаимодействие с объектами.
Правильное управление змейкой.
>>>PART_1<<<
- Создаём условие позиции объекта по осям координат.
- Обрабатываем коллизию левой и верхней границ игрового экрана.
>>>PART_2<<<
- Обрабатываем коллизию с нижней и правой границами.
- Учим змейку отталкиваться от границ.
>>>PART_3<<<
- Настраиваем отображение кубика, используя is_draw.
- Проверяем коллизию с кубиком и делаем is_draw = False, если пересеклись с ним.
>>>RESULT_4<<
Создание класса и рефакторинг кода.
Создание класса Snake.
>>>PART_1<<<
- Создаём класс Snake, в который переупаковываем весь код управления змеёй.
- Создаём методы управления по осям координат.
- Переписываем код в цикле игры, заменяя управление именем класса.
- Создаём метод отрисовки змейки.
>>>PART_2<<<
- Создаём более точную структуру взаимодействия змейки с едой.
- Меняем скорость и размер змейки относительно FPS игры.
- Поправляем координаты коллизии.
>>>PART_3<<<
- Создаём метод проверки еды.
- Создаём условия проверки координат змейки и еды.
- Создаём рандомное появление еды.
>>>RESULT_5<<
Создаем логику появления еды на игровом поле.
Делаем рефактор кода управления змейкой.
Создаём анимацию увеличения длины змейки.
>>>PART_1<<<
- Программируем появление еды по всему полю игры.
- Проверяем область заполнения и увеличиваем скорость.
- Создаём условие, при котором еда не выходит за границы игрового окна.
- Исправляем, возникшую ошибку в check_walls().
>>>PART_2<<<
- Создаём метод управления def_move().
- Создаём новые переменные в классе Snake.
- Вносим изменения в методы управления.
>>>PART_3<<<
- Переименовываем класс Snake в класс Snake_head.
- Создаём класс Snake для тела змеи.
- Переносим код движения из класса Snake_head в класс Snake.
- Создаём переменные количества голов змеи.
- Создаём метод def add_head.
- Пишем код анимации добавления длины змеи.
Добавление в игру текста.
Создание счёта.
Создаём логику проигрыша игрока.
>>>PART_1<<<
- Подключаем все библиотеки через команду pygame init().
- Создаём и настраиваем шрифт.
- Рендерим надпись, которая будет выводиться на экран.
- Выводим надпись через метод blit().
>>>PART_2<<<
- Создаём переменную и надпись «Game over».
- Вносим корректировки в цикл игры.
- Создаём условия коллизии стенки, змейки и строки проигрыша.
- Импортируем библиотеку Time.
- Создаём условие проигрыша.
>>>PART_3<<<
- Добавляем переменную счёта score_text.
- Добавляем отображение текста счёта.
- Переработаем метод def check_food.
- Дорабатываем появление еды и пополнение счёта.
>>>RESULT_7<<
Рефакторинг кода:
— коллизия тела змейки.
— логика управления змейки.
— появление еды.
>>>PART_1<<<
- Исправить баг — столкновения с правой и нижней стеной.
- Создать условие, при котором змея может врезаться в саму себя.
>>>PART_2<<<
- Исправить баг — выход змейки за пределы игрового окна, путём добавления логического выражения and.
- Исправить логику движения змейки влево, вправо, вверх и вниз, т.к. змейка идёт только в одном направлении.
>>>PART_3<<<
- Исправление рандомных координат еды.
- Создаём условие, исключающее появление еды на теле змейки.
- Создаём цикл while is_repeat для постоянной проверки координат, появляющейся еды.
>>>RESULT_8<<
Создание сцены, титров и кнопки меню.
Кнопки входа и выхода из игры.
Изменение увета змейки и еды.\
>>>PART_1<<<
- Создаём метод def main_menu().
- Создаём цикл меню и логику отрисовки.
- Указываем кнопки «Start» и «Exit».
>>>PART_2<<<
- Создаём логику выбора пунктов меню.
- Перемещаем и дорабатываем событийную модель.
- Прописываем код запуска игры и выхода из игры.
>>>PART_3<<<
- Создание метода изменения цвета змейки.
- Прописываем условие изменения цвета змейки при соприкосновении с едой.
- Изменение цвета еды.
>>>RESULT_9<<
На этом всё. Остался баг с появлением еды на границах.

























