как сделать игровое меню в pygame

Создание игр на Python 3 и Pygame: Часть 4

как сделать игровое меню в pygame. Смотреть фото как сделать игровое меню в pygame. Смотреть картинку как сделать игровое меню в pygame. Картинка про как сделать игровое меню в pygame. Фото как сделать игровое меню в pygame

Это четвёртая из пяти частей туториала, посвящённого созданию игр с помощью Python 3 и Pygame. В третьей части мы углубились в сердце Breakout и узнали, как обрабатывать события, познакомились с основным классом Breakout и увидели, как перемещать разные игровые объекты.

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

Распознавание коллизий

Столкновение мяча с ракеткой

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

Столкновение с полом

Когда ракетка пропускает мяч на пути вниз (или мяч ударяется об ракетку сбоку), то мяч продолжает падать и затем ударяется об пол. В этот момент игрок теряет жизнь и мяч создаётся заново, чтобы игра могла продолжаться. Игра завершается, когда у игрока заканчиваются жизни.

Столкновение с потолком и стенами

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

Столкновение с кирпичами

Когда мяч ударяется об кирпич, это является основным событием игры Breakout — кирпич исчезает, игрок получает очко, мяч отражается назад и происходят ещё несколько событий (звуковой эффект, а иногда и спецэффект), которые я рассмотрю позже.

Чтобы определить, что мяч ударился об кирпич, код проверят, пересекается ли какой-нибудь из кирпичей с мячом:

Программирование игрового меню

В большинстве игр есть какой-нибудь UI. В Breakout есть простое меню с двумя кнопками, ‘PLAY’ и ‘QUIT’. Меню отображается в начале игры и пропадает, когда игрок нажимает на ‘PLAY’. Давайте посмотрим, как реализуются кнопки и меню, а также как они интегрируются в игру.

Создание кнопок

В Pygame нет встроенной библиотеки UI. Есть сторонние расширения, но для меню я решил создать свои кнопки. Кнопка — это игровой объект, имеющий три состояния: нормальное, выделенное и нажатое. Нормальное состояние — это когда мышь не находится над кнопкой, а выделенное состояние — когда мышь находится над кнопкой, но левая кнопка мыши ещё не нажата. Нажатое состояние — это когда мышь находится над кнопкой и игрок нажал на левую кнопку мыши.

Кнопка реализуется как прямоугольник с фоновым цветом и текст, отображаемый поверх него. Также кнопка получает функцию on_click (по умолчанию являющуюся пустой лямбда-функцией), которая вызывается при нажатии кнопки.

Создание меню

При нажатии кнопки QUIT is_game_running принимает значение False (фактически ставя игру на паузу), а game_over присваивается значение True, что приводит к срабатыванию последовательности завершения игры.

Отображение и сокрытие игрового меню

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

Подводим итог

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

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

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

Источник

pygame-menu¶

как сделать игровое меню в pygame. Смотреть фото как сделать игровое меню в pygame. Смотреть картинку как сделать игровое меню в pygame. Картинка про как сделать игровое меню в pygame. Фото как сделать игровое меню в pygameкак сделать игровое меню в pygame. Смотреть фото как сделать игровое меню в pygame. Смотреть картинку как сделать игровое меню в pygame. Картинка про как сделать игровое меню в pygame. Фото как сделать игровое меню в pygame как сделать игровое меню в pygame. Смотреть фото как сделать игровое меню в pygame. Смотреть картинку как сделать игровое меню в pygame. Картинка про как сделать игровое меню в pygame. Фото как сделать игровое меню в pygame как сделать игровое меню в pygame. Смотреть фото как сделать игровое меню в pygame. Смотреть картинку как сделать игровое меню в pygame. Картинка про как сделать игровое меню в pygame. Фото как сделать игровое меню в pygame как сделать игровое меню в pygame. Смотреть фото как сделать игровое меню в pygame. Смотреть картинку как сделать игровое меню в pygame. Картинка про как сделать игровое меню в pygame. Фото как сделать игровое меню в pygame как сделать игровое меню в pygame. Смотреть фото как сделать игровое меню в pygame. Смотреть картинку как сделать игровое меню в pygame. Картинка про как сделать игровое меню в pygame. Фото как сделать игровое меню в pygame как сделать игровое меню в pygame. Смотреть фото как сделать игровое меню в pygame. Смотреть картинку как сделать игровое меню в pygame. Картинка про как сделать игровое меню в pygame. Фото как сделать игровое меню в pygame как сделать игровое меню в pygame. Смотреть фото как сделать игровое меню в pygame. Смотреть картинку как сделать игровое меню в pygame. Картинка про как сделать игровое меню в pygame. Фото как сделать игровое меню в pygame как сделать игровое меню в pygame. Смотреть фото как сделать игровое меню в pygame. Смотреть картинку как сделать игровое меню в pygame. Картинка про как сделать игровое меню в pygame. Фото как сделать игровое меню в pygame

