Како да програмирате игри на python со помош на библиотеката pygame
Оваа статија е наменета за оние кои веќе се запознаени со програмскиот јазик на Python, и ви овозможува да ја прочитате библиотеката за Pygame за овој јазик. Како визуелен пример, овде е прикажан едноставен процес на програмирање, во кој играчот мора да донира од скокање топки.
Чекори
Дел 1 од 8:
Инсталирање на PygameЕден. Преземи Pygame. Следете ја врската и пронајдете ја библиотечната верзија погодна за вашата платформа: http: // Pygame.Org / преземање.shtml .
2. Стартувај го инсталаторот.
3. Осигурајте се дека инсталацијата успешно заврши. Отворете го терминалот Python. Внесете "увоз pygame". Ако пораките за грешки не се појавуваат, тогаш Pygame беше успешно инсталиран.
Увоз Pygame
Дел 2 од 8:
Креирање на главниот прозорец за игриЕден. Креирај нова датотека.
2. Увоз Pygame. Pygame е библиотека која имплементира пристап до Python програмски јазик графички функции. Ако сакате да дознаете повеќе за тоа како функционираат овие функции, информациите се достапни на Pygame. https: // Pygame.Org / docs /
Увоз PygeMefrom Pygame.Локалците увоз *
3. Наведете ја големината на прозорецот за игри. Направете глобална променлива за големини на прозорци за да се однесувате на него од различни делови на играта. За погодност, овие параметри се подобри да наведат на почетокот на датотеката, така што ако е потребно, полесно е да се смени во иднина. За посложени проекти, тоа ќе биде подобро да се направат такви податоци во посебна датотека.
Резолуција = (400.300)
Четири. Одреди неколку бои. Боите во Pygame се дефинирани во формат на RGBA кои се движат од 0 до 255. Вредноста на алфа (А) може да се изостави, но остатокот од боите (црвени, зелени и сини) се потребни за полнење.
Бело = (255.255,255) black = (0.0.0) Red = (255.0.0)
Пет. Иницијализирајте го главниот екран. Користете ја променливата резолуција дефинирана порано.
Екран = Pygame.Екранот.Set_mode (резолуција)
6. Креирај циклус на играта. Поставете го повторувањето на одредени активности во секоја рамка на играта. Направете циклус кој постојано ќе ги извршува сите овие акции.
Додека е точно:
7. Определете ја бојата на пополнувањето на екранот.
Екран.Пополнете (бел)
осум. Прикажете го екранот. Ако ја започнете програмата во оваа фаза, екранот е насликан со бел, а потоа програмата ќе го запре итната ситуација. Причината за неуспехот ќе биде дека оперативниот систем ги испраќа настаните од програмата, а програмата едноставно не продолжува. Кога програмата акумулира премногу нетретирани настани, се појавува неуспех.
Додека е точно:...Pygame.Прикажи.Флип ()
Девет. Спроведување на обработка на настани. Добијте листа на сите настани што се појавија помеѓу цртање рамки. Во нашиот пример треба да се грижите за обработка на само еден излез настан (quit). Се случува кога корисникот го затвора прозорецот за игри. Обработката на настанот ќе ја спречи неуспехот на програмата од изгледот на премногу настани.
Додека е точно:...За настан во Pygame.Настан.Добијте (): Ако настанот.Тип == Quit: Pygame.QUIT ()

10. Пробајте ја програмата! Сега програмскиот код треба да изгледа вака:
Увоз PygeMefrom Pygame.Lighans Import * Резолуција = (400.300) бела = (255.255.255) Блек = (0.0.0) Red = (255,0,0,0) Екран = Pygame.Прикажи.Set_mode (резолуција) додека е вистинит: екран.Пополнете (бел) Pygame.Прикажи.Флип () за настан во Pygame.Настан.Добијте (): Ако настанот.Тип == Quit: Pygame.QUIT ()
Дел 3 од 8:
Создавање игри објектиЕден. Креирај нова класа на објекти и неговиот дизајнер. Поставете ги сите својства на објектот. Исто така, дефинирајте ги стандардните вредности за секој од својствата.
Класа топка: def __init __ (само, xpos = резолуција [0] / 2, ypos = резолуција [1] / 2, xvel = 1, yvel = 1, rad = 15): себе.x = xposself.Y = yposself.Dx = xveleself.Dy = yvelel себе.Радиус = здружен.Тип = "топка"
2. Го одредува цртежот на објектот. Користете ги својствата на објектот наведени во конструкторот за да ја прикажете топката како круг на површината што се пренесува на функцијата на функцијата. Површината ќе биде екранот што го создадовте порано со дефинирање на неговите димензии.
Def Draw (само, површината): Pygame.Подготви.Круг (површина, црна, (јас.X, себе.y), себе.Радиус)
3. Креирајте класна инстанца и додадете работа на циклусот на играта за да нацртате топка во секоја итерација на циклусот.
Топка = топка () додека е точно:...Топка.Нацртај (екран)
Четири. Направете го објектниот потег. Креирајте функција која ја ажурира позицијата на објектот. Повикајте ја оваа функција во секоја итерација на циклусот.
Класа топка:...Def update (само): себе.X + = јас.Dxelf.Y + = јас.DY
Пет. Ограничете ја фреквенцијата на рамката. Топката ќе се движи многу брзо, бидејќи циклусот на играта се повторува стотици пати во секунда. Користете го тајмерот на Pygame за да ја ограничите фреквенцијата на промена на рамката на 60 fps.
Часовник = pygame.Време.Часовник () додека е точно:...ЧАСОВНИК.Откажи (60)
Класа топка:...Деф Ажурирање (само):...Ако (себе.X <= 0 or self.x >= Резолуција [0]): себе.Dx * = -1if (себе.y <= 0 or self.y >= Резолуција [1]): себе.DY * = -1

Увоз PygeMefrom Pygame.Lighans Import * Резолуција = (400.300) бела = (255.255.255) Блек = (0.0.0) Red = (255,0,0,0) Екран = Pygame.Прикажи.Set_mode (резолуција) класа топка: def __init __ (само, xpos = резолуција [0] / 2, yspo: резолуција [1] / 2, xvel = 1, yvel = 1, rad = 15): себе.x = xposself.Y = yposself.Dx = xveleself.Dy = yvelel себе.Радиус = здружен.Type = "топка" дефинирајте (само, површината): pygame.Подготви.Круг (површина, црна, (јас.X, себе.y), себе.Радиус) def update: себе.X + = јас.Dxelf.Y + = јас.Dyif (себе.X <= 0 or self.x >= Резолуција [0]): себе.Dx * = -1if (себе.Y <= 0 or self.y >= Резолуција [1]): себе.dy * = -1ball = топка () часовник = pygame.Време.Часовник () додека е вистинит: екран.Пополнете (бела) топка.Нацртај (екран) топка.Ажурирање () Pygame.Прикажи.Флип () часовник.Откажи (60) за настан во Pygame.Настан.Добијте (): Ако настанот.Тип == Quit: Pygame.QUIT ()
Дел 4 од 8:
Структурирање игриЕден. Користете часови за структурирање. Во иднина, играта ќе стане посложена. Користете објектно-ориентирани програмски техники за структурирање на кодот.
2. Конвертирај го циклусот на игра во класа. Бидејќи во моментот играта веќе вклучува податоци, вклучувајќи игра и функции, има смисла да го замени циклусот на играта на класа.
Класа игра ():
3. Додај го дизајнерот. Со тоа, вие негирате неколку предмети што се користат во играта, креирајте екран, тајмер и иницијализира Pygame. Pygame мора да се иницијализира со цел понатамошно користење на такви способности како текст или звук.
Класа игра (): def __init __ (само): pygame.Init () себе.Екран = Pygame.Екранот.Set_mode (резолуција) себе.Часовник = pygame.Време.Часовник ()
Четири. Поставете ја обработката на настаните во функцијата.
Класа игра ():...DEF RONEEESTEES (Само): За настанот во Pygame.Настан.Добијте (): Ако настанот.Тип == Quit: Pygame.QUIT ()
Пет. Направете циклус на играта со функција. Функција за обработка на настани во секоја итерација на циклусот.
Класа игра ():...Def Run (само): додека е точно: себе.Управуватели () себе.Екран.Пополнете (бел) себе.ЧАСОВНИК.Откажи (60) Pygame.Прикажи.Флип ()
6. Поставете обработка на повеќе објекти на игра. Во оваа фаза, играта кодот предизвикува ажурирање и прецртување на поединечни предмети во секоја рамка. Со овој пристап, кодот на играта ќе биде доста гломазна и неуредно, особено ако има многу предмети во играта. Поморно е прво да додадете објекти на низа, а потоа да ги ажурирате и прецртате сите објекти во низата во секоја итерација на циклусот. Сега можете лесно да направите нов објект во играта и да одредите друга почетна позиција за тоа.
Класа игра (): Def __init __ (само):...Себе.GameObjects = [] себе.GameObjects.Додадете (топката ()) себе.GameObjects.Додадете (топка (100))...Def Run (само): додека е точно: себе.Управуватели () за Gameobj во себе.GameObjects: Gameobj.Ажурирање () себе.Екран.Пополнете (бел) за Gameobj во себе.GameObjects: Gameobj.Нацртај (само.Екран) себе.ЧАСОВНИК.Откажи (60) Pygame.Прикажи.Флип ()

7. Пробајте ја програмата! Сега програмскиот код треба да изгледа вака:
Увоз PygeMefrom Pygame.Lighans Import * Резолуција = (400.300) бела = (255.255.255) Блек = (0.0.0) Red = (255,0,0,0) Екран = Pygame.Прикажи.Set_mode (резолуција) класа топка: def __init __ (само, xpos = резолуција [0] / 2, yspo: резолуција [1] / 2, xvel = 1, yvel = 1, rad = 15): себе.x = xposself.Y = yposself.Dx = xveleself.Dy = yvelel себе.Радиус = здружен.Type = "топка" дефинирајте (само, површината): pygame.Подготви.Круг (површина, црна, (јас.X, себе.y), себе.Радиус) def update: себе.X + = јас.Dxelf.Y + = себе.Dyif (себе.X <= 0 or self.x >= Резолуција [0]): себе.Dx * = -1if (себе.y <= 0 or self.y >= Резолуција [1]): себе.dy * = -1class игра (): def __init __ (само): pygame.Init () себе.Екран = Pygame.Прикажи.Set_mode (резолуција) себе.Часовник = pygame.Време.Часовник () себе.GameObjects = [] себе.GameObjects.Додадете (топката ()) себе.GameObjects.Додај (топката (100)) def dropeelevents (само): за настан во Pygame.Настан.Добијте (): Ако настанот.Тип == Quit: Pygame.Quit () def rune (само): додека е точно: себе.Управуватели () за Gameobj во себе.GameObjects: Gameobj.Ажурирање () себе.Екран.Пополнете (бел) за Gameobj во себе.GameObjects: Gameobj.Нацртај (само.Екран) себе.ЧАСОВНИК.Откажи (60) Pygame.Екранот.Флип () игра ().Стартувај ()
Дел 5 од 8:
Додавање објект "играч"Еден. Креирајте класа на играч и неговиот дизајнер. Треба да креирате друг круг контролиран од движењето на глувчето. Иницијализирајте ги параметрите во дизајнерот. Единствената важна вредност ќе биде радиусот.
Класа плеер: def __init __ (само, rad = 20): себе.x = 0.Y = 0.Радиус = рад
2. Определете го цртежот на објектот на играчот. Тоа е нацртано слично на тоа како беа извлечени други игри објекти.
Класа плеер:...Def Draw (само, површината): Pygame.Подготви.Круг (површина, црвена, (јас.X, себе.y), себе.Радиус)
3. Додај контрола на глувчето за играч објект. Во секоја рамка на играта треба да ја проверите позицијата на покажувачот на глувчето и да ја поврзете позицијата на објектот на играчот со оваа точка.
Класа плеер:...Деф Ажурирање (само): Кабел = Pygame.Глувчето.get_pos () себе.X = кабел [0] себе.Y = кабел [1]
Четири. Додај го објектот на играчот на низата GameObjects. Направете нова инстанца на објектот и додајте го на листата на GameObjects.
Класа игра (): Def __init __ (само):...Себе.GameObjects.Додај (играч ())

Пет. Пробајте ја програмата! Сега програмскиот код треба да изгледа вака:
Увоз PygeMefrom Pygame.Lighans Import * Резолуција = (400.300) бела = (255.255.255) Блек = (0.0.0) Red = (255,0,0,0) Екран = Pygame.Екранот.Set_mode (резолуција) класа топка: def __init __ (само, xpos = резолуција [0] / 2, yspo: резолуција [1] / 2, xvel = 1, yvel = 1, rad = 15): себе.x = xposself.Y = yposself.Dx = xveleself.Dy = yvelel себе.Радиус = здружен.Type = "топка" дефинирајте (само, површината): pygame.Подготви.Круг (површина, црна, (јас.X, себе.y), себе.Радиус) def update: себе.X + = јас.Dxelf.Y + = јас.Dyif (себе.X <= 0 or self.x >= Резолуција [0]): себе.Dx * = -1if (себе.Y <= 0 or self.y >= Резолуција [1]): себе.Dy * = -1class плеер: def __init __ (само, rad = 20): себе.x = 0.Y = 0.Радиус = здружен.Type = "плеер" деф нацртан (само, површина): pygame.Подготви.Круг (површина, црвена, (јас.X, себе.y), себе.Радиус) Def Update (Self): Cort = Pygame.Глувчето.get_pos () себе.X = кабел [0] себе.Y = кабел [1] класа игра (): Def __init __ (само): pygame.Init () себе.Екран = Pygame.Прикажи.Set_mode (резолуција) себе.Часовник = pygame.Време.Часовник () себе.GameObjects = [] себе.GameObjects.Додадете (играч ()) себе.GameObjects.Додадете (топката ()) себе.GameObjects.Додај (топката (100)) def dropeelevents (само): за настан во Pygame.Настан.Добијте (): Ако настанот.Тип == Quit: Pygame.Quit () def rune (само): додека е точно: себе.Управуватели () за Gameobj во себе.GameObjects: Gameobj.Ажурирање () себе.Екран.Пополнете (бел) за Gameobj во себе.GameObjects: Gameobj.Нацртај (само.Екран) себе.ЧАСОВНИК.Откажи (60) Pygame.Екранот.Флип () игра ().Стартувај ()
Дел 6 од 8:
Креирање на објект интеракцијаЕден. Промена на функции за ажурирање на позицијата. За спроведување на интеракцијата на објекти, неопходно е да им се обезбеди пристап до едни со други својства. Додајте нов параметар за функцијата за ажурирање за да ги префрлите податоците за листата на GameObjects. Параметарот мора да се додаде на часовите на играчот и топката. Ако имате многу часови, наследството ќе ви помогне да ја зачувате листата на параметри исто.
Класа топка:...DEF UPDATE (само, GameObjects):...Класа плеер:...DEF UPDATE (само, GameObjects):
2. Внесете проверки на судирот на плеерот со топки. Погледнете ги сите објекти и ги дефинирајте меѓу нив кои се однесуваат на топки. Потоа, користејќи го радиусот на објекти и формулата за одредување на растојанието, проверете дали предметите се судрија едни со други. Проверете судири помеѓу кругови е лесно. Ова е главната причина што како пример во оваа игра, бројките на друга форма не се користат.
Класа плеер:...DEF UPDATE (само, GameObjects):...За GameobJ во GameObjects: Ако Gooby.Тип == "Бол": Ако (GameObJ.X - себе.x) ** 2 + (Gameobj.Y-јас.y) ** 2 <= (gameObj.radius + self.radius)**2:

3. Поставете го крајот на играта кога играч судир со топката. Во оваа фаза, едноставно го постави излезот од играта.
Ако (Gameobj.X - себе.x) ** 2 + (Gameobj.Y-јас.y) ** 2 <= (gameObj.radius + self.radius)**2:pygame.quit()
Четири. Пробајте ја програмата! Сега програмскиот код треба да изгледа вака:
Увоз PygeMefrom Pygame.Lighans Import * Резолуција = (400, 300) white = (255.255,255) Блек = (0,0,0) Црвено = (255,0,0,0,0) екранот = pygame.Екранот.Set_mode (резолуција) класа топка: def __init __ (само, xpos = резолуција [0] / 2, yspo: резолуција [1] / 2, xvel = 1, yvel = 1, rad = 15): себе.x = xposself.Y = yposself.Dx = xveleself.Dy = yvelel себе.Радиус = здружен.Type = "топка" дефинирајте (само, површината): pygame.Подготви.Круг (површина, црна, (јас.X, себе.y), себе.Радиус) def update (само, GameObjects): себе.X + = јас.Dxelf.Y + = себе.Dyif (себе.X <= 0 or self.x >= Резолуција [0]): себе.Dx * = -1if (себе.y <= 0 or self.y >= Резолуција [1]): себе.Dy * = -1class плеер: def __init __ (само, rad = 20): себе.x = 0.Y = 0.Радиус = здружен.Type = "плеер" деф нацртан (само, површина): pygame.Подготви.Круг (површина, црвена, (јас.X, себе.y), себе.Радиус) Деф Ажурирај (само, GameObjects): Кабел = Pygame.Глувчето.get_pos () себе.X = кабел [0] себе.Y = кабел [1] За Gameobj во GameObjects: Ако Gameobj.Тип == "Бол": Ако (GameObJ.X - себе.x) ** 2 + (GameObJ.Y-јас.y) ** 2 <= (gameObj.radius + self.radius)**2:pygame.quit()class game():def __init__(self):pygame.init()self.screen = pygame.display.set_mode(resolution)self.clock = pygame.time.Clock()self.gameObjects = []self.gameObjects.append(Player())self.gameObjects.append(Ball())self.gameObjects.append(Ball(100))def handleEvents(self):for event in pygame.event.get():if event.type == QUIT:pygame.quit()def run(self):while True:self.handleEvents()for gameObj in self.gameObjects:gameObj.update(self.gameObjects)self.screen.fill(white)for gameObj in self.gameObjects:gameObj.draw(self.screen)self.clock.tick(60)pygame.display.flip()game().run()
Дел 7 од 8:
Додавање на гејмерски контролер за креирање на објектиЕден. Креирајте класа контролер за игри. Контролорите на играта се одговорни за текот на играта. Тие не се совпаѓаат со класата на самата игра, која е одговорна за цртање и ажурирање на сите објекти на играта. Контролорот периодично ќе додаде нова топка на екранот и ќе ја комплицира играта. Додајте го дизајнерот и иницијализирајте некои почетни вредности. Интервалот ќе значи време преку кое ќе се додаде нова топка.
Класа GameController: Def __init __ (само, интервал = 5): себе.Интер = интервали.Следно = Pygame.Време.get_ticks () + (2 * 1000) себе.Тип = "Контролер за игра"
2. Додадете ја функцијата за ажурирање. Тоа ќе провери колку време поминало од додавање на претходната топка или од почетокот на играта. Ако времето го надминува наведениот интервал, тајмерот ќе се ресетира и новата топка е додадена.
Класа GameControler:...DEF UPDATE (само, GameObjects): Ако само.Следно < pygame.time.get_ticks():self.next = pygame.time.get_ticks() + (self.inter * 1000)gameObjects.append(Ball())
3. Инсталирајте случајни брзини за топки. За да ја направите играта да се однесува поинаку, неопходно е да се дозволи да користи случајни броеви за брзина параметар. Сега брзината на топки ќе биде одредена со лебдечки децимален број, а не цел број.
Класа GameControler:...DEF UPDATE (само, GameObjects): Ако само.Следно < pygame.time.get_ticks():self.next = pygame.time.get_ticks() + (self.inter * 1000)gameObjects.append(Ball(xVel=random()*2, yVel=random()*2))
Четири. Исправи ја карактеристиката на цртежот. Функцијата Draw не работи со лебдечки запирки (плови). Затоа, неопходно е да се изрази позицијата на топката во цели броеви пред да го извади.
Класа топка:...Def Draw (само, површината): Pygame.Подготви.Круг (површина, црна, (int (јас.x), int (јас.y)), себе.Радиус)
Пет. Определете го методот на цртање за контролорот на играта. Бидејќи ова е исто така игра објект, во главниот циклус на играта ќе има обид да го нацрта. Затоа, за контролорот, неопходно е да се одреди функцијата на цртежот, што не не прави ништо за да се избегне неуспехот на играта.
Класа GameControler:...Def Draw (само, екран): помине
6. Додади контролер за игра во GameObjects и отстрани 2 топки. Играта мора да додаде нова топка на секои 5 секунди.
Класа игра (): Def __init __ (само):...Себе.GameObjects = [] себе.GameObjects.Апендер (GameController ()) себе.GameObjects.Додај (играч ())

7. Пробајте ја програмата! Сега програмскиот код треба да изгледа вака:
Увоз PygeMefrom случајно увоз Случајно Pygame.Lighans Import * Резолуција = (400.300) бела = (255.255.255) Блек = (0.0.0) Red = (255,0,0,0) Екран = Pygame.Прикажи.Set_mode (резолуција) класа топка: def __init __ (само, xpos = резолуција [0] / 2, yspo: резолуција [1] / 2, xvel = 1, yvel = 1, rad = 15): себе.x = xposself.Y = yposself.Dx = xveleself.Dy = yvelel себе.Радиус = здружен.Type = "топка" дефинирајте (само, површината): pygame.Подготви.Круг (површина, црна, (int (јас.x), int (јас.y)), себе.Радиус) def update (само, GameObjects): себе.X + = јас.Dxelf.Y + = јас.Dyif (себе.X <= 0 or self.x >= Резолуција [0]): себе.Dx * = -1if (себе.Y <= 0 or self.y >= Резолуција [1]): себе.Dy * = -1class плеер: def __init __ (само, rad = 20): себе.x = 0.Y = 0.Радиус = здружен.Type = "плеер" деф нацртан (само, површина): pygame.Подготви.Круг (површина, црвена, (јас.X, себе.y), себе.Радиус) Деф Ажурирај (само, GameObjects): Кабел = Pygame.Глувчето.get_pos () себе.X = кабел [0] себе.Y = кабел [1] За Gameobj во GameObjects: Ако Gameobj.Тип == "Бол": Ако (GameObJ.X - себе.x) ** 2 + (GameObJ.Y-јас.y) ** 2 <= (gameObj.radius + self.radius)**2:pygame.quit()class GameController:def __init__(self, interval = 5):self.inter = intervalself.next = pygame.time.get_ticks() + (2 * 1000)self.type = "game controller"def update(self, gameObjects):if self.next < pygame.time.get_ticks():self.next = pygame.time.get_ticks() + (self.inter * 1000)gameObjects.append(Ball(xVel=random()*2, yVel=random()*2))def draw(self, screen):passclass game():def __init__(self):pygame.init()self.screen = pygame.display.set_mode(resolution)self.clock = pygame.time.Clock()self.gameObjects = []self.gameObjects.append(GameController())self.gameObjects.append(Player())def handleEvents(self):for event in pygame.event.get():if event.type == QUIT:pygame.quit()def run(self):while True:self.handleEvents()for gameObj in self.gameObjects:gameObj.update(self.gameObjects)self.screen.fill(white)for gameObj in self.gameObjects:gameObj.draw(self.screen)self.clock.tick(60)pygame.display.flip()game().run()
Дел 8 од 8:
Додавање на сметка и завршување на игратаЕден. Додајте сметка на класната класа на игри. Креирај објект на фонт и променлива. Целта на фонтот мора да се повлече во секоја рамка за да се прикаже тековната сметка и го зголемува во секоја рамка при ажурирање.
Класа GameController: Def __init __ (само, интервал = 5):...Себе.Резултат = 0.Scoretext = pygame.Фонт.Фонт (нема, 12) def update (само, GameObjects):...Себе.Оценка + = 1Деф црта (само, екран): екран.Блит (себе.ScoreText.Направи (str (јас.Резултат), точно, црно), (5,5))
2. Променете го процесот на завршување на играта. Отстрани едноставен излез од играта кога играч судир со топката. Наместо тоа, креирајте променлива во класата на играчот, која ќе биде проверена со играње. Кога променливата на играта ќе стане вистинита, мора да го запрете ажурирањето на објектите. Сите објекти се замрзнати во место, така што играчот ќе може да разбере што се случило и ќе ја види неговата сметка. Објектите сè уште ќе бидат прикажани на екранот, но тие едноставно ќе престанат да се ажурираат.
Класа плеер: def __init __ (само, rad = 20):...Себе.Gameover = Falsedef Ажурирање (само, GameObjects):...За GameobJ во GameObjects: Ако Gooby.Тип == "Бол": Ако (GameObJ.X - себе.x) ** 2 + (Gameobj.Y-јас.y) ** 2 <= (gameObj.radius + self.radius)**2:self.gameOver = Trueclass game():def __init__(self):...self.gameOver = Falsedef run(self):while True:self.handleEvents()if not self.gameOver:for gameObj in self.gameObjects:gameObj.update(self.gameObjects)if gameObj.type == "player":self.gameOver = gameObj.gameOver

3. Пробајте ја програмата! Конечниот код на програмата треба да изгледа вака:
Увоз PygeMefrom случајно увоз Случајно Pygame.Lighans Import * Резолуција = (400.300) бела = (255.255.255) Блек = (0.0.0) Red = (255,0,0,0) Екран = Pygame.Екранот.Set_mode (резолуција) класа топка: def __init __ (само, xpos = резолуција [0] / 2, yspo: резолуција [1] / 2, xvel = 1, yvel = 1, rad = 15): себе.x = xposself.Y = yposself.Dx = xveleself.Dy = yvelel себе.Радиус = здружен.Type = "топка" дефинирајте (само, површината): pygame.Подготви.Круг (површина, црна, (int (јас.x), int (јас.y)), себе.Радиус) def update (само, GameObjects): себе.X + = јас.Dxelf.Y + = јас.Dyif (себе.X <= 0 or self.x >= Резолуција [0]): себе.Dx * = -1if (себе.y <= 0 or self.y >= Резолуција [1]): себе.Dy * = -1class плеер: def __init __ (само, rad = 20): себе.x = 0.Y = 0.Радиус = здружен.Тип = "играч" себе.Gameover = Falsedef Draw (Само, површината): Pygame.Подготви.Круг (површина, црвена, (јас.X, себе.y), себе.Радиус) Деф Ажурирај (само, GameObjects): Кабел = Pygame.Глувчето.get_pos () себе.X = кабел [0] себе.Y = кабел [1] За Gameobj во GameObjects: Ако Gameobj.Тип == "Бол": Ако (GameObJ.X - себе.x) ** 2 + (Gameobj.Y-јас.y) ** 2 <= (gameObj.radius + self.radius)**2:self.gameOver = Trueclass GameController:def __init__(self, interval = 5):self.inter = intervalself.next = pygame.time.get_ticks() + (2 * 1000)self.type = "game controller"self.score = 0self.scoreText = pygame.font.Font(None, 12)def update(self, gameObjects):if self.next < pygame.time.get_ticks():self.next = pygame.time.get_ticks() + (self.inter * 1000)gameObjects.append(Ball(xVel=random()*2, yVel=random()*2))self.score += 1def draw(self, screen):screen.blit(self.scoreText.render(str(self.score), True, black), (5,5))class game():def __init__(self):pygame.init()self.screen = pygame.display.set_mode(resolution)self.clock = pygame.time.Clock()self.gameObjects = []self.gameObjects.append(GameController())self.gameObjects.append(Player())self.gameOver = Falsedef handleEvents(self):for event in pygame.event.get():if event.type == QUIT:pygame.quit()def run(self):while True:self.handleEvents()if not self.gameOver:for gameObj in self.gameObjects:gameObj.update(self.gameObjects)if gameObj.type == "player":self.gameOver = gameObj.gameOverself.screen.fill(white)for gameObj in self.gameObjects:gameObj.draw(self.screen)self.clock.tick(60)pygame.display.flip()game().run()