Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 10, 2020 16:43:23

panama555
Зарегистрирован: 2019-02-19
Сообщения: 175
Репутация: +  4  -
Профиль   Отправить e-mail  

как правильно писать программу в Pygame?

Привет!
Я сейчас занимаюсь написанием игровой программы. Это копия игры lines.
(На игровом поле появляются шарики которые нужно поставить по 5 в ряд и т.д.) Дело не в этом.
Я не могу понять принцип написания такого вида программ.
Конкретно:
у меня есть несколько спрайтов(класс Ball). Они объединены в группу. Предположим я кликнул по одному спрайту(шарику).
Я хочу, чтобы он начал немного подпрыгивать. Что я делаю?
Я просматриваю всю группу спрайтов(шариков), определяю спрайт по которому я кликнул и его атрибуту
(например, self.activ) присваиваю значение True.
При этом у меня постоянно “выполняется” цикл while (50раз/сек), который рисует фон, спрайты и (главное) выполняет для всех спрайтов группы метод update().
Мне приходится в методе update класса Ball вставить условный оператор (if self.activ, который рассчитывает сдвиг координат спрайта(шарика)
Это у меня всё работает. Но возникает вопрос: я, вообще, правильно понял принцип программирования подобных программ. Мне казалось, что принцип программирование ООП в том, что я должен вызвать нужный мне метод(тот который отвечает за подпрыгивание) и забыть о нём(пусть сам выполняется).
А в моей программе получается, что всё выполняет метод update!!!
С этим можно смериться пока действия спрайта(шарика) простые. А дальше спрайту нужно будет подпрыгивать и двигаться при этом!
У меня вопрос:
я правильно или не правильно использую возможности pygame?
как нужно правильно использовать возможности pygame?

Офлайн

#2 Янв. 12, 2020 14:24:33

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

как правильно писать программу в Pygame?

panama555
я, вообще, правильно понял принцип программирования подобных программ. Мне казалось, что принцип программирование ООП в том, что я должен вызвать нужный мне метод(тот который отвечает за подпрыгивание) и забыть о нём(пусть сам выполняется).
В идеале так оно и есть, другое дело как написать программу чтобы оно именно так и работало .Насчет pygame тяжело сказать я не спец именно в пайгейме, но ИМХО вам стоит посмотреть в на MVC паттерн.
вот MVC паттерн на примере сапера http://itnotesblog.ru/note.php?id=10, это конечно не лайнес, но думаю вам будет интересно.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Янв. 12, 2020 14:27:40)

Офлайн

#3 Янв. 12, 2020 20:09:15

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

как правильно писать программу в Pygame?

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



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Отредактировано AD0DE412 (Янв. 12, 2020 20:19:17)

Офлайн

#4 Янв. 13, 2020 02:34:13

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

как правильно писать программу в Pygame?

panama555
Я не могу понять принцип написания такого вида программ.
Так это можно написать в парадигме структурного программирования, а можно написать в парадигме объектно-ориентированного программирования.

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

В парадигме объектно-ориентированного программирования у тебя всё должно состоять из объектов, передающих друг другу сообщения.
У тебя должен быть класс доски, с помощью которого ты делаешь объект доски; должен быть класс шарик, с помощью которого ты делаешь объект шарик. А потом объект доски посылает сообщение шарику нарисоваться, а шарик, нарисовавшись, посылает доске сообщение о готовности.



Отредактировано py.user.next (Янв. 13, 2020 02:35:49)

Офлайн

#5 Янв. 25, 2020 17:01:55

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

как правильно писать программу в Pygame?


panama555 есть такая игра Frets On Fire http://fretsonfire.sourceforge.net/ . Сама по себе имитирует коммерческую игру Guitar Hero. Игра полностью написана на Python с использованием библиотеки Pygame. Считаеться хорошим примером как делать игры на пайгейме благодаря открытости и простоте кода. Посмотрите как там все сделано.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version