Source repo on GitHub, and run it on Repl.it

Introduction¶

Pygame-menu is a python-pygame library for creating menus. It supports several widgets, such as buttons, color inputs, clock objects, drop selectors, frames, images, labels, selectors, tables, text inputs, color switches, and many more, with many options to customize.

Comprehensive documentation for the latest version is available at https://pygame-menu.readthedocs.io

Install Instructions¶

Pygame-menu can be installed via pip. Simply run:

To build the documentation from a Git repository:

First steps¶

Making games using pygame is really cool, but most games (or applications) require end-user configuration. Creating complex GUI objects to display a menu can be painful. That why pygame-menu was designed.

Here is a simple example of how to create a menu with pygame-menu (the code is available in pygame_menu.examples.simple.py):

Import the required libraries

как сделать игровое меню в pygame. Смотреть фото как сделать игровое меню в pygame. Смотреть картинку как сделать игровое меню в pygame. Картинка про как сделать игровое меню в pygame. Фото как сделать игровое меню в pygame

Interested in going deeper into menu design ?

Advanced usage¶

Widgets API¶

A menu is in fact a list of widgets arranged on the same surface. Access to a widget in a menu can easily be done with two methods:

Each pygame_menu widget and its behaviors are defined in a class. The currently existing classes are:

Источник

Создание игр на Python 3 и Pygame: Часть 4

Russian (Pусский) translation by Marat Amerov (you can also view the original English article)

Обзор

Это четвёртая из пяти частей туториала, посвящённого созданию игр с помощью Python 3 и Pygame. В третьей части мы углубились в сердце Breakout и узнали, как обрабатывать события, познакомились с основным классом Breakout и увидели, как перемещать разные игровые объекты.

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

Распознавание коллизий

Столкновение мяча с ракеткой

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

Но если он ударяется о боковую часть ракетки, то отскакивает в противоположную сторону (влево или вправо) и продолжает движение вниз, пока не столкнётся с полом. В коде используется функция intersect().

Столкновение с полом

Когда ракетка пропускает мяч на пути вниз (или мяч ударяется об ракетку сбоку), то мяч продолжает падать и затем ударяется об пол. В этот момент игрок теряет жизнь и мяч создаётся заново, чтобы игра могла продолжаться. Игра завершается, когда у игрока заканчиваются жизни.

Столкновение с потолком и стенами

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

Столкновение с кирпичами

Когда мяч ударяется об кирпич, это является основным событием игры Breakout — кирпич исчезает, игрок получает очко, мяч отражается назад и происходят ещё несколько событий (звуковой эффект, а иногда и спецэффект), которые я рассмотрю позже.

Чтобы определить, что мяч ударился об кирпич, код проверят, пересекается ли какой-нибудь из кирпичей с мячом:

Программирование игрового меню

В большинстве игр есть какой-нибудь UI. В Breakout есть простое меню с двумя кнопками, ‘PLAY’ и ‘QUIT’. Меню отображается в начале игры и пропадает, когда игрок нажимает на ‘PLAY’. Давайте посмотрим, как реализуются кнопки и меню, а также как они интегрируются в игру.

Создание кнопок

В Pygame нет встроенной библиотеки UI. Есть сторонние расширения, но для меню я решил создать свои кнопки. Кнопка — это игровой объект, имеющий три состояния: нормальное, выделенное и нажатое. Нормальное состояние — это когда мышь не находится над кнопкой, а выделенное состояние — когда мышь находится над кнопкой, но левая кнопка мыши ещё не нажата. Нажатое состояние — это когда мышь находится над кнопкой и игрок нажал на левую кнопку мыши.

Кнопка реализуется как прямоугольник с фоновым цветом и текст, отображаемый поверх него. Также кнопка получает функцию on_click (по умолчанию являющуюся пустой лямбда-функцией), которая вызывается при нажатии кнопки.

Создание меню

При нажатии кнопки QUIT is_game_running принимает значение False (фактически ставя игру на паузу), а game_over присваивается значение True, что приводит к срабатыванию последовательности завершения игры.

Отображение и сокрытие игрового меню

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

Подводим итог

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

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

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

Источник

Создание игр на Python 3 и Pygame: Часть 3

как сделать игровое меню в pygame. Смотреть фото как сделать игровое меню в pygame. Смотреть картинку как сделать игровое меню в pygame. Картинка про как сделать игровое меню в pygame. Фото как сделать игровое меню в pygame
(Остальные части туториала: первая, вторая, четвёртая, пятая.)

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

Обработка событий

В Breakout есть три типа событий: события нажатий клавиш, события мыши и события таймера. Основной цикл в классе Game обрабатывает нажатия клавиш и события мыши и передаёт их подписчикам (вызывая функцию-обработчик).

Хотя класс Game очень общий и не обладает знаниями о реализации Breakout, сама подписка и способы обработки событий очень специфичны.

Класс Breakout

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

Нужно учесть, что все события клавиш (и для левой, и для правой «стрелки») передаются одному методу-обработчику ракетки.

Обработка нажатий клавиш

Обработка событий мыши

В Breakout есть игровое меню, с которым мы скоро встретимся. Кнопка меню управляет различными событиями мыши, такими как движение и нажатия кнопок (события mouse down и mouse up). В ответ на эти события кнопка обновляет переменную внутреннего состояния. Вот код обработки мыши:

Обработка событий таймера

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

Игровой процесс

Игровой процесс (геймплей) — это то место, в котором вступают в дело правила Breakout. Геймплей заключается в перемещении различных объектов в ответ на события и в изменении состояния игры на основании их взаимодействий.

Перемещение ракетки

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

Перемещение мяча

Задание исходной скорости мяча

Подведём итог

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

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

Источник

Создание игр на Python 3 и Pygame: Часть 5

как сделать игровое меню в pygame. Смотреть фото как сделать игровое меню в pygame. Смотреть картинку как сделать игровое меню в pygame. Картинка про как сделать игровое меню в pygame. Фото как сделать игровое меню в pygame

Это последняя из пяти частей туториала, посвящённого созданию игр с помощью Python 3 и PyGame. В четвёртой части мы научились распознавать коллизии, реагировать на то, что мяч сталкивается с разными игровыми объектами и создали игровое меню с собственными кнопками.

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

Конец игры

Рано или поздно игра должна закончиться. В этой версии Breakout игра заканчивается одним из двух способов: игрок или теряет все свои жизни, или разрушает все кирпичи. Следующего уровня в игре нет (но его легко можно будет добавить).

Game Over!

Полю game_over класса Game присваивается значение False в методе __init__() класса Game. Основной цикл продолжается до тех пор, пока переменная game_over не изменит значение на True:

Всё это происходит в классе Breakout в следующих случаях:

Отображение сообщения о конце игры

Обычно при завершении игры мы не хотим, чтобы окно игры молча пропадало. Исключением является случай, когда мы нажимаем на кнопку QUIT в меню. Когда игрок теряет последнюю жизнь, Breakout показывает традиционное сообщение ‘GAME OVER!’, а когда игрок выигрывает, она показывает сообщение ‘YOU WIN!’

Вот как выглядит функция show_message() :

Сохранение рекордов между играми

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

Добавление звуковых эффектов и музыки

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

Звуковые эффекты

Давайте посмотрим, как эти звуковые эффекты загружаются и воспроизводятся в нужное время. Во-первых, для воспроизведения звуковых эффектов (или фоновой музыки) нам нужно инициализировать звуковую систему Pygame. Это делается в классе Game: pygame.mixer.pre_init(44100, 16, 2, 4096)

Затем в классе Breakout все звуковые эффекты загружаются из config в объект pygame.mixer.Sound и хранятся в словаре:

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

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

Запись собственных звуковых эффектов и сообщений

Запись собственных звуковых эффектов может быть простым и приносящим удовольствие занятием. В отличие от создания визуальных ресурсов, для него не требуется большого таланта. Кто угодно может сказать «Бум!» или «Прыг», или крикнуть «Вас убили. Повезёт в другой раз!»

Я часто прошу своих детей записывать звуковые эффекты и голосовые сообщения, сопровождающие текстовые сообщения, например ‘YOU WIN!’ или ‘GAME OVER!’ Единственное ограничение здесь — собственное воображение.

Воспроизведение фоновой музыки

Одновременно может играть только одна фоновая музыка. Однако поверх фоновой музыки может воспроизводиться несколько звуковых эффектов. Именно это называется микшированием.

Добавление расширенных возможностей

Давайте сделаем что-то любопытное. Разрушать кирпичи мячом интересно, но довольно быстро надоедает. Как насчёт общей системы спецэффектов? Мы разработаем расширяемую систему спецэффектов, связанную с некоторыми кирпичами, которая активируется при ударе мяча об кирпич.

Вот каким будет план. У эффектов есть время жизни. Эффект начинается, когда разрушается кирпич и заканчивается, когда завершается время действия эффекта. Что случится, если мяч ударится об другой кирпич со спецэффектом? В теории, можно создать сочетаемые эффекты, но чтобы упростить всё в исходной реализации активный эффект будет останавливаться, а новый эффект занимать его место.

Система спецэффектов

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

При создании кирпичей им может назначаться один из спецэффектов. Вот код:

Класс Brick имеет поле effect, которое обычно имеет значение None, но может (с вероятностью в 30%) содержать один из определённых выше спецэффектов. Заметьте, что этот код не знает о том, какие эффекты существуют. Он просто получает эффект и цвет кирпича и при необходимости назначает их.

В этой версии Breakout я выполняю срабатывание эффектов только при ударе об кирпич, но можно придумать и другие варианты срабатывания событий. Предыдущий эффект сбрасывается (если он существовал), а затем запускается новый эффект. Функция сброса и время запуска эффекта хранятся для будущего использования.

Увеличение ракетки

Эффект длинной ракетки заключается в увеличении ракетки на 50%. Её функция сброса возвращает ракетку к обычным размерам. Кирпич имеет цвет Orange:

Замедление мяча

Ещё один эффект, помогающий в погоне за мячом, заключается замедлении мяча, то есть уменьшении его скорости на одну единицу. Кирпич имеет цвет Aquamarine.

Больше очков

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

Дополнительные жизни

Наконец, очень полезным эффектом будет эффект дополнительных жизней. Он просто даёт вам ещё одну жизнь. Для него не нужен сброс. Кирпич имеет цвет gold.

Возможности, которые можно добавить в будущем

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

Переход на следующий уровень

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

Второй мяч

Эффект временного добавления второго мяча создаст огромный хаос. Сложность здесь в том, чтобы обрабатывать оба мяча как равные, вне зависимости от того, какой из них является исходным. Когда один мяч пропадает, игра продолжается с единственным оставшимся. Жизнь при этом не теряется.

Сохраняющиеся рекорды

Когда у вас есть уровни с увеличивающейся сложностью, желательно создать таблицу рекордов. Можно хранить рекорды в файле, чтобы они сохранялись после игры. Когда игрок побивает рекорд, можно добавить маленькие пиццы или позволить ему написать имя (традиционно всего из трёх символов).

Бомбы и бонусы

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

Подведём итог

Разработка Breakout с помощью Python 3 и Pygame оказалась очень увлекательным занятием. Это очень мощное сочетание для создания 2D-игр (и для 3D-игр тоже). Если вы любите Python и хотите создавать собственные игры, то не колеблясь выбирайте Pygame.

Я совершенно точно буду создавать на Python и Pygame и другие игры.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *