Змейка на python кратко

Обновлено: 03.07.2024

В этой статье мы напишем игру змейка на Python. Это одна из самых распространенных аркад в мире. В основе ее реализации будет три класса:

  • Класс сегмента (одного блока змейки).
  • Класс змеи (по сути собрание сегментов).
  • Класс подсчета очков.

В процессе написания змейки у нас будут следующие этапы:

  1. Создание окна приложения;
  2. Объявление вспомогательных переменных;
  3. Создание игрового поля;
  4. Создание классов сегмента, змеи и очков;
  5. Создание разных дополнительных функций;
  6. Создание функций для начала новой игры и выхода из игры.

Создание окна приложения

Первым делом нужно разработать каркас для нашего приложения – главное окно. Листинг:

Объявление вспомогательных переменных

Добавляем в нашу программу вспомогательные переменные. Их нужно добавить сразу после оператора импорта tkinter:

Это глобальные переменные, которые мы будем использовать в процессе игры.

Создание игрового поля

Игровое поле мы реализуем с помощью Canvas. Создадим холст нужного нам размера и зальем его черным цветом. Листинг:

Создание основных классов

Класс сегмента змеи

Первый класс – это сегмент змейки. Визуально сегмент змейки будет представлен обычным прямоугольником, созданным при помощи метода create_rectangle класса Canvas модуля tkinter. Листинг:

Класс змейки

Змейка у нас будет набором сегментов. У нее будут методы движения, изменения направления и добавления сегмента. Листинг:

Конструктор (метод __init__) задает список доступных направлений движения змейки и задает направление по умолчанию – вправо.

Метод move() двигает змейку в заданном направлении. Метод change_direction() изменяет направление движения змейки.

За добавление нового сегмента отвечает метод add_segment(). Метод reset_snake() отвечает за обновления змейки при старте новой игры. Внимательно читайте все комментарии к коду.

Добавим в код функцию для создания сегментов и змейки:

Класс подсчета очков

Последний класс отвечает за счет очков при съедании змейкой сегмента:

Конструктор (метод __init__) отображает очки на экране при поедании змейкой сегментов. Метод increment() ведет счет очков. Метод reset() обновляет очки при старте новой игры.

Для работы нашего класса необходимо добавить строчку в основной экран нашего приложения:

Создание разных дополнительных функций

Нам понадобятся две вспомогательные функции. Первая – create_block(), которая создает пищу для змейки. В нашем случае это будет яблоко – кружок зеленого цвета. Чтобы эта функция работала необходимо импортировать модуль random:

Следующая вспомогательная функция main() будет управлять игровым процессом – именно она будет управлять тем, куда пойдет змейка, обрабатывает столкновения с границами экрана, отвечает за поедание яблок и увеличение змейки. Листинг:

Создание функций для начала новой игры и выхода из игры

При проигрыше в нашей игре необходимо, чтобы можно было начать новую игру без перезагрузки приложения и выхода из игры. Разработаем данные функции: Листинг:

В главном окне необходимо добавить строки:

На этом наша разработка игры подошла к завершению. Если вы все правильно сделали, тогда у вас должна заработать игра. Подробнее изучите наш код и пишите в комментариях свои предложения по изменению.

Полный исходный код

В данном разделе мы оставим полный исходный код, чтобы вы смогли свериться с вашим вариантом. Листинг:

Перед тем как двигаться дальше, давайте посмотрим на основные разделы нашей статьи:

Установка Pygame

Первое, что нам надо сделать, это установить библиотеку Pygame. Это можно сделать, просто выполнив следующую команду:

Выполнив это, просто импортируем эту библиотеку и приступим к разработке игры. Но перед этим давайте взглянем на основные функции данной библиотеки, которые мы будем использовать при создании игры.

Создание экрана

Для создания экрана при помощи Pygame нужно воспользоваться функцией display.set_mode() . Также необходимо пользоваться методом init() для инициализации экрана в начале кода и методом quit() для его закрытия в конце. Метод update() используется для применения каких-либо изменений на экране. Еще существует метод flip() , который работает похожим с update() образом. Разница заключается лишь в том, что метод flip() переписывает весь экран целиком, а метод update() применяет именно изменения (хотя если его использовать без параметров, то он тоже переписывает весь экран) .

Результат:


Теперь, запустив этот код, вы увидите, что экран не пропадает, как раньше. На нем будут отображаться все действия игры. Мы этого добились благодаря функции event.get() . Также, при помощи функции display.set_caption() , мы вывели заголовок нашего экрана — ‘Snake game by Pythonist’.

Теперь, когда наш экран полностью подготовлен, нам предстоит нарисовать на нем змейку. Этому посвящен следующий раздел.

python books logo

Английский для программистов

Наш телеграм канал с тестами по английскому языку для программистов. Английский это часть карьеры программиста. Поэтому полезно заняться им уже сейчас

Создание змейки

Перед тем как создать змейку, мы инициируем несколько цветовых переменных для раскрашивания самой змейки, еды и экрана. В Pygame используется цветовая схема RGB (RED, GREEN, BLUE). Установка всех цветов в 0 соответствует черному цвету, а в 255 — соответственно, белому.

Фактически, наша змейка является прямоугольником. Чтобы нарисовать прямоугольник в Pygame, можно воспользоваться функцией draw.rect() , которая нарисует нам прямоугольник заданного цвета и размера.

Результат:


Как можно увидеть, змейка создана в виде голубого прямоугольника. Теперь нам нужно научить ее двигаться.

Движение змейки

Чтобы передвигать змейку, мы будем использовать ключевые события из класса KEYDOWN библиотеки Pygame. События K_UP , K_DOWN , K_LEFT , и K_RIGHT заставят змейку двигаться вверх, вниз, влево и вправо соответственно. Также, цвет дисплея меняется от черного (по умолчанию) до белого при помощи метода fill() .

Для сохранения изменений координат x и y мы создали две новых переменные: x1_change и y1_change .

Результат:

В игре змейка игрок проигрывает, если касается границы экрана. Чтобы задать такое поведение, мы должны использовать инструкцию if , которая будет следить за тем, чтобы координаты x и y были меньше размеров экрана. Мы будем использовать для этого переменные, чтобы вы могли потом, при случае, легко внести какие-либо изменения в игру.

Результат:


Добавление еды

Результат:


Terminal:


Увеличение длины змейки

Результат:

Вывод счета на экран

И последнее, но весьма важное дело: вам нужно отображать счет игрока. Для этого мы создали функцию Your_score . Это функция будет показывать размер змейки за вычетом 1 (так как это начальный размер змейки).

Результат:


Вот мы и дошли до конца нашей статьи. Мы надеемся, что она вам понравилась и все было понятно. Самое главное, не забывайте как можно больше практиковаться и использовать ваши знания на практике.

python books logo

Английский для программистов

Наш телеграм канал с тестами по английскому языку для программистов. Английский это часть карьеры программиста. Поэтому полезно заняться им уже сейчас

Эксклюзивное руководство по змейке для python и pygame

Во многих случаях игры - это инструмент для выражения наших внутренних эмоций. В играх мы можем забыть о пережитом несчастье. В настоящее время, благодаря постоянному совершенствованию программного и аппаратного обеспечения, игровой рынок становится все более и более процветающим, и многие игры имеют несколько G. Люди должны вздохнуть, время, которое раньше играл в Змейку, Тетрис, это человек, который может долго играть в эти игры, не уставая, прошло.
Сегодня я написал эксклюзивную игру о поедании змей, чтобы поделиться счастьем со всеми ~

Давай, сделаем снимок в знак уважения и покажем, насколько интересна эта жадная змея! (Скучно):


Кхм, красный шар и серый шар - наши милые змейки, теперь они счастливо летают

, а затем. . Лети в сон



Есть. . .

Что касается других функций, вы можете попробовать сами.
Вот коды, которые я подготовил

перед стартом
Перед запуском убедитесь, что на вашем компьютере установлен пакет pygame. Если нет, просто загрузите его с помощью pip:

Загрузите pygame, и мы сможем запустить нашу маленькую змейку.

Два класса, которые необходимо создать
Во-первых, мы должны создать два класса для хранения связанной информации. Эти два класса используются для хранения еды и змей:

Чтобы обеспечить читаемость нашего кода, перед тем, как начать, мы создаем серию констант для будущего использования кода.

Прежде всего, мы должны рассмотреть возможность рисования всего игрового фона, чтобы наша маленькая змейка могла двигаться в соответствии с размером пиксельной сетки, поэтому мы определяем функцию для рисования фонового изображения.

bgdraw(screen)

Хорошо, можно выделить весь фон. Затем мы можем рассмотреть возможность плавного отображения еды, которую ест змея.
Как выходит еда? Прежде всего, здесь используется класс Food, который мы определили ранее.Мы создаем множество экземпляров Food и превращаем их в небольшие продукты. Было бы скучно, если еда каждый раз находится в одном и том же месте, поэтому нам нужно убедиться, что еда появляется случайным образом, мы используем случайную.

Мы рассматриваем все окно как матрицу, случайным образом задаем абсциссу и ординату еды, чтобы сформировать ее (x, y), а затем рисуем коробку с едой с (x, y) в качестве верхней левой точки еды.

Итак, есть следующий код:

foodcreate(count,foodlist) Параметры - это общее количество продуктов и список, используемый для хранения продуктов.
fooddraw(screen,color,foodlist) Параметры: окно игры, пищевой краситель и список продуктов.

Теперь, когда на заднем плане есть еда, мы оставляем нашу маленькую змейку, потому что вся наша игра выполняется в цикле while, поэтому мы должны судить, удовлетворены ли различные состояния.
Как простая версия жадной змеи, нам нужно только судить в этом цикле
Бить ли об стену,
Ты ударил себя,
Закончить ли еду
Контроль направления полета змеи
Ты ел еду

Конечно, если вы ударитесь о стену и съедите себя, вы обязательно пролетите над ~. После того, как вы съедите всю пищу, вы достигнете идеального конца и осуществите мечту о драконе, входящем в море, и змее, входящем в небо.

В общем, для всех вышеуказанных условий мы можем использовать функции для их инкапсуляции.

Ударяясь о стену и поражая себя, мы можем напрямую судить о позиционном отношении между головой змеи и границей, а ударяя себя, мы можем судить о соотношении между телом змеи и головой змеи.

В общем, змеиная голова очень важна! Не могу ударить

Таким образом, могут возникнуть две функции:

collisionwall(direction,snakehead) Параметры - направление полета змеи и положение головы змеи.

collisionbody(snakelist,snakehead) Параметр представляет собой список всех тел змеи и положение головы змеи.

Что ж, теперь змея должна достичь цели и съесть всю пищу. Нам нужно только добавить переменную SCORE, чтобы хранить, сколько еды мы съели. Когда SCORE и FOODCOUNT равны, мы выигрываем.

Следующий шаг - определить, где кнопка используется для управления змеей, и использовать несколько условных операторов, чтобы определить, какая кнопка нажата, а затем изменить направление.

Теперь маленькой змейке почти пора двигаться ~~~

Как ее переместить? Когда мы рисуем змею, мы рисуем все змеиные шары в списке змеев на соответствующие позиции. Если змея должна двигаться, мы должны изменить информацию в списке змеи.

В связи с этим мы можем удалить последний шар змеиного хвоста из списка и добавить новую позицию змеи.

snakedraw(screen,snakelist) Параметры - это окно и список змейки

snakemove(snakelist,direction) Параметры - список змей и направление движения.

Выполнив вышеуказанную работу, мы почти наполовину преуспели. Теперь эта маленькая змея может двигать ногами. Единственный недостаток - она ​​не может открыть рот и не может есть.

Как это сделать? Давайте продолжим судить о положении змеи и еды. Разве в классе еды раньше не было едят, и теперь это, наконец, пригодится. Когда змея и еда встречаются, измените свойство iseaten еды на False Все нормально

Конечно, даже если его съели, после еды мы позволяем ему расти на хвосте змеи, чтобы завершить его великолепное превращение.

eatfood(head,foodlist) Параметры - положение головы и список блюд.

addbody(snakelist) Параметр - список змей

Наконец, это завершение нашей игры.Когда срабатывают первые два вышеуказанных условия, срабатывает наша функция Gameover, чтобы завершить битву.

gameover(screen,text,score) Параметр - окно, если вывод окончен, счет игры

Хорошо, после выполнения вышеуказанной работы мы превратили маленькую змею в маленького дракона, который может есть, бегать, лазать по деревьям и сражаться.

Осталось немного улучшить всю систему и добавить в окно несколько конечных шрифтов.

В итоге наш код выглядит следующим образом (Просто запустите его напрямую):

Создание игры на Python Tkinter

В этой части изучения Tkinter мы создадим клон игры Nibbles (змейка). Nibbles – это первоначальная версия классической змейки. Впервые ее создали в конце 70х годов. Позже она была перенесена на ПК. В этой игре игрок управляет змейкой. Цель игры – съесть как можно больше яблок. После каждого съеденного яблока тело змеи увеличивается. Во время движения змейка должна уклоняться от стен и собственного тела.

Содержание курса

Содержание статьи

Этапы разработки игры на Tkinter

Для начало, мы создаем Canvas виджет. Объектами в игре являются изображения. Мы используем методы canvas для создания объектов изображения. Также, мы используем методы canvas для обнаружения объектов на холсте при помощи тегов, и для обнаружения столкновений с другими объектами.

В первую очередь, мы расшифруем некоторые переменные, использующиеся в нашей игре:

  • BOARD_WIDTH и BOARD_HEIGHT обозначают размер игрового поля.
  • DELAY – скорость игры;
  • DOT_SIZE — размер яблока и соединения змейки;
  • MAX_RAND_POS – создание случайной точки для яблока.

Метод iniGame() инициализирует переменные, загружает изображения игры и запускает функцию таймера.

Метод createObject() создает объекты на холсте, а locateApple() устанавливает яблоко на случайную точку на холсте.

Мы назначаем клавиши клавиатуры при помощи метода onKeyPressed(). Для управления замеей в игре используются стрелки на клавиатуре.

В этих строчках показана загрузка наших изображений. Это три изображения для нашей игры:

  • голова (head.jpg);
  • соединение змеи (dot.jpg);
  • яблоко (apple.jpg).

Есть вопросы по Python?

На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!

Telegram Чат & Канал

Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!

Паблик VK

Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!


С помощью метода createObject() мы создаем игровые объекты на холсте. Это canvas объекты. У них есть стартовые x и y координаты.

Параметр image позволяет изображениям появиться на холсте. Параметр anchor установлен на NW (Север и Запад), что означает ориентир на верхнюю левую точку холста. И этот шаг очень важен, если мы хотим отображать изображения около границ корневого окна tkinter.

Создание игр на Python

Попробуйте удалить anchor и посмотрите, что произойдет. Параметр tag используется для идентификации объектов на холсте.

Один тег может использоваться для нескольких объектов на холсте.

Метод checkAppleCollision() позволяет нам узнать, съела ли змея яблоко или нет. Если да, мы добавляем одно соединение змейке и выполняем метод locateApple() для создания нового яблока на нашей игровой карте.

Читайте также: