Как сделать персонажа в игре на питоне обучение

Добавил пользователь Alex
Обновлено: 01.09.2024

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

Мы с вами уже знакомы с методом получения всех произошедших событий - pygame.event.get() , который возвращает события, произошедшие с последнего обращения.

Помимо событий выхода из приложения pygame.QUIT , есть множество других - например, нажатия клавиш pygame.KEYDOWN или отпускания pygame.KEYUP .

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

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

Как установить


Однозначного ответа на вопрос о том, какую версию python скачивать, не существует. До 2019 эксперты ещё не решили, какая версия лучше подходит для написания игр. Но чтобы не возникало лишних проблем и вопросов, лучше скачать 3.7.

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

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

Чтобы проверить правильность установки, нужно открыть командную строку и вписать туда слово python. После нажатия на Enter должен появится номер версии и список из нескольких команд для освоения в новой системе.

Для более удобного взаимодействия дополнительно необходимо установить Code VS.

Теория

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

Pygame

Для создания собственной игры нужно работать со средой Pygame. Это так называемая игровая библиотека. Если проще, то набор инструментов, которые способствуют созданию игр.

Это три основных аспекта:

  1. Звуки (как музыка внутри игры, так и звук открытия дверей, падения шара и т. п.).
  2. Управление (привязанное к чему угодно, как классические средства ввода, так и различные геймпады).
  3. Графика и анимированные вставки.

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

В таком кадре происходит огромное количество процессов, но для понятности их можно разделить всего на три вида:

  1. Обновление. Это изменение всех предметов или явлений, происходящих за один кадр. Например, если объект подпрыгнул, его силой гравитации должно потянуть обратно к земле. Или если две движущиеся машины сталкиваются, то они должны отскочить друг от друга и получить повреждения.
  2. Ввод. Реакция программы на то, что происходит вне поля кода. То есть клики мышкой, какие-либо нажатия клавиатуры, управление стиками геймпада.
  3. Прорисовка. Этап, на котором код превращается в фон, персонажей, выпадающее меню, окружающую среду и прочие вещи, которые пользователь должен увидеть при взаимодействии.

Скорость работы цикла

FPS или Frames Per Second – количество кадров в секунду. Термин, знакомый любому геймеру. Многие знают только то, что для комфортной игры это значение должно быть больше 60. Программисты же понимают термин так: значение, указывающее количество повторений цикла за одну секунду.

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

Практика

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

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


Первая и вторая строка отвечает за библиотеки, а все остальные — за разрешение окна и количество обновления циклов за секунду.

Теперь откроем само окно игры. Первая строчка запускает игровую библиотеку. Третья выполняет развертывание окна по заданным изначально параметрам, у нас это 1024x720. Пятая создается для того, чтобы мы могли убедиться в правильности частоты кадров.


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

Отрисовка

У нас нет ничего, кроме окна с фоном, с ним и будем работать. Можно его залить цветом, но как? Сколько цветов может обрабатывать компьютер?

Чтобы вычислить это значение, необходимо возвести число 256 в третью степень. Получим значение 16 777 216. Многовато для запоминания.

Экран состоит из пикселей, и каждый может обработать три базовых цвета: зеленый, синий, и красный. Цвет определенного пикселя зависит от того, как горят базовые. Ниже представлена таблица RGB цветов.

Красный Зеленый Синий Цвет
0 0 0 Черный
255 0 0 Красный
0 255 0 Зеленый
0 0 255 Синий
0 255 Голубой
255 255 0 Желтый
255 0 255 Пурпурный
255 255 255 Белый

Каждый из цветов имеет значение от 0 до 256, где 0 — это выключенная функция, а 255 — включенная на максимум. Таким образом, регулируя три основных цвета, можно добиться нужного. Поэтому таблицу цветов назвали RGB, по аналогии с заглавными буквами трех основных цветов.

Теперь мы знаем, как отображаются цвета, и можем залить весь экран, например, желтым. Это сложный цвет, состоящий из двух.

YELLOW = (255, 255, 0)

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

Двойная буферизация

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

К нашей команде screen.fill(YELLOW) добавляем строку pygame.display.flip, и все начинает работать.

Эта функция должна находиться в самом конце отрисовки, иначе содержимое, которое задано после флипа, просто не отобразится на экране пользователя.

События

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

Закрытие – функция, которая должна быть сообщена программе для того, чтобы была возможность считать её и завершить процесс. Если проще, чтобы значение TRUE было заменено на FALSE.

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

Использовать окно кода просто чтобы создать статичную картинку – недостаточно. Pygame хранит все события, которые происходили с момента отрисовки последнего кадра. Язык не будет пропускать команды, сколько бы их ни было. Программа в окне создает список действий, а цикл FOR пройдет по всем.

Одно из важнейших событий pygame.QUIT, оно запускается после нажатия крестика и меняет значение переменной Running с TRUE на FALSE, тем самым заканчивая игровой цикл.

Шаблон

В конечном итоге у нас должен появиться вот такой вот шаблон для написания проекта на pygame.


Последней, 30-й, строчкой обязательно пишем окончание программы, чтобы она нормально закрывалась.

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

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

Кроме того, мы можем нарисовать несколько простейших объектов:

  • Line (создание линии);
  • Circle(создает окружность);
  • Rect (создает квадрат).

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

В конце цикла всегда надо обновлять сцену, чтобы на ней отрисовывались кадры, за это отвечает команда pygame.display.update

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

Создание простейшей игры с числами

Давайте рассмотрим проект по созданию числовой игры на определение. Исходя из текста выше, попытайтесь проанализировать строки и понять, за что каждая отвечает.


1 и 3 строка отвечают за то, чтобы переменной NTG было задано число от 0 до 200, а также чтобы число пользователя изначально было -1.

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

Строки с 6 до 10 делают основную работу и дают игроку подсказки, в какую сторону отличается написанное число. Если оно совпадет с NTG, выведется строчка, поздравляющая с победой (11).

Последняя, 13, отвечает за конец игры и завершение цикла. Второй способ, чтобы не проставлять значения TRUE и FALSE.

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

YELLOW = (255, 255, 0)

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

Змейка

Создавать игру будем с помощью виджета Canvas. Это нужно для того, чтобы задать объекты изображениями. Также это поможет зарегистрировать столкновение и закончить игру.

Всего возьмем 5 переменных:

  1. DELAY – скорость игры.
  2. ALL_DOTS – количество сегментов змейки, которое может быть.
  3. RAND_POS – чтобы яблоко появлялось в случайной точке.
  4. HEIGHT и WIDTH – отвечают за размер игрового поля.
  5. DOT_SIZE – размер одного сегмента и яблока.

Зададим два массива:

В них сохраняются все соединения нашего существа.


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

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


Этими командами мы создадим изображения на холсте. За это отвечает команда image. Если мы хотим, чтобы изображение появлялось около границ окна, нам нужно задать параметр anchor на NW (North и West). А с помощью параметра tag можем отслеживать и идентифицировать все изображения и объекты в окне. Одним тегом можно обозначить группу объектов в нашей игре.

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

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

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

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

Вывод

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

Создание анимации с Python и Pygame

Создание анимации достаточно увлекательное занятие. И Python как нельзя лучше подходит для этого. Фреймворк Pygame уже содержит встроенные методы работы с анимацией.

Мы будем создавать анимацию с помощью последовательности кадров. Каждый кадр будет взят из общего изображения - атласа спрайтов. При помощи метода subsurface содержащимся в Pygame мы будем делить изображение на части и записывать их в список. Все это будет производиться в цикле.

Скачаем изображение с любым персонажем, например:

Изображение

Создадим файл image_animation.py:

import pygame
from pygame.constants import QUIT, K_ESCAPE, KEYDOWN

if __name__ == "__main__":
x = float(input("Fps:"))
my_animation(12, 4, 48, x, "image", (300, 300))

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

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

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

Платформа, позволяющая изучить компьютерные науки. Красочная анимация и интересный сюжет, взаимодействие с другими игроками. В игре поддерживается множество языков, в том числе и Python. Подходит для детей от 10 лет, можно увлечь даже самого неусидчивого ученика. На каждом уровне перед игроком ставится задача, например, найти гриб, который поможет одолеть противника, провести в бой солдат или выбраться из темницы. Игрок управляет начинающим волшебником, который выполняет задания с помощью команд JavaScript или Python. В процессе команды будут усложняться.

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

В игре ЛайтБот нужно будет посредством команд управлять роботом, включать свет на клетках. Чтобы пройти уровень, необходимо зажечь свет во всех клетках. С каждым разом клеток становится все больше, а возможных команд для персонажа — меньше. Но зато у вас появляется возможность использования условных операторов, циклов и других конструкций для построения оптимального пути. Игра понравится людям любой возрастной категории, так как в ней есть уровни с различными категориями сложности.

Minecraft — компьютерная инди-игра в жанре песочницы.

В этом видеоуроке вы научитесь разыгрывать других игроков: создать зону ловушек в Майнкрафт с помощью Пайтон за 6 минут!

А еще вы можете сделать секретный замок на дверь в Minecraft с помощью Python.

Поддерживает более 25 языков программирования, в том числе и Python. Обучает программированию с нуля, но в нее могут играть и профи. Здесь можно выбрать подходящий язык и начать выполнять задания, начиная от уничтожения космических кораблей, заканчивая построением более сложных алгоритмов для управлением персонажа. Плюсы игры в том, что она никогда не надоест, ведь здесь множество разнообразных задач. Также здесь можно играть с друзьями, здесь же проводятся международные соревнования.

Образовательная онлайн-платформа, которая поможет в программировании даже самым маленьким (с 6 лет). Платформа познакомит в игровой форме с основными концепциями: последовательностью, повтором и условиями.

Занятия включают в себя упражнения, викторины, головоломки и практику. С помощью этой платформы вы научитесь создавать приложения, игры, истории, анимации, поймете логику программирования не только Python, но и Swift, JavaScript.

Здесь игрок должен набирать мощность базы, выигрывать битвы, улучшать армию роботов и добывать золото. Но самое интересное заключается в том, что игра делит пользователей на два лагеря, которые противостоят друг другу — JavaScript и Python. Каждый игрок выбирает лагерь и управляет базой с помощью кода по названию своего лагеря. Но подойдет стратегия и новичкам: здесь есть множество подсказок, которые помогут выполнять задания.

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