Jak naprogramovat hru v Pythonu pomocí Pygame (s obrázky)

Obsah:

Jak naprogramovat hru v Pythonu pomocí Pygame (s obrázky)
Jak naprogramovat hru v Pythonu pomocí Pygame (s obrázky)

Video: Jak naprogramovat hru v Pythonu pomocí Pygame (s obrázky)

Video: Jak naprogramovat hru v Pythonu pomocí Pygame (s obrázky)
Video: 3. Python - Práce se soubory - Otevření souboru a načtení jeho obsahu 2024, Smět
Anonim

Toto je úvod do Pygame pro lidi, kteří už Python znají. Tento článek vás naučí kroky k vytvoření jednoduché hry, ve které se hráč vyhne skákajícím míčkům.

Kroky

Část 1 z 8: Instalace Pygame

Krok 1. Stáhněte si Pygame

Najděte ji pro svou platformu na adrese

Krok 2. Spusťte instalační program

Krok 3. Ověřte, že instalace fungovala

Otevřete terminál Pythonu. Zadejte „importovat pygame“. Pokud nevidíte žádné chyby, byla Pygame úspěšně nainstalována.

    importovat pygame

Část 2 z 8: Nastavení základního okna

Krok 1. Otevřete nový soubor

Krok 2. Importujte Pygame

Pygame je knihovna, která poskytuje přístup ke grafickým funkcím. Pokud chcete více informací o tom, jak tyto funkce fungují, můžete si je vyhledat na webu Pygame.

    importovat pygame z pygame.locals importovat *

Krok 3. Nastavte rozlišení okna

Budete vytvářet globální proměnnou pro rozlišení obrazovky, aby na ni bylo možné odkazovat v několika částech hry. Je také snadné jej najít v horní části souboru, takže jej lze později změnit. U pokročilých projektů by bylo lepší umístit tyto informace do samostatného souboru.

    rozlišení = (400, 300)

Krok 4. Definujte některé barvy

Barvy v pygame jsou (RBGA, které se pohybují v hodnotách mezi 0 a 255. Hodnota alfa (A) je volitelná, ale ostatní barvy (červená, modrá a zelená jsou povinné).

    bílá = (255, 255, 255) černá = (0, 0, 0) červená = (255, 0, 0)

Krok 5. Inicializujte obrazovku

Použijte proměnnou rozlišení, která byla definována dříve.

    obrazovka = pygame.display.set_mode (rozlišení)

Krok 6. Vytvořte smyčku hry

Opakujte určité akce v každém rámci naší hry. Vytvořte smyčku, která se bude vždy opakovat, abyste prošli všemi těmito akcemi.

    zatímco pravda:

Krok 7. Vybarvěte obrazovku

    screen.fill (bílá)

Krok 8. Zobrazte obrazovku

Pokud spustíte program, obrazovka zbělá a program se zhroutí. Operační systém totiž do hry posílá události a hra s nimi nic nedělá. Jakmile hra obdrží příliš mnoho neošetřených událostí, dojde k jejímu zhroucení.

    while True:… pygame.display.flip ()

Krok 9. Zpracování událostí

Získejte seznam všech událostí, ke kterým došlo v každém rámci. Bude vás zajímat pouze jedna událost, událost ukončení. K tomu dochází, když uživatel zavře okno hry. To také zabrání zhroucení našeho programu kvůli příliš mnoha událostem.

    while True:… pro událost v pygame.event.get (): if event.type == QUIT: pygame.quit ()

ProgramPygamePart1
ProgramPygamePart1

Krok 10. Vyzkoušejte to

Zde by měl kód nyní vypadat:

    importovat pygame z pygame.locals importovat * rozlišení = (400, 300) bílá = (255, 255, 255) černá = (0, 0, 0) červená = (255, 0, 0) obrazovka = pygame.display.set_mode (rozlišení) zatímco True: screen.fill (bílá) pygame.display.flip () pro událost v pygame.event.get (): if event.type == QUIT: pygame.quit ()

Část 3 z 8: Vytvoření herního objektu

Krok 1. Vytvořte novou třídu a konstruktor

Nastavte všechny vlastnosti objektu. Také zadáváte výchozí hodnoty pro všechny vlastnosti.

    třída Ball: def _init _ (self, xPos = Resolution [0] / 2, yPos = Resolution [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "koule"

Krok 2. Definujte, jak nakreslit objekt

Pomocí vlastností, které byly definovány v konstruktoru, nakreslíte kouli jako kruh a také přenesete povrch do funkce, na kterou nakreslíte předmět. Povrch bude objekt obrazovky, který byl vytvořen pomocí rozlišení dříve.

    def draw (self, surface): pygame.draw.circle (povrch, černý, (self.x, self.y), self.radius)

Krok 3. Vytvořte instanci třídy a také řekněte herní smyčce, aby v každé smyčce nakreslila míč

    ball = Ball () while True:… ball.draw (obrazovka)

Krok 4. Přemístěte objekt

Vytvořte funkci, která aktualizuje polohu objektu. Tuto funkci volejte v každé herní smyčce.

    třída Ball:… def update (self): self.x += self.dx self.y += self.dy

Krok 5. Omezte snímkovou frekvenci

Míč se bude pohybovat opravdu rychle, protože herní smyčka běží stokrát za sekundu. Pomocí hodin Pygame omezte snímkovou frekvenci na 60 fps.

    clock = pygame.time. Clock () while True:… clock.tick (60)

Krok 6. Udržujte míč na obrazovce

Přidáním šeků do funkce aktualizace obrátíte směr míče, pokud zasáhne jeden z okrajů obrazovky.

    třída Ball:… def update (self):… if (self.x <= 0 or self.x> = Resolution [0]): self.dx *= -1 if (self.y <= 0 or self.y > = rozlišení [1]): self.dy *= -1

ProgramPygamePart2
ProgramPygamePart2

Krok 7. Vyzkoušejte to

Zde by měl kód nyní vypadat:

    importovat pygame z pygame.locals importovat * rozlišení = (400, 300) bílá = (255, 255, 255) černá = (0, 0, 0) červená = (255, 0, 0) obrazovka = pygame.display.set_mode (rozlišení) třída Ball: def _init _ (self, xPos = Resolution [0] / 2, yPos = Resolution [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = „ball“def draw (self, povrch): pygame.draw.circle (povrch, černý, (self.x, self.y) (self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 or self.x> = Resolution [0]): self.dx *= -1 if (self.y <= 0 or self.y> = Resolution [1]): self.dy *= -1 ball = Ball () clock = pygame.time. Clock () while True: screen. fill (white) ball.draw (screen) ball.update () pygame.display.flip () clock.tick (60) for event in pygame.event.get (): if event.type == QUIT: pygame.quit ()

Část 4 z 8: Organizace hry

Krok 1. Pomocí tříd vše zorganizujte

Hra bude stále komplikovanější. K organizaci kódu použijte objektově orientované techniky.

Krok 2. Zařaďte herní smyčku do třídy

Protože naše hra nyní obsahuje data včetně vašich herních objektů a funkcí, má smysl proměnit vaši herní smyčku ve třídu.

    třídní hra ():

Krok 3. Přidejte konstruktor

Zde vytvoříte instanci některých herních objektů, vytvoříte naši obrazovku a hodiny a inicializujete Pygame. Aby bylo možné používat určité funkce, jako je text nebo zvuk, je třeba Pygame inicializovat.

    třídní hra (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (Resolution) self.clock = pygame.time. Clock ()

Krok 4. Zpracovávejte události ve funkci

    třídní hra ():… def handleEvents (self): pro událost v pygame.event.get (): if event.type == QUIT: pygame.quit ()

Krok 5. Udělejte ze smyčky hry funkci

Zavolejte funkci zpracování událostí každou smyčku.

    třídní hra ():… def run (self): while True: self.handleEvents () self.screen.fill (white) self.clock.tick (60) pygame.display.flip ()

Krok 6. Zvládněte více herních objektů

Právě teď musí tento kód volat draw a update na našem objektu každý snímek. Pokud byste měli spoustu předmětů, bylo by to nepořádné. Přidejte náš objekt do pole a poté aktualizujte a nakreslete všechny objekty v poli každou smyčku. Nyní můžete snadno přidat další objekt a dát mu jinou výchozí pozici.

    třídní hra (): def _init _ (self):… self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) … def run (self): while True: self.handleEvents () pro gameObj v self.gameObjects: gameObj.update () self.screen.fill (bílá) pro gameObj v self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip ()

ProgramPygamePart3
ProgramPygamePart3

Krok 7. Vyzkoušejte to

Zde by měl kód nyní vypadat:

    importovat pygame z pygame.locals importovat * rozlišení = (400, 300) bílá = (255, 255, 255) černá = (0, 0, 0) červená = (255, 0, 0) obrazovka = pygame.display.set_mode (rozlišení) třída Ball: def _init _ (self, xPos = Resolution [0] / 2, yPos = Resolution [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = „ball“def draw (self, povrch): pygame.draw.circle (povrch, černý, (self.x, self.y) (self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 or self.x> = Resolution [0]): self.dx *= -1 if (self.y <= 0 or self.y> = Resolution [1]): self.dy *= -1 class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (Resolution) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): pro událost v pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvent s () pro gameObj v self.gameObjects: gameObj.update () self.screen.fill (bílá) pro gameObj v self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display. flip () hra (). spustit ()

Část 5 z 8: Přidání objektu hráče

Krok 1. Vytvořte třídu hráče a konstruktéra

Vytvoříte další kruh, který je ovládán myší. Inicializujte hodnoty v konstruktoru. Poloměr je jedinou důležitou hodnotou.

    třída Hráč: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad

Krok 2. Definujte, jak nakreslit hráčský objekt

Bude to stejné, jako byste kreslili ostatní herní objekty.

    třída Hráč:… def draw (self, povrch): pygame.draw.circle (plocha, červená, (self.x, self.y), self.radius)

Krok 3. Přidejte ovládání myši k objektu hráče

V každém snímku zkontrolujte umístění myši a do tohoto bodu nastavte polohu objektů hráčů.

    třída Player:… def update (self): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1]

Krok 4. Přidejte objekt hráče do gameObjects

Vytvořte novou instanci hráče a přidejte ji do seznamu.

    třídní hra (): def _init _ (self):… self.gameObjects.append (Player ())

ProgramPygamePart4
ProgramPygamePart4

Krok 5. Vyzkoušejte to

Zde by měl kód nyní vypadat:

    importovat pygame z pygame.locals importovat * rozlišení = (400, 300) bílá = (255, 255, 255) černá = (0, 0, 0) červená = (255, 0, 0) obrazovka = pygame.display.set_mode (rozlišení) třída Ball: def _init _ (self, xPos = Resolution [0] / 2, yPos = Resolution [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = „ball“def draw (self, povrch): pygame.draw.circle (povrch, černý, (self.x, self.y) (self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 or self.x> = Resolution [0]): self.dx *= -1 if (self.y <= 0 or self.y> = Resolution [1]): self.dy *= -1 class Player: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (self, povrch): pygame.draw.circle (povrch, červený, (self.x, self.y), self.radius) def aktualizace (self): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_ režim (rozlišení) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Player ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100))) def handleEvents (self): pro událost v pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () for gameObj in self.gameObjects: gameObj.update () self.screen.fill (bílá) pro gameObj v self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). běh()

Část 6 z 8: Interakce objektů s hráčem

Krok 1. Změňte funkce aktualizace

Aby objekty mohly interagovat, budou k sobě muset mít přístup. Přidáme do Update další parametr, který bude předán v seznamu gameObjects. Budete jej muset přidat k objektu hráče i objektu Ball. Pokud máte hodně herních objektů, dědičnost vám může pomoci zachovat všechny vaše podpisy metod stejné.

    třída Ball:… def update (self, gameObjects):… class Player:… def update (self, gameObjects):

Krok 2. Zkontrolujte, zda nedochází ke kolizi mezi hráčem a míčky

Projděte všechny herní objekty a zkontrolujte, zda je typem objektu míč. Poté pomocí poloměrů obou objektů a vzorce vzdálenosti zkontrolujte, zda se nesrazí. Kruhy lze opravdu snadno kontrolovat na kolizích. To je hlavní důvod, proč jste pro tuto hru nepoužili jiný tvar.

    třída Hráč:… def aktualizace (self, gameObjects):… pro gameObj v gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2:

ProgramPygamePart5
ProgramPygamePart5

Krok 3. Ukončete hru, pokud hráč dostane „zásah“

Pojďme prozatím hru ukončit.

    if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: pygame.quit ()

Krok 4. Vyzkoušejte to

Jak by měl nyní kód vypadat:

    importovat pygame z pygame.locals importovat * rozlišení = (400, 300) bílá = (255, 255, 255) černá = (0, 0, 0) červená = (255, 0, 0) obrazovka = pygame.display.set_mode (rozlišení) třída Ball: def _init _ (self, xPos = Resolution [0] / 2, yPos = Resolution [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = „ball“def draw (self, povrch): pygame.draw.circle (povrch, černý, (self.x, self.y) (self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 or self.x> = Resolution [0]): self.dx *= -1 if (self.y <= 0 or self.y> = Resolution [1]): self.dy *= -1 class Player: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (self, povrch): pygame.draw.circle (plocha, červená, (self.x, self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] for gameObj in gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: třídní hra pygame.quit () (): 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): pro událost v 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 () hra (). run ()

Část 7 z 8: Přidání herního ovladače k vytváření objektů

Krok 1. Vytvořte třídu herního ovladače

Herní ovladače jsou zodpovědné za „běh“hry. Liší se od naší herní třídy, která je zodpovědná za kreslení a aktualizaci všech našich objektů. Ovladač bude pravidelně přidávat na obrazovku další míč, aby byla hra těžší. Přidejte konstruktor a inicializujte některé základní hodnoty. Interval bude čas před přidáním dalšího míče.

    třída GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "herní ovladač"

Krok 2. Přidejte funkci aktualizace

Tím se zkontroluje, kolik času uplynulo od okamžiku přidání míče nebo od začátku hry. Pokud je čas delší než interval, resetujete čas a přidáte míč.

    třída GameController:… def update (self, gameObjects): if self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball ())

Krok 3. Dejte kuličkám náhodné rychlosti

Aby byla hra pokaždé jiná, budete muset použít náhodná čísla. Rychlosti koulí jsou však nyní místo celého čísla plovoucí desetinnou čárkou.

    třída GameController:… 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))

Krok 4. Opravte funkci kreslení

Funkce draw nepřijme plováky. Před vylosováním koulí převeďme polohu míče na celá čísla.

    třída Ball:… def draw (self, povrch): pygame.draw.circle (plocha, černá, (int (self.x), int (self.y)), self.radius)

Krok 5. Definujte metodu losování pro herní ovladač

Protože se jedná o herní objekt, hlavní smyčka se ho pokusí nakreslit. Budete muset definovat funkci kreslení, která nic nedělá, aby hra nespadla.

    třída GameController:… def draw (self, screen): pass

Krok 6. Přidejte herní ovladač do gameObjects a odeberte 2 koule

Hra by nyní měla každých pět sekund vytvořit míč.

    třídní hra (): def _init _ (self):… self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ())

ProgramPygamePart6
ProgramPygamePart6

Krok 7. Vyzkoušejte to

Zde by měl kód nyní vypadat:

    importovat pygame z náhodného importu náhodně z pygame.locals import * rozlišení = (400, 300) bílá = (255, 255, 255) černá = (0, 0, 0) červená = (255, 0, 0) obrazovka = pygame. třída display.set_mode (Resolution) Ball: def _init _ (self, xPos = Resolution [0] / 2, yPos = Resolution [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, povrch): pygame.draw.circle (plocha, černá, (int (self. x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 nebo self. x> = rozlišení [0]): self.dx *= -1 if (self.y <= 0 or self.y> = Resolution [1]): self.dy *= -1 class Hráč: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = „hráč“def draw (self, povrch): pygame.draw.circle (povrch, červený, (self.x (self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] for gameObj in game Objekty: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius)* * 2: třída pygame.quit () GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "herní ovladač "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): pass 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 ()) def handleEvents (self): pro událost v 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 (bílý) pro gameObj v self.gameO bjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). run ()

Část 8 z 8: Přidání skóre a konec hry

Krok 1. Přidejte skóre do třídy herního ovladače

Vytvořte objekt písma a proměnnou skóre. Nakreslíte písmo do každého rámečku, aby se zobrazilo skóre, a zvýšíte skóre v každém snímku v aktualizaci.

    třída GameController: def _init _ (self, interval = 5):… self.score = 0 self.scoreText = pygame.font. Font (None, 12) def update (self, gameObjects):… self.score += 1 def draw (self, screen): screen.blit (self.scoreText.render (str (self.score), True, black), (5, 5))

Krok 2. Upravte, jak hra končí

Zbavme se ukončení, když hráč detekuje kolizi. Místo toho v přehrávači nastavíte proměnnou, kterou hra může kontrolovat. Když je gameOver nastaven, zastavte aktualizaci objektů. Tím se zmrazí vše na místě, aby hráč viděl, co se stalo, a zkontroloval své skóre. Všimněte si, že objekty jsou stále kresleny, jen nejsou aktualizovány.

    třída Hráč: def _init _ (self, rad = 20):… self.gameOver = Aktualizace falešné def (self, gameObjects):… pro gameObj v gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: self.gameOver = True class game (): def _init _ (self): … Self.gameOver = Falešný 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.gameOver

ProgramPygameFinal
ProgramPygameFinal

Krok 3. Vyzkoušejte to

Takto by nyní měl vypadat hotový kód:

    importovat pygame z náhodného importu náhodně z pygame.locals import * rozlišení = (400, 300) bílá = (255, 255, 255) černá = (0, 0, 0) červená = (255, 0, 0) obrazovka = pygame. třída display.set_mode (Resolution) Ball: def _init _ (self, xPos = Resolution [0] / 2, yPos = Resolution [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "ball" def draw (self, povrch): pygame.draw.circle (plocha, černá, (int (vlastní. x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 nebo self. x> = rozlišení [0]): self.dx *= -1 if (self.y <= 0 or self.y> = Resolution [1]): self.dy *= -1 class Hráč: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" self.gameOver = Draw falešné def (self, povrch): pygame.draw.circle (plocha, červená, (self.x, self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] pro gameObj v gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: self.gameOver = True class GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2*1000) self. type = "game controller" self.score = 0 self.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 + = 1 def draw (self, screen): screen.blit (self.scoreText.render (str (self.score), True, black), (5, 5)) třídní hra (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (rozlišení) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) self.gameOver = False def handleEvents (self): pro událost v pygame.event.get (): if ev ent.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. typ == "hráč": self.gameOver = gameObj.gameOver self.screen.fill (bílý) pro gameObj v self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). run ()

Doporučuje: