Kako programirati igro v Pythonu s programom Pygame (s slikami)

Kazalo:

Kako programirati igro v Pythonu s programom Pygame (s slikami)
Kako programirati igro v Pythonu s programom Pygame (s slikami)

Video: Kako programirati igro v Pythonu s programom Pygame (s slikami)

Video: Kako programirati igro v Pythonu s programom Pygame (s slikami)
Video: New Style Transfer Extension, ControlNet of Automatic1111 Stable Diffusion T2I-Adapter Color Control 2024, April
Anonim

To je uvod v Pygame za ljudi, ki Python že poznajo. Ta članek vas bo naučil korakov za izdelavo preproste igre, v kateri se igralec izogiba odbijajočim žogam.

Koraki

1. del od 8: Namestitev programa Pygame

Korak 1. Prenesite Pygame

Poiščite ga za svojo platformo na naslovu

Korak 2. Zaženite namestitveni program

Korak 3. Preverite, ali je namestitev delovala

Odprite terminal Python. Vnesite "import pygame." Če ne vidite nobenih napak, je bil Pygame uspešno nameščen.

    uvozi pygame

2. del od 8: Nastavitev osnovnega okna

Korak 1. Odprite novo datoteko

Korak 2. Uvozite Pygame

Pygame je knjižnica, ki omogoča dostop do grafičnih funkcij. Če želite več informacij o delovanju teh funkcij, jih lahko poiščete na spletnem mestu Pygame.

    uvozi pygame iz pygame.locals uvoz *

Korak 3. Nastavite ločljivost okna

Za ločljivost zaslona boste ustvarili globalno spremenljivko, na katero se lahko sklicujete v več delih igre. Prav tako ga je enostavno najti na vrhu datoteke, zato ga lahko kasneje spremenite. Za napredne projekte bi bilo bolje dati te podatke v ločeno datoteko.

    ločljivost = (400, 300)

Korak 4. Določite nekaj barv

Barve v pigamu so (RBGA, ki segajo v vrednosti med 0 in 255. Vrednost alfa (A) ni obvezna, druge barve (rdeča, modra in zelena pa so obvezne).

    bela = (255, 255, 255) črna = (0, 0, 0) rdeča = (255, 0, 0)

Korak 5. Inicializirajte zaslon

Uporabite spremenljivko ločljivosti, ki je bila definirana prej.

    screen = pygame.display.set_mode (ločljivost)

Korak 6. Naredite zanko igre

Ponovite določena dejanja v vsakem kadru naše igre. Naredite zanko, ki se bo vedno ponavljala skozi vsa ta dejanja.

    medtem ko je res:

Korak 7. Pobarvajte zaslon

    screen.fill (bela)

Korak 8. Prikažite zaslon

Če zaženete program, se zaslon obarva belo in program se bo zrušil. To je zato, ker operacijski sistem pošilja dogodke v igro in igra z njimi ne počne ničesar. Ko igra prejme preveč neobdelanih dogodkov, se bo zrušila.

    medtem ko je True:… pygame.display.flip ()

Korak 9. Obravnavajte dogodke

Pridobite seznam vseh dogodkov, ki so se zgodili v vsakem okviru. Zanima vas le en dogodek, dogodek prenehanja. To se zgodi, ko uporabnik zapre okno igre. To bo tudi preprečilo zrušitev našega programa zaradi preveč dogodkov.

    medtem ko True:… za dogodek v pygame.event.get (): if event.type == QUIT: pygame.quit ()

ProgramPygamePart1
ProgramPygamePart1

Korak 10. Preizkusite

Tako naj bi koda izgledala zdaj:

    uvoz pygame iz pygame.locals uvoz * ločljivost = (400, 300) bela = (255, 255, 255) črna = (0, 0, 0) rdeča = (255, 0, 0) zaslon = pygame.display.set_mode (ločljivost), medtem ko je True: screen.fill (belo) pygame.display.flip () za dogodek v pygame.event.get (): if event.type == QUIT: pygame.quit ()

3. del od 8: Izdelava predmeta igre

Korak 1. Ustvarite nov razred in konstruktor

Nastavite vse lastnosti predmeta. Za vse lastnosti podajate tudi privzete vrednosti.

    razred Ball: def _init _ (self, xPos = resolucija [0] / 2, yPos = resolucija [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"

Korak 2. Določite, kako narisati predmet

Uporabite lastnosti, ki so bile določene v konstruktorju, da kroglico narišete kot krog, pa tudi, da površino vnesete v funkcijo, da narišete predmet. Površina bo objekt zaslona, ki je bil ustvarjen z uporabo ločljivosti prej.

    def draw (self, surface): pygame.draw.circle (površina, črna, (self.x, self.y), self.radius)

Korak 3. Naredite primerek razreda in povejte igralni zanki, naj v vsaki zanki potegne žogo

    ball = Ball () medtem ko je True:… ball.draw (zaslon)

Korak 4. Premaknite predmet

Ustvarite funkcijo, ki bo posodobila položaj predmeta. To funkcijo pokličite v vsaki zanki igre.

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

Korak 5. Omejite hitrost sličic

Žoga se bo zelo hitro premikala, ker igralna zanka teče stotine krat na sekundo. Z uro Pygame omejite hitrost sličic na 60 sličic na sekundo.

    ura = pygame.time. Clock () medtem ko je True:… clock.tick (60)

Korak 6. Držite žogo na zaslonu

Dodajte preverjanja v funkcijo posodobitve, da obrnete smer žoge, če zadene enega od robov zaslona.

    razred Ball:… def posodobitev (self):… if (self.x <= 0 ali self.x> = resolucija [0]): self.dx *= -1 if (self.y <= 0 ali self.y > = ločljivost [1]): self.dy *= -1

ProgramPygamePart2
ProgramPygamePart2

Korak 7. Preizkusite

Tako naj bi koda izgledala zdaj:

    uvoz pygame iz pygame.locals uvoz * ločljivost = (400, 300) bela = (255, 255, 255) črna = (0, 0, 0) rdeča = (255, 0, 0) zaslon = pygame.display.set_mode (ločljivost) razred Ball: def _init _ (self, xPos = resolucija [0] / 2, yPos = ločljivost [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 (površina, črna, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 ali self.x> = ločljivost [0]): self.dx *= -1 if (self.y <= 0 or self.y> = resolucija [1]): self.dy *= -1 ball = Ball () ura = pygame.time. Clock () while True: zaslon. fill (white) ball.draw (screen) ball.update () pygame.display.flip () clock.tick (60) za dogodek v pygame.event.get (): if event.type == QUIT: pygame.quit ()

4. del od 8: Organiziranje igre

Korak 1. Uporabite razrede, da vse organizirate

Igra se bo še bolj zapletla. Za ureditev kode uporabite objektno usmerjene tehnike.

Korak 2. Iz igre naredite zanko v razred

Ker naša igra zdaj vsebuje podatke, vključno z vašimi predmeti in funkcijami igre, je smiselno, da svojo zanko igre spremenite v razred.

    razredna igra ():

Korak 3. Dodajte konstruktor

Tukaj boste ustvarili nekaj igralnih predmetov, ustvarili naš zaslon in uro ter inicializirali Pygame. Pygame je treba inicializirati za uporabo nekaterih funkcij, kot sta besedilo ali zvok.

    class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (ločljivost) self.clock = pygame.time. Clock ()

Korak 4. Upravljanje dogodkov v funkciji

    class game ():… def handleEvents (self): za dogodek v pygame.event.get (): if event.type == QUIT: pygame.quit ()

Korak 5. Naj bo zanka igre funkcija

Vsako zanko pokličite funkcijo upravljanja dogodkov.

    class game ():… def run (self): while True: self.handleEvents () self.screen.fill (bela) self.clock.tick (60) pygame.display.flip ()

Korak 6. Ravnajte z več predmeti igre

Ta koda mora zdaj za vsak okvir poklicati risanje in posodobitev našega predmeta. Če bi imeli veliko predmetov, bi to postalo neredno. Dodajmo naš predmet v matriko, nato pa v vsaki zanki posodobimo in narišimo vse predmete v matriki. Zdaj lahko preprosto dodate drug predmet in mu daste drugačen začetni položaj.

    class game (): def _init _ (self):… self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100))… def run (self): while True: self.handleEvents () za gameObj v self.gameObjects: gameObj.update () self.screen.fill (belo) za gameObj v self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip ()

ProgramPygamePart3
ProgramPygamePart3

Korak 7. Preizkusite

Tako naj bi koda izgledala zdaj:

    uvoz pygame iz pygame.locals uvoz * ločljivost = (400, 300) bela = (255, 255, 255) črna = (0, 0, 0) rdeča = (255, 0, 0) zaslon = pygame.display.set_mode (ločljivost) razred Ball: def _init _ (self, xPos = resolucija [0] / 2, yPos = resolucija [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 (površina, črna, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 ali self.x> = ločljivost [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 (ločljivost) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): za dogodek v pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvent s () za gameObj v self.gameObjects: gameObj.update () self.screen.fill (belo) za gameObj v self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display. flip () game (). run ()

5. del od 8: Dodajanje predmeta igralca

Korak 1. Naredite razred igralca in konstruktor

Naredili boste še en krog, ki ga nadzira miška. Inicializirajte vrednosti v konstruktorju. Polmer je edina pomembna vrednost.

    razred Player: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad

Korak 2. Določite, kako narisati predmet predvajalnika

Podobno bo, kot ste narisali druge predmete igre.

    razred Player:… def draw (self, surface): pygame.draw.circle (surface, red, (self.x, self.y), self.radius)

Korak 3. Dodajte nadzorni gumb miške za predmet predvajalnika

V vsakem kadru preverite lokacijo miške in nastavite lokacijo predmetov igralcev na to točko.

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

Korak 4. Dodajte predmet predvajalnika v gameObjects

Ustvarite nov primerek predvajalnika in ga dodajte na seznam.

    class game (): def _init _ (self):… self.gameObjects.append (Player ())

ProgramPygamePart4
ProgramPygamePart4

Korak 5. Preizkusite

Tako naj bi koda izgledala zdaj:

    uvoz pygame iz pygame.locals uvoz * ločljivost = (400, 300) bela = (255, 255, 255) črna = (0, 0, 0) rdeča = (255, 0, 0) zaslon = pygame.display.set_mode (ločljivost) razred Ball: def _init _ (self, xPos = resolucija [0] / 2, yPos = resolucija [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 (površina, črna, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 ali self.x> = ločljivost [0]): self.dx *= -1 if (self.y <= 0 ali self.y> = resolucija [1]): self.dy *= -1 razred Igralec: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (self, surface): pygame.draw.circle (surface, red, (self.x, self.y), self.radius) def update (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_ način (ločljivost) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Player ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): za dogodek v pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () za gameObj v sebi.gameObjects: gameObj.update () self.screen.fill (belo) za gameObj v self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). run ()

6. del od 8: Ustvarjanje predmetov v interakciji s predvajalnikom

Korak 1. Spremenite funkcije posodobitve

Da bi lahko predmeti medsebojno delovali, morajo imeti dostop do drugega. Posodobitvi dodamo še en parameter, ki bo prešel na seznam gameObjects. Dodati ga boste morali predmetu predvajalnika in predmetu žogica. Če imate veliko predmetov iger, bi vam lahko z dedovanjem pomagali ohraniti vse podpise metod enake.

    class Ball:… def update (self, gameObjects):… class player:… def update (self, gameObjects):

Korak 2. Preverite trke med igralcem in žogicami

Pojdite skozi vse predmete igre in preverite, ali je vrsta predmetov žoga. Nato s polmeri obeh predmetov in formulo razdalje preverite, ali se trčita. Kroge je res enostavno preveriti. To je največji razlog, da za to igro niste uporabili druge oblike.

    class Player:… def update (self, gameObjects):… for 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

Korak 3. Končajte igro, če igralec dobi "zadetek"

Zaenkrat pustimo igro.

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

Korak 4. Preizkusite

Takole bi morala izgledati koda:

    uvoz pygame iz pygame.locals uvoz * ločljivost = (400, 300) bela = (255, 255, 255) črna = (0, 0, 0) rdeča = (255, 0, 0) zaslon = pygame.display.set_mode (ločljivost) razred Ball: def _init _ (self, xPos = resolucija [0] / 2, yPos = resolucija [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 (površina, črna, (self.x, self.y), self.radius) def posodobitev (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 ali self.x> = resolucija [0]): self.dx *= -1 if (self.y <= 0 ali self.y> = resolucija [1]): self.dy *= -1 razred Igralec: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (self, surface): pygame.draw.circle (površina, rdeča, (self.x, self.y), self.radius) def posodobitev (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] za gameObj v gameObjects: če je gameObj.type == "žoga": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: pygame.quit () razred igra (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (ločljivost) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Player ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): za dogodek v pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () za gameObj v self.gameObjects: gameObj.update (self.gameObjects) self.screen.fill (belo) za gameObj v self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). run ()

7. del od 8: Dodajanje krmilnika iger za ustvarjanje predmetov

Korak 1. Ustvarite razred krmilnika iger

Krmilniki iger so odgovorni za "vodenje" igre. Razlikuje se od našega razreda iger, ki je odgovoren za risanje in posodabljanje vseh naših predmetov. Krmilnik bo občasno dodal še eno žogo na zaslon, da bo igra otežena. Dodajte konstruktor in inicializirajte nekaj osnovnih vrednosti. Interval bo čas, preden se doda druga žoga.

    razred GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "krmilnik igre"

Korak 2. Dodajte funkcijo posodobitve

S tem se preveri, koliko časa je minilo od trenutka, ko je bila žogica dodana, ali od začetka igre. Če je čas večji od intervala, ga ponastavite in dodate žogo.

    razred GameController:… def posodobitev (self, gameObjects): če self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball ())

Korak 3. Dajte kroglicam naključne hitrosti

Če želite igro vsakič narediti drugačno, boste morali uporabiti naključne številke. Hitrosti kroglic pa so zdaj število s plavajočo vejico namesto celo število.

    razred GameController:… def posodobitev (self, gameObjects): če self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball (xVel = naključno ()*2, yVel = naključno ()*2))

Korak 4. Odpravite funkcijo žrebanja

Funkcija risanja ne sprejema plavajočih. Pretvorimo položaj žoge v cela števila, preden se žogice izvlečejo.

    razred Ball:… def draw (self, surface): pygame.draw.circle (površina, črna, (int (self.x), int (self.y)), self.radius)

Korak 5. Določite način žrebanja za krmilnik igre

Ker gre za predmet igre, ga bo glavna zanka poskušala narisati. Določiti morate funkcijo žrebanja, ki ne naredi ničesar, da se igra ne zruši.

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

Korak 6. Dodajte igralni krmilnik v gameObjects in odstranite 2 kroglici

Igra bi morala zdaj sprostiti žogo vsakih pet sekund.

    class game (): def _init _ (self):… self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ())

ProgramPygamePart6
ProgramPygamePart6

Korak 7. Preizkusite

Tako naj bi koda izgledala zdaj:

    uvoz pigame iz naključnega uvoza naključno iz pygame.locals uvoz * ločljivost = (400, 300) bela = (255, 255, 255) črna = (0, 0, 0) rdeča = (255, 0, 0) zaslon = pygame. display.set_mode (ločljivost) razred Ball: def _init _ (self, xPos = resolucija [0] / 2, yPos = resolucija [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 (površina, črna, (int (self) x), int (self.y)), self.radius) def posodobitev (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 ali self. x> = resolucija [0]): self.dx *= -1 if (self.y <= 0 ali self.y> = ločljivost [1]): self.dy *= -1 razred Igralec: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw draw (self, surface): pygame.draw.circle (površina, rdeča, (self.x, self.y), self.radius) def posodobitev (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] za gameObj v igri Predmeti: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius)* * 2: pygame.quit () razred GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "krmilnik igre "def update (self, gameObjects): if self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball (xVel = naključno ()*2, yVel = random ()*2)) def draw (self, screen): pass class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (resolucija) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) def handleEvents (self): za dogodek v pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () za gameObj v self.gameObjects: gameObj.update (self.gameObjects) self.screen.polnite (belo) za gameObj v self.gameO bjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). run ()

8. del od 8: Dodajanje rezultata in končana tekma

Korak 1. Dodajte rezultat razredu igralnih krmilnikov

Ustvarite predmet pisave in spremenljivko ocene. Pisavo boste narisali v vsak okvir, da prikažete rezultat in povečate rezultat v vsakem okviru v posodobitvi.

    razred GameController: def _init _ (self, interval = 5):… self.score = 0 self.scoreText = pygame.font. Font (Brez, 12) def update (self, gameObjects):… self.score += 1 def draw (self, screen): screen.blit (self.scoreText.render (str (self.score), True, črno), (5, 5))

Korak 2. Spremenite, kako se igra konča

Znebimo se odpovedi, ko igralec zazna trk. Namesto tega boste v predvajalniku nastavili spremenljivko, ki jo lahko igra preveri. Ko je nastavljen gameOver, ustavite posodabljanje predmetov. To bo zamrznilo vse na mestu, tako da bo lahko igralec videl, kaj se je zgodilo, in preveril svoj rezultat. Upoštevajte, da se predmeti še vedno rišejo, samo ne posodabljajo.

    class Player: def _init _ (self, rad = 20):… self.gameOver = False def update (self, gameObjects):… za 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 = False def run (self): while True: self.handleEvents () če ne self.gameOver: za gameObj v self.gameObjects: gameObj.update (self.gameObjects), če gameObj.type == "player": self.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

Korak 3. Preizkusite

Takole bi morala izgledati končana koda:

    uvoz pigame iz naključnega uvoza naključno iz pygame.locals uvoz * ločljivost = (400, 300) bela = (255, 255, 255) črna = (0, 0, 0) rdeča = (255, 0, 0) zaslon = pygame. display.set_mode (ločljivost) razred Ball: def _init _ (self, xPos = resolucija [0] / 2, yPos = resolucija [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 (površina, črna, (int (self) x), int (self.y)), self.radius) def posodobitev (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 ali self. x> = resolucija [0]): self.dx *= -1 if (self.y <= 0 ali self.y> = ločljivost [1]): self.dy *= -1 razred Igralec: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" self.gameOver = False def draw (self, surface): pygame.draw.circle (površina, rdeča, (self.x, self.y), self.radius) posodobitev def (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] za 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 = Pravi razred GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2*1000) self. type = "krmilnik igre" self.score = 0 self.scoreText = pygame.font. Font (Brez, 12) def update (self, gameObjects): če 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)) class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (ločljivost) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) self.gameOver = False def handleEvents (self): za dogodek v pygame.event.get (): če ev ent.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () če ne self.gameOver: za gameObj v self.gameObjects: gameObj.update (self.gameObjects) if gameObj. vnesite == "player": self.gameOver = gameObj.gameOver self.screen.fill (belo) za gameObj v self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). run ()

Priporočena: