Kako programirati igru u Pythonu s Pygameom (sa slikama)

Sadržaj:

Kako programirati igru u Pythonu s Pygameom (sa slikama)
Kako programirati igru u Pythonu s Pygameom (sa slikama)

Video: Kako programirati igru u Pythonu s Pygameom (sa slikama)

Video: Kako programirati igru u Pythonu s Pygameom (sa slikama)
Video: Priprema slika za igru Vješalo 2024, Svibanj
Anonim

Ovo je uvod u Pygame za ljude koji već znaju Python. Ovaj članak će vas naučiti koracima za izgradnju jednostavne igre u kojoj igrač izbjegava odbijanje lopti.

Koraci

1. dio od 8: Instaliranje Pygamea

Korak 1. Preuzmite Pygame

Pronađite je za svoju platformu na

Korak 2. Pokrenite instalacijski program

Korak 3. Provjerite radi li instalacija

Otvorite Python terminal. Upišite "import pygame." Ako ne vidite greške, Pygame je uspješno instaliran.

    uvoziti pygame

2. dio od 8: Postavljanje osnovnog prozora

Korak 1. Otvorite novu datoteku

Korak 2. Uvezite Pygame

Pygame je knjižnica koja omogućuje pristup grafičkim funkcijama. Ako želite više informacija o tome kako ove funkcije rade, možete ih potražiti na web stranici Pygame.

    uvoz pygame iz pygame.locals uvoz *

Korak 3. Postavite razlučivost prozora

Napravit ćete globalnu varijablu za razlučivost zaslona tako da se može referencirati u nekoliko dijelova igre. Također je lako pronaći na vrhu datoteke pa se kasnije može promijeniti. Za napredne projekte bolje bi bilo staviti ove podatke u zasebnu datoteku.

    razlučivost = (400, 300)

Korak 4. Definirajte neke boje

Boje u pigameu su (RBGA koje se kreću u vrijednostima između 0 i 255. Alfa vrijednost (A) nije obavezna, ali ostale boje (crvena, plava i zelena su obavezne).

    bijela = (255, 255, 255) crna = (0, 0, 0) crvena = (255, 0, 0)

Korak 5. Inicijalizirajte zaslon

Koristite varijablu razlučivosti koja je definirana ranije.

    screen = pygame.display.set_mode (rezolucija)

Korak 6. Napravite petlju igre

Ponovite određene radnje u svakom okviru naše igre. Napravite petlju koja će se uvijek ponavljati kroz sve ove radnje.

    dok je istina:

Korak 7. Obojite zaslon

    screen.fill (bijelo)

Korak 8. Prikažite zaslon

Ako pokrenete program, zaslon će postati bijel, a zatim će se program srušiti. To je zato što operativni sustav šalje događaje u igru, a igra ne radi ništa s njima. Nakon što igra primi previše neobrađenih događaja, srušit će se.

    dok je True:… pygame.display.flip ()

Korak 9. Upravljajte događajima

Dobijte popis svih događaja koji su se dogodili u svakom okviru. Bit će vam stalo samo do jednog događaja, događaja prestanka. To se događa kada korisnik zatvori prozor igre. To će također spriječiti rušenje našeg programa zbog previše događaja.

    dok je True:… za događaj u pygame.event.get (): if event.type == QUIT: pygame.quit ()

ProgramPygamePart1
ProgramPygamePart1

Korak 10. Isprobajte

Evo kako bi kôd trebao izgledati sada:

    uvoz pygame iz pygame.locals import * razlučivost = (400, 300) bijela = (255, 255, 255) crna = (0, 0, 0) crvena = (255, 0, 0) zaslon = pygame.display.set_mode (razlučivost) dok je True: screen.fill (bijelo) pygame.display.flip () za događaj u pygame.event.get (): if event.type == QUIT: pygame.quit ()

3. dio od 8: Izrada predmeta igre

Korak 1. Napravite novu klasu i konstruktor

Postavite sva svojstva objekta. Također pružate zadane vrijednosti za sva svojstva.

    klasa 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"

Korak 2. Definirajte kako nacrtati objekt

Upotrijebite svojstva koja su definirana u konstruktoru za crtanje loptice kao kruga, kao i za dodavanje površine u funkciju za crtanje objekta. Površina će biti objekt na zaslonu koji je stvoren korištenjem rezolucije ranije.

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

Korak 3. Napravite instancu klase kao i recite petlji igre da izvuče loptu u svakoj petlji

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

Korak 4. Pomaknite objekt

Izradite funkciju koja će ažurirati položaj objekta. Pozovite ovu funkciju u svakoj petlji igre.

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

Korak 5. Ograničite broj sličica u sekundi

Lopta će se jako brzo kretati jer se petlja igre izvodi stotine puta u sekundi. Pomoću sata Pygame ograničite brzinu snimanja na 60 fps.

    sat = pygame.time. Clock () dok je True:… clock.tick (60)

Korak 6. Držite loptu na ekranu

Dodajte čekove u funkciju ažuriranja da biste promijenili smjer loptice ako pogodi jedan od rubova zaslona.

    klasa Ball:… def update (self):… if (self.x <= 0 or self.x> = resolution [0]): self.dx *= -1 if (self.y <= 0 ili self.y > = razlučivost [1]): self.dy *= -1

ProgramPygamePart2
ProgramPygamePart2

Korak 7. Isprobajte

Evo kako bi kod sada trebao izgledati:

    uvoz pygame iz pygame.locals import * razlučivost = (400, 300) bijela = (255, 255, 255) crna = (0, 0, 0) crvena = (255, 0, 0) zaslon = pygame.display.set_mode (razlučivost) klasa Lopta: def _init _ (self, xPos = razlučivost [0] / 2, yPos = razlučivost [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 draw (self, surface): pygame.draw.circle (površina, crno, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 ili self.x> = rezolucija [0]): self.dx *= -1 if (self.y <= 0 or self.y> = resolution [1]): self.dy *= -1 ball = Ball () sat = pygame.time. Clock () while True: zaslon. fill (white) ball.draw (screen) ball.update () pygame.display.flip () clock.tick (60) za događaj u pygame.event.get (): if event.type == QUIT: pygame.quit ()

4. dio od 8: Organiziranje igre

Korak 1. Koristite razrede da sve organizirate

Igra će se zakomplicirati. Za organiziranje koda koristite objektno orijentirane tehnike.

Korak 2. Pretvorite petlju igre u klasu

Budući da naša igra sada ima podatke uključujući vaše objekte i funkcije igre, ima smisla pretvoriti vašu petlju u klasu.

    razredna igra ():

Korak 3. Dodajte konstruktor

Ovdje ćete instancirati neke objekte igre, stvoriti naš zaslon i sat te pokrenuti Pygame. Pygame mora biti inicijaliziran za korištenje određenih značajki poput teksta ili zvuka.

    klasa game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (rezolucija) self.clock = pygame.time. Clock ()

Korak 4. Rukujte događajima u funkciji

    class game ():… def handleEvents (self): za događaj u pygame.event.get (): if event.type == QUIT: pygame.quit ()

Korak 5. Neka petlja igre postane funkcija

Pozovite funkciju upravljanja događajima svaku petlju.

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

Korak 6. Rukujte s više objekata igre

Trenutno ovaj kod mora pozvati crtanje i ažuriranje svakog okvira svakog okvira. Ovo bi postalo neuredno da imate puno predmeta. Dodajmo naš objekt u niz, a zatim ažuriramo i crtamo sve objekte u nizu svaku petlju. Sada možete jednostavno dodati još jedan objekt i dati mu drugačiji početni položaj.

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

ProgramPygamePart3
ProgramPygamePart3

Korak 7. Isprobajte

Evo kako bi kôd trebao izgledati sada:

    uvoz pygame iz pygame.locals import * razlučivost = (400, 300) bijela = (255, 255, 255) crna = (0, 0, 0) crvena = (255, 0, 0) zaslon = pygame.display.set_mode (razlučivost) klasa Lopta: def _init _ (self, xPos = razlučivost [0] / 2, yPos = razlučivost [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 draw (self, surface): pygame.draw.circle (površina, crno, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 ili self.x> = rezolucija [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 (rezolucija) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): za događaj u pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvent s () za gameObj u self.gameObjects: gameObj.update () self.screen.fill (bijelo) za gameObj u self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display. flip () game (). run ()

5. dio od 8: Dodavanje objekta igrača

Korak 1. Napravite klasu igrača i konstruktor

Napravit ćete drugi krug kojim upravlja miš. Inicijalizirajte vrijednosti u konstruktoru. Radijus je jedina važna vrijednost.

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

Korak 2. Definirajte kako nacrtati objekt igrača

Bit će isto kao što ste nacrtali ostale objekte igre.

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

Korak 3. Dodajte kontrolu miša za objekt playera

U svakom kadru provjerite mjesto miša i postavite lokaciju objekata igrača na tu točku.

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

Korak 4. Dodajte objekt igrača u gameObjects

Izradite novu instancu igrača i dodajte je na popis.

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

ProgramPygamePart4
ProgramPygamePart4

Korak 5. Isprobajte

Evo kako bi kod sada trebao izgledati:

    uvoz pygame iz pygame.locals import * razlučivost = (400, 300) bijela = (255, 255, 255) crna = (0, 0, 0) crvena = (255, 0, 0) zaslon = pygame.display.set_mode (razlučivost) klasa Lopta: def _init _ (self, xPos = razlučivost [0] / 2, yPos = razlučivost [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 draw (self, surface): pygame.draw.circle (površina, crno, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 ili self.x> = rezolucija [0]): self.dx *= -1 if (self.y <= 0 or self.y> = resolution [1]): self.dy *= -1 class Igrač: 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 (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 (razlučivost) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Player ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): za događaj u pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () za gameObj u sebi.gameObjects: gameObj.update () self.screen.fill (bijelo) za gameObj u self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). trčanje()

Dio 6 od 8: Interakcija objekata s playerom

Korak 1. Promijenite funkcije ažuriranja

Kako bi objekti stupili u interakciju, oni će morati imati pristup jedni drugima. Dodajmo još jedan parametar za ažuriranje koji će proći na popisu gameObjects. Morat ćete ga dodati objektu igrača i objektima Kugla. Ako imate puno objekata igre, nasljeđivanje bi vam moglo pomoći da svi potpisi vaše metode ostanu isti.

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

Korak 2. Provjerite ima li sudara između igrača i loptica

Prođite kroz sve objekte igre i provjerite je li tip predmeta lopta. Zatim upotrijebite radijuse dva objekta i formulu udaljenosti da provjerite sudaraju li se. Krugove je zaista lako provjeriti na sudarima. Ovo je najveći razlog što niste koristili neki drugi oblik za ovu igru.

    klasa Player:… def update (self, gameObjects):… za gameObj u 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. Završite igru ako igrač dobije "udarac"

Za sada samo napustimo igru.

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

Korak 4. Isprobajte

Evo kako bi kôd trebao izgledati sada:

    uvoz pygame iz pygame.locals import * razlučivost = (400, 300) bijela = (255, 255, 255) crna = (0, 0, 0) crvena = (255, 0, 0) zaslon = pygame.display.set_mode (razlučivost) klasa Lopta: def _init _ (self, xPos = razlučivost [0] / 2, yPos = razlučivost [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 draw (self, surface): pygame.draw.circle (površina, crno, (self.x, self.y), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 ili self.x> = rezolucija [0]): self.dx *= -1 if (self.y <= 0 ili self.y> = razlučivost [1]): self.dy *= -1 klasa Igrač: 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, crveno, (self.x, self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] za gameObj u gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: pygame.quit () klasa game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (rezolucija) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Player ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): za događaj u pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () za gameObj u self.gameObjects: gameObj.update (self.gameObjects) self.screen.fill (bijelo) za gameObj u self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). run ()

Dio 7 od 8: Dodavanje kontrolera igre za izradu objekata

Korak 1. Stvorite klasu kontrolera igre

Kontrolori igara su odgovorni za "pokretanje" igre. Razlikuje se od naše klase igara koja je odgovorna za crtanje i ažuriranje svih naših objekata. Kontroler će povremeno dodavati još jednu loptu na zaslon kako bi otežao igru. Dodajte konstruktor i inicijalizirajte neke osnovne vrijednosti. Interval će biti vrijeme prije nego što se doda druga lopta.

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

Korak 2. Dodajte funkciju ažuriranja

Time će se provjeriti koliko je vremena prošlo od trenutka dodavanja lopte ili od početka igre. Ako je vrijeme više od intervala, vratit ćete vrijeme i dodati loptu.

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

Korak 3. Dajte kuglicama nasumične brzine

Morat ćete koristiti nasumične brojeve kako biste igru svaki put učinili drugačijom. Međutim, brzine kuglica sada su broj s pomičnim zarezom umjesto cijeli broj.

    klasa 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))

Korak 4. Popravite funkciju izvlačenja

Funkcija izvlačenja neće prihvatiti plovke. Pretvorimo položaj loptice u cijele brojeve prije nego što se kuglice izvuku.

    klasa Ball:… def draw (self, surface): pygame.draw.circle (surface, black, (int (self.x), int (self.y)), self.radius)

Korak 5. Definirajte način izvlačenja za kontroler igre

Budući da se radi o igračkom objektu, glavna petlja će ga pokušati nacrtati. Morat ćete definirati funkciju izvlačenja koja ne radi ništa kako se igra ne bi srušila.

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

Korak 6. Dodajte kontroler igre u gameObjects i uklonite 2 loptice

Igra bi sada trebala izroditi loptu svakih pet sekundi.

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

ProgramPygamePart6
ProgramPygamePart6

Korak 7. Isprobajte

Evo kako bi kôd trebao izgledati sada:

    uvesti pygame iz slučajnog uvoza nasumično iz pygame.locals uvoz * razlučivost = (400, 300) bijela = (255, 255, 255) crna = (0, 0, 0) crvena = (255, 0, 0) zaslon = pygame. display.set_mode (rezolucija) klasa 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 draw (self, surface): pygame.draw.circle (površina, crno, (int (self) x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 ili self. x> = razlučivost [0]): self.dx *= -1 if (self.y <= 0 ili self.y> = razlučivost [1]): self.dy *= -1 klasa Igrač: 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, crveno, (self.x, self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] za gameObj u igri Objekti: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius)* * 2: pygame.quit () klasa GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "kontroler 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 = random ()*2, yVel = random ()*2)) def draw (self, screen): pass class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (rezolucija) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) def handleEvents (self): za događaj u pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () za gameObj u self.gameObjects: gameObj.update (self.gameObjects) self.screen.ispuni (bijelo) za gameObj u sebi.igruO bjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). run ()

8. dio od 8: Dodavanje rezultata i završetak igre

Korak 1. Dodajte rezultat klasi kontrolera igre

Izradite objekt fonta i varijablu rezultata. Nacrtat ćete font u svakom okviru za prikaz rezultata i povećati rezultat u svakom okviru u ažuriranju.

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

Korak 2. Izmijenite način na koji igra završava

Riješimo se prekida kad igrač otkrije sudar. Umjesto toga u player ćete postaviti varijablu koju igra može provjeriti. Kad je postavljen gameOver, prestanite ažurirati objekte. Ovo će zamrznuti sve na mjestu kako bi igrač mogao vidjeti što se dogodilo i provjeriti njihov rezultat. Imajte na umu da se objekti još uvijek crtaju, samo se ne ažuriraju.

    klasa Player: def _init _ (self, rad = 20):… self.gameOver = Lažno ažuriranje def (self, gameObjects):… za gameObj u 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 () ako ne self.gameOver: za gameObj u self.gameObjects: gameObj.update (self.gameObjects) if gameObj.type == "player": self.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

Korak 3. Isprobajte

Evo kako bi gotov kod sada trebao izgledati:

    uvesti pygame iz slučajnog uvoza nasumično iz pygame.locals uvoz * razlučivost = (400, 300) bijela = (255, 255, 255) crna = (0, 0, 0) crvena = (255, 0, 0) zaslon = pygame. display.set_mode (rezolucija) klasa 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 draw (self, surface): pygame.draw.circle (površina, crno, (int (self) x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 ili self. x> = razlučivost [0]): self.dx *= -1 if (self.y <= 0 ili self.y> = razlučivost [1]): self.dy *= -1 klasa Igrač: 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, crveno, (self.x, self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] za gameObj u 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 = "kontroler igre" self.score = 0 self.scoreText = pygame.font. Font (Ništa, 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)) class game (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (rezolucija) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) self.gameOver = False def handleEvents (self): za događaj u pygame.event.get (): ako je ev ent.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () ako ne self.gameOver: za gameObj u self.gameObjects: gameObj.update (self.gameObjects) if gameObj. upišite == "player": self.gameOver = gameObj.gameOver self.screen.fill (bijelo) za gameObj u self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () game (). run ()

Preporučeni: