Ako naprogramovať hru v Pythone pomocou Pygame (s obrázkami)

Obsah:

Ako naprogramovať hru v Pythone pomocou Pygame (s obrázkami)
Ako naprogramovať hru v Pythone pomocou Pygame (s obrázkami)

Video: Ako naprogramovať hru v Pythone pomocou Pygame (s obrázkami)

Video: Ako naprogramovať hru v Pythone pomocou Pygame (s obrázkami)
Video: Opening a Jupyter Notebook from the Command Line! 2024, Apríl
Anonim

Toto je úvod do Pygame pre ľudí, ktorí už poznajú Python. Tento článok vás naučí kroky k vytvoreniu jednoduchej hry, v ktorej sa hráč vyhýba skákajúcim loptičkám.

Kroky

Časť 1 z 8: Inštalácia Pygame

Krok 1. Stiahnite si Pygame

Nájdite ho pre svoju platformu na stránke

Krok 2. Spustite inštalátor

Krok 3. Overte, či inštalácia fungovala

Otvorte terminál Pythonu. Zadajte „importovať hru“. Ak nevidíte žiadne chyby, Pygame bol úspešne nainštalovaný.

    import pygame

Časť 2 z 8: Nastavenie základného okna

Krok 1. Otvorte nový súbor

Krok 2. Importujte hru Pygame

Pygame je knižnica, ktorá poskytuje prístup k grafickým funkciám. Ak chcete získať ďalšie informácie o tom, ako tieto funkcie fungujú, môžete si ich vyhľadať na webovej stránke Pygame.

    import pygame z pygame.locals import *

Krok 3. Nastavte rozlíšenie okna

Vytvoríte globálnu premennú pre rozlíšenie obrazovky, aby na ňu bolo možné odkazovať v niekoľkých častiach hry. Je tiež ľahké nájsť ho v hornej časti súboru, takže ho môžete neskôr zmeniť. Pre pokročilé projekty by bolo lepšie vložiť tieto informácie do samostatného súboru.

    rozlíšenie = (400, 300)

Krok 4. Definujte niektoré farby

Farby v hre sú (RBGA, ktoré sa pohybujú v hodnotách od 0 do 255. Alfa hodnota (A) je voliteľná, ale ostatné farby (červená, modrá a zelená sú povinné).

    biela = (255, 255, 255) čierna = (0, 0, 0) červená = (255, 0, 0)

Krok 5. Inicializujte obrazovku

Použite premennú rozlíšenia, ktorá bola definovaná skôr.

    obrazovka = pygame.display.set_mode (rozlíšenie)

Krok 6. Vytvorte hernú slučku

Opakujte určité akcie v každom rámci našej hry. Vytvorte slučku, ktorá sa bude vždy opakovať, aby ste prešli všetkými týmito akciami.

    kým je pravda:

Krok 7. Vyfarbite obrazovku

    screen.fill (biela)

Krok 8. Zobrazte obrazovku

Ak spustíte program, obrazovka sa zmení na bielu a potom sa program zrúti. Dôvodom je, že operačný systém odosiela do hry udalosti a hra s nimi nič nerobí. Akonáhle hra dostane príliš veľa nespracovaných udalostí, dôjde k zlyhaniu.

    zatiaľ čo pravda:… pygame.display.flip ()

Krok 9. Vybavujte udalosti

Získajte zoznam všetkých udalostí, ktoré sa vyskytli v každom rámci. Budete sa starať iba o jednu udalosť, o prestávku. K tomu dôjde, keď používateľ zavrie okno hry. To tiež zabráni zlyhaniu nášho programu v dôsledku príliš veľkého počtu udalostí.

    while True:… pre udalosť v pygame.event.get (): if event.type == QUIT: pygame.quit ()

ProgramPygamePart1
ProgramPygamePart1

Krok 10. Skúste to

Takto by mal kód teraz vyzerať:

    importovať hru pygame z pygame.locals import * rozlíšenie = (400, 300) biela = (255, 255, 255) čierna = (0, 0, 0) červená = (255, 0, 0) obrazovka = pygame.display.set_mode (rozlíšenie) zatiaľ čo True: screen.fill (biela) pygame.display.flip () pre udalosť v pygame.event.get (): if event.type == QUIT: pygame.quit ()

Časť 3 z 8: Výroba herného objektu

Krok 1. Vytvorte novú triedu a konštruktora

Nastavte všetky vlastnosti objektu. Tiež zadávate predvolené hodnoty pre všetky vlastnosti.

    trieda 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 = "lopta"

Krok 2. Definujte, ako nakresliť objekt

Pomocou vlastností, ktoré boli definované v konštruktéri, nakreslíte loptu ako kruh a tiež prejdete povrchom do funkcie, na ktorú nakreslíte predmet. Povrch bude objekt obrazovky, ktorý bol vytvorený pomocou rozlíšenia skôr.

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

Krok 3. Vytvorte inštanciu triedy a tiež povedzte hernej slučke, aby vytiahla loptu do každej slučky

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

Krok 4. Nechajte objekt pohybovať sa

Vytvorte funkciu, ktorá aktualizuje polohu objektu. Zavolajte túto funkciu v každom hernom cykle.

    trieda Ball:… def update (self): self.x += self.dx self.y += self.dy

Krok 5. Obmedzte obnovovaciu frekvenciu

Lopta sa bude pohybovať veľmi rýchlo, pretože herná slučka beží stokrát za sekundu. Pomocou hodiniek Pygame obmedzte obnovovaciu frekvenciu na 60 fps.

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

Krok 6. Držte loptu na obrazovke

Pridajte kontroly do funkcie aktualizácie, aby ste obrátili smer lopty, ak narazí na jeden z okrajov obrazovky.

    class Ball:… def update (self):… if (self.x <= 0 or self.x> = Resolution [0]): self.dx *= -1 if (self.y <= 0 or self.y > = rozlíšenie [1]): self.dy *= -1

ProgramPygamePart2
ProgramPygamePart2

Krok 7. Skúste to

Takto by mal kód teraz vyzerať:

    importovať pygame z pygame.locals import * rozlíšenie = (400, 300) biely = (255, 255, 255) čierny = (0, 0, 0) červený = (255, 0, 0) obrazovka = pygame.display.set_mode (rozlíšenie) class 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, surface): pygame.draw.circle (povrch, čierny, (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 ()

Časť 4 z 8: Organizovanie hry

Krok 1. Na zorganizovanie všetkého použite triedy

Hra bude stále komplikovanejšia. Na usporiadanie kódu použite objektovo orientované techniky.

Krok 2. Vytvorte z hernej slučky triedu

Pretože naša hra teraz obsahuje údaje vrátane vašich herných objektov a funkcií, má zmysel zmeniť vašu hernú slučku na triedu.

    triedna hra ():

Krok 3. Pridajte konštruktor

Tu vytvoríte inštanciu niektorých herných objektov, vytvoríte našu obrazovku a hodiny a inicializujete Pygame. Na používanie určitých funkcií, ako je text alebo zvuk, je potrebné Pygame inicializovať.

    triedna hra (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (Resolution) self.clock = pygame.time. Clock ()

Krok 4. Vybavujte udalosti vo funkcii

    triedna hra ():… def handleEvents (self): pre udalosť v pygame.event.get (): if event.type == QUIT: pygame.quit ()

Krok 5. Urobte z hernej slučky funkciu

Zavolajte funkciu spracovania udalostí každú slučku.

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

Krok 6. Zaobchádzajte s viacerými hernými predmetmi

Práve teraz musí tento kód volať na každý objekt kresbu a aktualizáciu. Ak by ste mali veľa predmetov, bolo by to chaotické. Pridajte náš objekt do poľa a potom aktualizujte a nakreslite všetky objekty v poli v každej slučke. Teraz môžete ľahko pridať ďalší objekt a dať mu inú počiatočnú pozíciu.

    triedna hra (): def _init _ (self):… self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) … def run (self): while True: self.handleEvents () for gameObj in self.gameObjects: gameObj.update () self.screen.fill (white) for gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip ()

ProgramPygamePart3
ProgramPygamePart3

Krok 7. Skúste to

Takto by mal kód teraz vyzerať:

    importovať hru pygame z pygame.locals import * rozlíšenie = (400, 300) biela = (255, 255, 255) čierna = (0, 0, 0) červená = (255, 0, 0) obrazovka = pygame.display.set_mode (rozlíšenie) class 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, surface): pygame.draw.circle (povrch, čierny, (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): pre udalosť v pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvent s () pre gameObj v self.gameObjects: gameObj.update () self.screen.fill (biela) pre gameObj v self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display. flip () hra (). spustiť ()

Časť 5 z 8: Pridanie objektu hráča

Krok 1. Vytvorte triedu a konštruktéra hráča

Vytvoríte ďalší kruh, ktorý je ovládaný myšou. Inicializujte hodnoty v konštruktore. Polomer je jedinou dôležitou hodnotou.

    trieda Hráč: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad

Krok 2. Definujte, ako sa kreslí predmet hráča

Bude to rovnaké, ako keď ste nakreslili ostatné herné objekty.

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

Krok 3. Pridajte ovládanie myši k objektu hráča

V každom snímke skontrolujte umiestnenie myši a nastavte polohu objektov hráčov do tohto bodu.

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

Krok 4. Pridajte objekt hráča do gameObjects

Vytvorte novú inštanciu hráča a pridajte ju do zoznamu.

    triedna hra (): def _init _ (self):… self.gameObjects.append (Player ())

ProgramPygamePart4
ProgramPygamePart4

Krok 5. Skúste to

Takto by mal kód teraz vyzerať:

    importovať hru pygame z pygame.locals import * rozlíšenie = (400, 300) biela = (255, 255, 255) čierna = (0, 0, 0) červená = (255, 0, 0) obrazovka = pygame.display.set_mode (rozlíšenie) class 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, surface): pygame.draw.circle (povrch, čierny, (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, surface): pygame.draw.circle (povrch, červený, (self.x, self.y), self.radius) def aktualizácia (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 (rozlíšenie) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Player ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100))) def handleEvents (self): pre udalosť 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 (biela) pre gameObj v self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). spustiť ()

Časť 6 z 8: Interakcia predmetov s hráčom

Krok 1. Zmeňte funkcie aktualizácie

Aby objekty mohli interagovať, budú potrebovať jeden k druhému prístup. Pridajme do Aktualizácie ďalší parameter, ktorý sa odovzdá v zozname gameObjects. Budete ho musieť pridať k objektu hráča aj k objektom Lopta. Ak máte veľa herných predmetov, dedičnosť by vám mohla pomôcť zachovať všetky vaše podpisy metód.

    trieda Ball:… def update (self, gameObjects):… class Player:… def update (self, gameObjects):

Krok 2. Skontrolujte, či nedochádza k zrážkam medzi hráčom a loptičkami

Prejdite všetkými hernými objektmi a skontrolujte, či je typ objektu loptička. Potom pomocou polomerov dvoch objektov a vzorca vzdialenosti skontrolujte, či sa zrazia. Kruhy sa dajú veľmi ľahko kontrolovať na kolíziách. To je hlavný dôvod, prečo ste v tejto hre nepoužili iný tvar.

    trieda Hráč:… aktualizácia def (self, gameObjects):… pre gameObj v gameObjects: if gameObj.type == „lopta“: if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (hraObj.radius + self.radius) ** 2:

ProgramPygamePart5
ProgramPygamePart5

Krok 3. Ak hráč „zasiahne“, ukončite hru

Teraz môžeme hru ukončiť.

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

Krok 4. Skúste to

Takto by mal kód teraz vyzerať:

    importovať hru pygame z pygame.locals import * rozlíšenie = (400, 300) biela = (255, 255, 255) čierna = (0, 0, 0) červená = (255, 0, 0) obrazovka = pygame.display.set_mode (rozlíšenie) class 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, surface): pygame.draw.circle (povrch, čierny, (self.x, self.y), self.radius) aktualizácia def (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, surface): pygame.draw.circle (povrch, červený, (self.x, self.y), self.radius) definícia aktualizácie (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] for gameObj in gameObjects: if gameObj.type == "ball": ak (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: triedna 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): pre udalosť 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 (). beh ()

Časť 7 z 8: Pridanie herného ovládača na vytváranie objektov

Krok 1. Vytvorte triedu herného ovládača

Za „spustenie“hry zodpovedajú herné ovládače. Líši sa od našej hernej triedy, ktorá je zodpovedná za kreslenie a aktualizáciu všetkých našich objektov. Ovládač bude pravidelne pridávať na obrazovku ďalšiu loptičku, aby bola hra ťažšia. Pridajte konštruktor a inicializujte niektoré základné hodnoty. Interval bude čas pred pridaním ďalšej loptičky.

    trieda GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "ovládač hry"

Krok 2. Pridajte funkciu aktualizácie

Toto skontroluje, koľko času uplynulo od pridania loptičky alebo od začiatku hry. Ak je čas dlhší ako interval, vynulujete ho a pridáte loptičku.

    trieda 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. Dajte loptičkám náhodné rýchlosti

Aby bola hra vždy iná, budete musieť použiť náhodné čísla. Rýchlosti loptičiek sú však teraz namiesto celého čísla číslom s pohyblivou rádovou čiarkou.

    trieda 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 funkciu kreslenia

Funkcia kreslenia neakceptuje plaváky. Pred vytiahnutím loptičiek premeníme polohu lopty na celé čísla.

    trieda Ball:… def draw (self, povrch): pygame.draw.circle (plocha, čierna, (int (self.x), int (self.y)), self.radius)

Krok 5. Definujte metódu žrebovania pre herný ovládač

Keďže ide o herný objekt, hlavná slučka sa ho pokúsi nakresliť. Budete musieť definovať funkciu kreslenia, ktorá nerobí nič, aby hra nespadla.

    trieda GameController:… def draw (self, screen): pass

Krok 6. Pridajte herný ovládač do gameObjects a odstráňte 2 loptičky

Hra by mala teraz priniesť loptu každých päť sekúnd.

    triedna hra (): def _init _ (self):… self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ())

ProgramPygamePart6
ProgramPygamePart6

Krok 7. Skúste to

Takto by mal kód teraz vyzerať:

    import pygame z náhodného importu náhodný z pygame.locals import * rozlíšenie = (400, 300) biely = (255, 255, 255) čierny = (0, 0, 0) červený = (255, 0, 0) obrazovka = pygame. trieda 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, surface): pygame.draw.circle (povrch, čierny, (int (self. x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 alebo self. x> = rozlíšenie [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 == "lopta": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius)* * 2: trieda pygame.quit () GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "ovládač hry "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): pre udalosť 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 (biely) pre gameObj v self.gameO bjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). run ()

Časť 8 z 8: Pridanie skóre a koniec hry

Krok 1. Pridajte skóre do triedy herných ovládačov

Vytvorte objekt písma a premennú skóre. V každom rámčeku nakreslíte písmo, aby sa zobrazilo skóre, a skóre sa zvýši v každom políčku pri aktualizácii.

    trieda 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, ako sa hra končí

Zbavme sa toho, keď hráč zistí kolíziu. Namiesto toho v prehrávači nastavíte premennú, ktorú hra môže kontrolovať. Keď je gameOver nastavený, zastavte aktualizáciu objektov. Tým sa zmrazí všetko na mieste, aby hráč mohol vidieť, čo sa stalo, a skontrolovať svoje skóre. Objekty sa stále kreslia, len nie sú aktualizované.

    trieda Hráč: def _init _ (self, rad = 20):… self.gameOver = Aktualizácia falošného def (self, gameObjects): … pre gameObj v gameObjects: if gameObj.type == "lopta": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: self.gameOver = Pravá triedna hra (): def _init _ (self): … Self.gameOver = Spustenie s falošným def (self): while True: self.handleEvents () ak nie self.gameOver: pre gameObj v self.gameObjects: gameObj.update (self.gameObjects) ak gameObj.type == "hráč": self.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

Krok 3. Vyskúšajte to

Takto by mal teraz vyzerať hotový kód:

    importovať pygame z náhodného importu náhodne z pygame.locals import * rozlíšenie = (400, 300) biela = (255, 255, 255) čierna = (0, 0, 0) červená = (255, 0, 0) obrazovka = pygame. trieda 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, surface): pygame.draw.circle (povrch, čierny, (int (self. x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 alebo self. x> = rozlíšenie [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 = Kresba s falošným rozlíšením (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] pre gameObj v gameObjects: if gameObj.type == "lopta": 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)) triedna hra (): 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 = False def handleEvents (self): pre udalosť 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. zadajte == "hráč": self.gameOver = gameObj.gameOver self.screen.fill (biela) pre gameObj v self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). run ()

Odporúča: