Как да програмирате игри на python с помощта на библиотеката на pygame

Тази статия е предназначена за тези, които вече са запознати с езика за програмиране на Python и ви позволява да прочетете библиотеката на Pygame за този език. Като визуален пример тук е показан прост процес на програмиране на играта, в който играчът трябва да дарява от скачащи топки.

Стъпка

Част 1 от 8:
Инсталиране на pygame
един. Изтеглете pygame. Следвайте връзката и намерете версията на библиотеката, подходяща за вашата платформа: http: // Pygame.ORG / Изтегляне.SHTML .
  • 2. Стартирайте инсталатора.
  • 3. Уверете се, че инсталацията е завършила успешно. Отворете терминала на Python. Въведете "Импортиране на pygame". Ако съобщенията за грешки не се появят, тогава pygame бе инсталиран успешно.
    Импортирайте pygame
  • Част 2 от 8:
    Създаване на основен прозорец за игра
    един. Създайте нов файл.
  • 2. Импортиране на pygame. Pygame е библиотека, която прилага достъп до езикови графични функции на Python Programming. Ако искате да научите повече за това как работят тези функции, информацията е достъпна на pygame. https: // Pygame.ORG / Docs /
    Импортиране на pygamefrom pygame.Местните внос *
  • 3. Посочете размера на прозореца на играта. Създайте глобална променлива за размери на прозореца, за да го направите от различни части на играта. За удобство тези параметри са по-добри да уточнят в началото на файла, така че ако е необходимо, беше по-лесно да се промени в бъдеще. За по-сложни проекти ще бъде за предпочитане да правите такива данни в отделен файл.
    Резолюция = (400,300)
  • 4. Определят няколко цвята. Цветовете в Pygame са дефинирани в RGBA формат, вариращи от 0 до 255. Стойността на алфа (а) може да бъде пропусната, но останалите цветове (червени, зелени и сини) са необходими за пълнене.
    Бяло = (255,255,255) черно = (0.0.0) червено = (255.0.0)
  • пет. Инициализирайте основния екран. Използвайте променливата за разделителна способност, определена по-рано.
    Екрана = pygame.Дисплей.Set_mode (резолюция)
  • 6. Създайте цикъл на играта. Задайте повторението на определени действия във всеки кадър на играта. Създайте цикъл, който последователно изпълнява всички тези действия.
    Докато вярно:
  • 7. Определете цвета на екрана.
    Екран.Попълнете (бяло)
  • Осем. Покажете екрана. Ако стартирате програмата на този етап, екранът е боядисан с бял, а след това програмата ще спре спешната помощ. Причината за провала ще бъде, че операционната система изпраща събитията на програмата и програмата просто не продължава. Когато програмата натрупва твърде много нелекувани събития, възниква повреда.
    Докато вярно:...Pygame.Дисплей.Флип ()
  • девет. Прилагане на обработката на събития. Получете списък на всички събития, които възникват между рамки за рисуване. В нашия пример трябва да се тревожите за обработката само на едно изходно събитие (Quit). Това се случва, когато потребителят затвори прозореца на играта. Обработката на събития ще предотврати неуспеха на програмата от появата на твърде много събития.
    Докато вярно:...За събитие в Pygame.Събитие.Get (): ако събитие.Тип == Quit: pygame.quit ()
  • Изображение, озаглавено ProgrampyGamepart1.jpg
    10. Опитайте програмата! Сега програмният код трябва да изглежда така:
    Импортиране на pygamefrom pygame.Местните внос * Резолюция = (400,300) бял = (255,255,255) Black = (0.0.0) Red = (255,0,0) екран = pygame.Дисплей.Set_mode (резолюция), докато е вярно: екран.Напълнете (бяло) pygame.Дисплей.Флип () за събитие в pygame.Събитие.Get (): ако събитие.Тип == Quit: pygame.quit ()
  • Част 3 от 8:
    Създаване на игрални обекти
    един. Създайте нов клас обекти и неговия дизайнер. Задайте всички свойства на обекта. Също така дефинирайте стойностите по подразбиране за всяка от имотите.
    Клас топка: def __init __ (самостоятелно, xpos = резолюция [0] / 2, YPOS = резолюция [1] / 2, xvel = 1, yvel = 1, rad = 15): самостоятелно.x = xposself.Y = yposself.Dx = xvetelf.dy = yvelself.Radius = radself.Тип = "Топка"
  • 2. Определете чертежа на обекта. Използвайте свойствата на обекта, посочени в конструктора, за да изображете топката като кръг върху повърхността, предавана към функцията към функцията. Повърхността ще бъде екранът, който сте създали по-рано, като дефинирате нейните размери.
    DEF Draw (Self, Surface): Pygame.Рисувам.Кръг (повърхност, черен, (себе си.X, аз.y), себе си.Радиус)
  • 3. Създайте клас на клас и добавете работа към цикъла на играта, за да нарисувате топка при всяка итерация на цикъла.
    Топка = топка (), докато е вярно:...Топка.Draw (екран)
  • 4. Направете преместване на обекта. Създайте функция, която актуализира позицията на обекта. Обадете се на тази функция във всяка итерация на цикъла.
    Клас Топка:...Def Update (Self): Аз.X + = себе си.Dxself.Y + = себе си.DY
  • пет. Честота на границата. Топката ще се движи много бързо, защото цикълът на играта се повтаря стотици пъти в секунда. Използвайте таймера на Pygame, за да ограничите честотата на промяна на рамката до 60 FPS.
    • Часовник = pygame.Време.Часовник (), докато е вярно:...ЧАСОВНИК.Кърлеж (60)
  • Дръжте купа на екрана. Добавете проверки към функцията за актуализиране на състоянието, за да промените посоката на движение на топката, ако достигне границите на екрана.
      Клас Топка:...DEF актуализация (самостоятелно):...ако (самостоятелно.Х <= 0 or self.x >= Резолюция [0]): Аз.Dx * = -1if (себе си.y <= 0 or self.y >= Резолюция [1]): Аз.dy * = -1
  • Опитайте програмата! Сега програмният код трябва да изглежда така:
    Image, озаглавен ProgrampyGamePart2.jpg
      Импортиране на pygamefrom pygame.Местните внос * Резолюция = (400,300) бял = (255,255,255) Black = (0.0.0) Red = (255,0,0) екран = pygame.Дисплей.SET_MODE (резолюция) Клас Топка: def __init __ (самостоятелно, xpos = резолюция [0] / 2, YPOS = разделителна способност [1] / 2, xvel = 1, yvel = 1, rad = 15): самостоятелно.x = xposself.Y = yposself.Dx = xvetelf.dy = yvelself.Radius = radself.Тип = "Топка"DEF Draw (Self, Surface): Pygame.Рисувам.Кръг (повърхност, черен, (себе си.X, аз.y), себе си.RADIUS) DEF актуализация: аз.X + = себе си.Dxself.Y + = себе си.Dyif (себе си.Х <= 0 or self.x >= Резолюция [0]): Аз.Dx * = -1if (себе си.y <= 0 or self.y >= Резолюция [1]): Аз.dy * = -1ball = топка () часовник = pygame.Време.Часовник (), докато е вярно: екран.Напълнете (бялата) топка.(Екран) топка.Актуализация () pygame.Дисплей.Флип () часовник.Отбележете (60) за събитие в Pygame.Събитие.Get (): ако събитие.Тип == Quit: pygame.quit ()
  • Част 4 от 8:
    Структуриране на игри
    един. Използвайте класове за структуриране. В бъдеще играта ще стане по-сложна. Използвайте техники, ориентирани към обектно, към кода за структуриране.
  • 2. Конвертирайте цикъла на играта в клас. От момента играта вече включва данни, включително обекти и функции на играта, има смисъл да замените цикъла на играта до клас.
    Игра на класа ():
  • 3. Добавете дизайнера. С него отричате няколко обекта, използвани в играта, създайте екран, таймер и инициализиране на pygame. Pygame трябва да бъде инициализиран, за да се използват допълнителни възможности като текст или звук.
    Клас игра (): def __init __ (самостоятелно): pygame.Init () себе си.Екрана = pygame.Дисплей.Set_mode (резолюция).Часовник = pygame.Време.Часовник ()
  • 4. Задайте обработката на събития във функцията.
    Игра на класа ():...Def дръжки (самостоятелно): за събитие в pygame.Събитие.Get (): ако събитие.Тип == Quit: pygame.quit ()
  • пет. Направете цикъла на игра с функция. Функция за обработка на събития за повикване във всяка итерация на цикъла.
    Игра на класа ():...Def Run (Self): Докато вярно: Аз.Дръжки () себе си.Екран.Попълнете (бяло) себе си.ЧАСОВНИК.Отметка (60) pygame.Дисплей.Флип ()
  • 6. Задайте обработката на множество игри. На този етап, кодът на играта води до актуализация и преначертаване на отделни обекти във всеки кадър. С този подход, кодът на играта ще бъде доста обемист и безредие, особено ако има много обекти в играта. По-мъдър е първо да добавите обекти към масив и след това да актуализирате и преначертавате всички обекти в масива при всяка итерация на цикъла. Сега можете лесно да направите нов обект в играта и да определите друга начална позиция за нея.
    Клас игра (): def __init __ (самостоятелно):...Себе си.Gameobjects = [] себе си.GameObjects.APPEND (Ball ()).GameObjects.Добавяне (топка (100))...Def Run (Self): Докато вярно: Аз.Дръжки () за gameobj в себе си.Gameobjects: Gameobj.Актуализация ().Екран.Напълнете (бяло) за Gameobj в себе си.Gameobjects: Gameobj.Рисуване (себе си.Екрана) себе си.ЧАСОВНИК.Отметка (60) pygame.Дисплей.Флип ()
  • Image, озаглавен Programpygampart3.jpg
    7. Опитайте програмата! Сега програмният код трябва да изглежда така:
    Импортиране на pygamefrom pygame.Местните внос * Резолюция = (400,300) бял = (255,255,255) Black = (0.0.0) Red = (255,0,0) екран = pygame.Дисплей.SET_MODE (резолюция) Клас Топка: def __init __ (самостоятелно, xpos = резолюция [0] / 2, YPOS = разделителна способност [1] / 2, xvel = 1, yvel = 1, rad = 15): самостоятелно.x = xposself.Y = yposself.Dx = xvetelf.dy = yvelself.Radius = radself.Тип = "Топка"DEF Draw (Self, Surface): Pygame.Рисувам.Кръг (повърхност, черен, (себе си.X, аз.y), себе си.RADIUS) DEF актуализация: аз.X + = себе си.Dxself.Y + = себе си.Dyif (себе си.Х <= 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.APPEND (Ball ()).GameObjects.APPEND (топка (100)) def дръжки (себе си): за събитие в pygame.Събитие.Get (): ако събитие.Тип == Quit: pygame.Quit () Def Run (Self): Докато вярно: Аз.Дръжки () за gameobj в себе си.Gameobjects: Gameobj.Актуализация ().Екран.Напълнете (бяло) за Gameobj в себе си.Gameobjects: Gameobj.Рисуване (себе си.Екрана) себе си.ЧАСОВНИК.Отметка (60) pygame.Дисплей.Флип () игра ().Бягам ()
  • Част 5 от 8:
    Добавяне на обект "играч"
    един. Създайте клас на играч и неговия дизайнер. Трябва да създадете друг кръг, контролиран от движението на мишката. Инициализирайте параметрите си в дизайнера. Единствената важна стойност ще бъде радиусът.
    Клас играч: Def __init __ (Self, Rad = 20): Аз.x = 0.Y = 0.Radius = Rad
  • 2. Определете чертежа на обекта на играча. Тя се нарича подобно на това как са направени други обекти.
    Клас играч:...DEF Draw (Self, Surface): Pygame.Рисувам.Кръг (повърхност, червен, (себе си.X, аз.y), себе си.Радиус)
  • 3. Добавете контрол на мишката за обекта на плейъра. Във всеки кадър от играта трябва да проверите позицията на показалеца на мишката и да се свържете с позицията на обекта на играча с тази точка.
    Клас играч:...Def Update (Self): Cord = pygame.Мишка.get_pos ().X = кабел [0] себе си.Y = кабел [1]
  • 4. Добавете обекта на плейъра към масив Gameobjects. Създайте нов случай на обекта и го добавете към списъка с Gameobjects.
    Клас игра (): def __init __ (самостоятелно):...Себе си.GameObjects.APPEND (Player ())
  • Image, озаглавен Programpygampart4.jpg
    пет. Опитайте програмата! Сега програмният код трябва да изглежда така:
    Импортиране на pygamefrom pygame.Местните внос * Резолюция = (400,300) бял = (255,255,255) Black = (0.0.0) Red = (255,0,0) екран = pygame.Дисплей.SET_MODE (резолюция) Клас Топка: def __init __ (самостоятелно, xpos = резолюция [0] / 2, YPOS = разделителна способност [1] / 2, xvel = 1, yvel = 1, rad = 15): самостоятелно.x = xposself.Y = yposself.Dx = xvetelf.dy = yvelself.Radius = radself.Тип = "Топка"DEF Draw (Self, Surface): Pygame.Рисувам.Кръг (повърхност, черен, (себе си.X, аз.y), себе си.RADIUS) DEF актуализация: аз.X + = себе си.Dxself.Y + = себе си.Dyif (себе си.Х <= 0 or self.x >= Резолюция [0]): Аз.Dx * = -1if (себе си.y <= 0 or self.y >= Резолюция [1]): Аз.Dy * = -1class плейър: def __init __ (себе си, rad = 20): аз.x = 0.Y = 0.Radius = radself.Тип = "Играч"DEF Draw (Self, Surface): Pygame.Рисувам.Кръг (повърхност, червен, (себе си.X, аз.y), себе си.RADIUS) DEF актуализация (Self): Cord = pygame.Мишка.get_pos ().X = кабел [0] себе си.Y = кабел [1] клас игра (): def __init __ (самостоятелно): pygame.Init () себе си.Екрана = pygame.Дисплей.Set_mode (резолюция).Часовник = pygame.Време.Часовник ().Gameobjects = [] себе си.GameObjects.Append (играч ()) себе си.GameObjects.Append (топка ()) себе си.GameObjects.APPEND (топка (100)) def дръжки (себе си): за събитие в pygame.Събитие.Get (): ако събитие.Тип == Quit: pygame.Quit () Def Run (Self): Докато вярно: Аз.Дръжки () за gameobj в себе си.Gameobjects: Gameobj.Актуализация ().Екран.Напълнете (бяло) за Gameobj в себе си.Gameobjects: Gameobj.Рисуване (себе си.Екрана) себе си.ЧАСОВНИК.Отметка (60) pygame.Дисплей.Флип () игра ().Бягам ()
  • Част 6 от 8:
    Създаване на взаимодействие на обекта
    един. Промяна на функциите за актуализиране на позицията. За да приложим взаимодействието на обектите, е необходимо да им се осигури достъп до другите свойства. Добавете нов параметър към функцията за актуализация, за да прехвърлите данните за списъка с Gameobjects. Параметърът трябва да бъде добавен към класовете на плейъра и функциите на топката. Ако имате много класове, наследството ще ви помогне да запазите списъка с параметрите същото.
    Клас топка:...Upd Update (Self, GameObjects):...Клас играч:...Upd Update (Self, GameObjects):
  • 2. Въведете проверки на играч с топки. Вижте всички обекти и ги определете сред тях, които се отнасят до топките. След това, използвайки радиусите на обектите и формулата за определяне на разстоянието, проверете дали обектите се сблъскват помежду си. Проверете сблъсъците между кръговете е лесно. Това е основната причина, че като пример в тази игра фигурите на друга форма не се използват.
    Клас играч:...Upd Update (Self, GameObjects):...За Gameobj в GameObjects: Ако GAGEOBJ.Тип == "Топка": ако (garobj.X - себе си.x) ** 2 + (garobj.Y - себе си.y) ** 2 <= (gameObj.radius + self.radius)**2:
  • Image, озаглавен ProgrampyGamEpart5.jpg
    3. Задайте края на играта, когато играч сблъсък с топка. На този етап просто задайте изхода от играта.
    Ако (Gameobj.X - себе си.x) ** 2 + (garobj.Y - себе си.y) ** 2 <= (gameObj.radius + self.radius)**2:pygame.quit()
  • 4. Опитайте програмата! Сега програмният код трябва да изглежда така:
    Импортиране на pygamefrom pygame.Местните внос * Резолюция = (400, 300) бял = (255,255,255) черен = (0,0,0) червено = (255,0,0,0,0) екран = pygame.Дисплей.SET_MODE (резолюция) Клас Топка: def __init __ (самостоятелно, xpos = резолюция [0] / 2, YPOS = разделителна способност [1] / 2, xvel = 1, yvel = 1, rad = 15): самостоятелно.x = xposself.Y = yposself.Dx = xvetelf.dy = yvelself.Radius = radself.Тип = "Топка"DEF Draw (Self, Surface): Pygame.Рисувам.Кръг (повърхност, черен, (себе си.X, аз.y), себе си.Radius) Update (Self, Gameobjects): Self.X + = себе си.Dxself.Y + = себе си.Dyif (себе си.Х <= 0 or self.x >= Резолюция [0]): Аз.Dx * = -1if (себе си.y <= 0 or self.y >= Резолюция [1]): Аз.Dy * = -1class плейър: def __init __ (себе си, rad = 20): аз.x = 0.Y = 0.Radius = radself.Тип = "Играч"DEF Draw (Self, Surface): Pygame.Рисувам.Кръг (повърхност, червен, (себе си.X, аз.y), себе си.Radius) def актуализация (самостоятелно, gameobjects): cord = pygame.Мишка.get_pos ().X = кабел [0] себе си.Y = кабел [1] за Gameobj в Gameobjects: Ако GAGEOBJ.Тип == "Топка": ако (garobj.X - себе си.x) ** 2 + (garobj.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): аз.Inter = интервърз.След това = pygame.Време.get_ticks () + (2 * 1000) себе си.Тип = "Контролер за игри"
  • 2. Добавете функцията за актуализиране. Тя ще провери колко време е преминал от добавянето на предишната топка или от началото на играта. Ако времето надвишава посочения интервал, таймерът ще бъде нулиран и новата топка е добавена.
    Клас GameController:...Upd Update (Self, Gameobjects): Ако е самостоятелно.Следващия < pygame.time.get_ticks():self.next = pygame.time.get_ticks() + (self.inter * 1000)gameObjects.append(Ball())
  • 3. Инсталирайте случайни скорости за топки. За да накарате играта да се държи по различен начин, е необходимо да се позволи да се използват случайни номера за скорост параметър. Сега скоростта на топките ще бъде определена от плаващ десетичен номер, а не цяло число.
    Клас GameController:...Upd Update (Self, Gameobjects): Ако е самостоятелно.Следващия < pygame.time.get_ticks():self.next = pygame.time.get_ticks() + (self.inter * 1000)gameObjects.append(Ball(xVel=random()*2, yVel=random()*2))
  • 4. Коригирайте функцията на чертежа. Функцията за изтегляне не работи с плаващи намека (поплавък). Следователно е необходимо да се изрази позицията на топката в цели числа, преди да я привлече.
    Клас топка:...DEF Draw (Self, Surface): Pygame.Рисувам.Кръг (повърхност, черен, (int (себе си.x), int (себе си.y)), себе си.Радиус)
  • пет. Определете метода за рисуване за контролера на играта. Тъй като това е и игра на играта, в главния цикъл на играта ще има опит да го направи. Ето защо, за контролера, е необходимо да се определи функцията на рисуване, която не прави нищо, за да се избегне неуспехът на играта.
    Клас GameController:...DEF Draw (Self, екран): Pass
  • 6. Добавете контролер за игри в GameObjects и премахнете 2 топки. Играта трябва да добави нова топка на всеки 5 секунди.
    Клас игра (): def __init __ (самостоятелно):...Себе си.Gameobjects = [] себе си.GameObjects.Appendroller (gamecontroller ()) себе си.GameObjects.APPEND (Player ())
  • Image, озаглавен ProgrampyGamePart6.jpg
    7. Опитайте програмата! Сега програмният код трябва да изглежда така:
    Импортиране на pygamefrom произволен импортиране случайно от pygame.Местните внос * Резолюция = (400,300) бял = (255,255,255) Black = (0.0.0) Red = (255,0,0) екран = pygame.Дисплей.SET_MODE (резолюция) Клас Топка: def __init __ (самостоятелно, xpos = резолюция [0] / 2, YPOS = разделителна способност [1] / 2, xvel = 1, yvel = 1, rad = 15): самостоятелно.x = xposself.Y = yposself.Dx = xvetelf.dy = yvelself.Radius = radself.Тип = "Топка"DEF Draw (Self, Surface): Pygame.Рисувам.Кръг (повърхност, черен, (int (себе си.x), int (себе си.y)), себе си.Radius) Update (Self, Gameobjects): Self.X + = себе си.Dxself.Y + = себе си.Dyif (себе си.Х <= 0 or self.x >= Резолюция [0]): Аз.Dx * = -1if (себе си.y <= 0 or self.y >= Резолюция [1]): Аз.Dy * = -1class плейър: def __init __ (себе си, rad = 20): аз.x = 0.Y = 0.Radius = radself.Тип = "Играч"DEF Draw (Self, Surface): Pygame.Рисувам.Кръг (повърхност, червен, (себе си.X, аз.y), себе си.Radius) def актуализация (самостоятелно, gameobjects): cord = pygame.Мишка.get_pos ().X = кабел [0] себе си.Y = кабел [1] за Gameobj в Gameobjects: Ако GAGEOBJ.Тип == "Топка": ако (garobj.X - себе си.x) ** 2 + (garobj.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 актуализация (самостоятелно, gameobjects):...Себе си.Резултат + = 1def Draw (Self, екран): екран.Blit (себе си.Scoretext.Рендер (str (себе си.Резултат), вярно, черно), (5,5))
  • 2. Промяна на процеса на попълване на играта. Премахнете прост изход от играта, когато играч сблъсък с топка. Вместо това създайте променлива в класа на играча, която ще бъде проверена чрез игра. Когато променливата на играта стане вярна, трябва да спрете актуализацията на обектите. Всички обекти са замразени на място, така че играчът ще може да разбере какво се е случило и ще види сметката му. Обектите все още ще се показват на екрана, но просто ще спрат актуализирането.
    Клас играч: Def __init __ (Self, Rad = 20):...Себе си.Gameover = актуализация на falsedef (самостоятелно, gameobjects):...За Gameobj в GameObjects: Ако GAGEOBJ.Тип == "Топка": ако (garobj.X - себе си.x) ** 2 + (garobj.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
  • Image, озаглавен Programpygamefinal.jpg
    3. Опитайте програмата! Окончателният код на програмата трябва да изглежда така:
    Импортиране на pygamefrom произволен импортиране случайно от pygame.Местните внос * Резолюция = (400,300) бял = (255,255,255) Black = (0.0.0) Red = (255,0,0) екран = pygame.Дисплей.SET_MODE (резолюция) Клас Топка: def __init __ (самостоятелно, xpos = резолюция [0] / 2, YPOS = разделителна способност [1] / 2, xvel = 1, yvel = 1, rad = 15): самостоятелно.x = xposself.Y = yposself.Dx = xvetelf.dy = yvelself.Radius = radself.Тип = "Топка"DEF Draw (Self, Surface): Pygame.Рисувам.Кръг (повърхност, черен, (int (себе си.x), int (себе си.y)), себе си.Radius) Update (Self, Gameobjects): Self.X + = себе си.Dxself.Y + = себе си.Dyif (себе си.Х <= 0 or self.x >= Резолюция [0]): Аз.Dx * = -1if (себе си.y <= 0 or self.y >= Резолюция [1]): Аз.Dy * = -1class плейър: def __init __ (себе си, rad = 20): аз.x = 0.Y = 0.Radius = radself.Тип = "Играч"Себе си.Gameover = равенство на фалшификато (себе си, повърхност): pygame.Рисувам.Кръг (повърхност, червен, (себе си.X, аз.y), себе си.Radius) def актуализация (самостоятелно, gameobjects): cord = pygame.Мишка.get_pos ().X = кабел [0] себе си.Y = кабел [1] за Gameobj в Gameobjects: Ако GAGEOBJ.Тип == "Топка": ако (garobj.X - себе си.x) ** 2 + (garobj.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()
  • Подобни публикации