Найти тему

Создание игры "Snake" на языке програмирования Python

Оглавление

Меня зовут Гарипов Антон, я ученик 10А класса МБОУ СОШ#10

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

1.Импортируем сам PyGame. Первым делом зададим поле, его величину и размер секции змейки, а также начальные положения змейки и яблока (откуда мы начнем игру, и где будет первое яблоко). Ими будут случайными величинами нашего диапазона нашего разрешения ( 800 на 600 ), затем определим длину змейки, за это отвечает параметр length, а также направления ее движения то есть по оси x и y. А за её скорость возьмем показания кадров в секунду.

-2

Инициализируем модули PyGame, задаем окно рабочей программы (объект класса clock для регулирования скорости змейки.

На каждой итерации главного цикла будем закрашивать поверхность в черный цвет

-3

Итак, добавляем саму змейку и яблоко, нарисуем все секции змейки, они у нас будут квадраты зеленого цвета. Пока что у нас только голова. А яблоко будет таким же квадратом, только красного цвета. Определим движение нашей змейки, её один шаг - это размер её головы, тоесть "1"

-4

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

-5

Ну и конечно змейке нужно сделать управления. Программе нужна информация о всех нажатых клавишах. Управлять мы ей будем по стандарту на W,A,S,D. Под каждую клавишу назначаем соответствующие направления dx, dy.

-6

В данный момент наша змейка выглядит так:

Она бесконечна, а нам не то нужно, переходим на 23 строку
Она бесконечна, а нам не то нужно, переходим на 23 строку

Чтобы она была необходимого размера, мы сделаем срез координат в соответствии со значением переменной, отвечающей за её длину

Мы должны видеть только её голову
Мы должны видеть только её голову

Теперь рассмотрим случай увеличения змеи (поедание яблока), теперь когда координата змейки равна координате яблока - выходит что мы его съели, поэтому заново размещаем это яблоко, его мы уже сверху прописали, так что просто копируем и вставляем. И тут же пишем, что при поедании яблока скорость растёт.

-9
как видим, все получилось. Поедаем цель и змейка вырастает на 1 квадрат
как видим, все получилось. Поедаем цель и змейка вырастает на 1 квадрат

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

Операция break означает проигрыш
Операция break означает проигрыш
а это мы съели сами себя)
а это мы съели сами себя)

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

это направления куда она ходит
это направления куда она ходит

Теперь как только она идет в одну сторону, мы будем запрещать ей идти в обратную, вот так:

-14

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

-15

Но согласитесь, такая змейка мало кого впечатлит, чего же нам не хватает?

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

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

Рендерим надпись, и задаём ей цвет, надпись расположим в левом верхнем углу.

-16
Теперь у нас есть счетчик отображения количества очков.
Теперь у нас есть счетчик отображения количества очков.

Аналогично делаем шрифт для конечной надписи, вместо завершения главного цикла ставим еще один цикл, включая проверку приложения

-18
Вот что мы имеем в случае проигрыша.
Вот что мы имеем в случае проигрыша.

Наша змейка выглядит как-то не естественно, сделаем ей деления секций.

-20
Ну так-то намного приятнее.
Ну так-то намного приятнее.

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

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

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

-24
По-моему выглядит отлично
По-моему выглядит отлично

Ну вот теперь-то наша змейка выглядит как полноценный, доведенный до ума проект.

Спасибо за просмотр, надеюсь моя статья кого то