Kako programirati igre na pythonu koristeći biblioteku pygame

Ovaj je članak namijenjen onima koji su već upoznati s programskim jezikom Python-a i omogućava vam da čitate biblioteku Pygame za ovaj jezik. Kao vizualni primjer, ovdje se prikazuje jednostavan proces programiranja igara u kojem igrač mora donirati od skokovanih kuglica.

Korake

1. dio 8:
Instaliranje Pygamea
jedan. Preuzmite Pygame. Slijedite vezu i pronađite verziju biblioteke pogodne za vašu platformu: http: // Pygame.Org / download.shtml .
  • 2. Pokrenite instalaciju.
  • 3. Provjerite je li instalacija uspješno završena. Otvorite Python terminal. Unesite "Uveži Pygame". Ako se ne pojave poruke o pogrešci, tada je Pygame uspješno instaliran.
    Uvezi Pygame
  • 2. dio 8:
    Stvaranje glavne prozore igre
    jedan. Kreirajte novu datoteku.
  • 2. Uvezi Pygame. Pygame je biblioteka koja implementira pristup grafičkim funkcijama programskih jezika Python. Ako želite saznati više o tome kako ove funkcije rade, informacije su dostupne na Pygameu. https: // Pygame.Org / docs /
    Uvoz PygameFrom Pygame.Mještani uvoz *
  • 3. Navedite veličinu prozora igre. Napravite globalnu varijablu za veličine prozora kako biste se odnosili na njega iz različitih dijelova igre. Radi praktičnosti, ovi parametri su bolji za određivanje na početku datoteke, tako da je po potrebi bilo lakše promijeniti u budućnosti. Za složenije projekte bit će poželjno napraviti takve podatke u zasebnoj datoteci.
    Rezolucija = (400.300)
  • 4. Odredite nekoliko boja. Boje u Pygame-u definirane su u RGBA formatu u rasponu od 0 do 255. Vrijednost alfa (a) može se izostaviti, ali ostale boje (crvena, zelena i plava) potrebna su za punjenje.
    Bijela = (255,255,255) crna = (0.0.0) crvena = (255.0.0)
  • pet. Inicijalizirajte glavni ekran. Koristite varijablu rezolucije definirana ranije.
    Ekran = Pygame.Prikaz.Set_mode (rezolucija)
  • 6. Stvoriti ciklus igre. Postavite ponavljanje određenih radnji u svakom okviru igre. Stvorite ciklus koji će dosljedno obavljati sve ove radnje.
    Iako istina:
  • 7. Odredite boju ispunjavanja ekrana.
    Zaslon.Popunite (bijelo)
  • osam. Prikažite ekran. Ako u ovoj fazi pokrenete program, ekran je obojen bijelom bojom, a zatim će program zaustaviti hitno. Uzrok neuspjeha bit će da operativni sustav šalje događaje programa, a program se jednostavno ne nastavi. Kada program nakupi previše neobrađenih događaja, nastaje neuspjeh.
    Iako istina:...Pygame.Prikaz.Flip ()
  • devet. Implementirati obradu događaja. Nabavite spisak svih događaja koji su nastali između okvira crtanja. U našem primjeru trebate brinuti obradu samo jednog izlaznog događaja (odustati). Događa se kada korisnik zatvori prozor igre. Obrada događaja spriječit će neuspjeh programa iz pojave previše događaja.
    Iako istina:...Za događaj u Pygameu.Događaj.Dobiti (): ako se događaj.Tip == Zahtev: Pygame.prestati ()
  • Slika pod nazivom Programbeygamepart1.jpg
    10. Isprobajte program! Sada bi program trebao izgledati ovako:
    Uvoz PygameFrom Pygame.Mještani uvozi * Rezolucija = (400.300) bijela = (255,255,255) crna = (0.0.0) crvena = (255,0,0) ekran = pygame.Prikaz.Set_mode (rezolucija) dok je TRUE: ekran.Punite (bijeli) Pygame.Prikaz.Flip () za događaj u Pygameu.Događaj.Dobiti (): ako se događaj.Tip == Zahtev: Pygame.prestati ()
  • Dio 3 od 8:
    Stvaranje objekata igre
    jedan. Stvorite novu klasu objekata i njenog dizajnera. Podesite sva svojstva objekta. Takođe definirajte zadane vrijednosti za svaku svojstva.
    Class Ball: Def __init __ (samo, xpos = Rezolucija [0] / 2, YPOS = Rezolucija [1] / 2, Xvel = 1, Yvel = 1, Rad = 15):.x = xposself.Y = yposfelf.DX = XVelself.Dy = Yvelself.Radius = Radself.Tip = "Lopta"
  • 2. Odredite crtež objekta. Koristite svojstva objekata navedene u konstruktoru da biste prikazali loptu kao krug na površini koja se prenese na funkciju na funkciju. Površina će biti ekran koji ste kreirali ranije definiranjem njegovih dimenzija.
    Def Draw (samo, površina): pygame.Izvlačenje.Krug (površina, crna, (self.X, Ja.y), samo.Radijus)
  • 3. Kreirajte klasujsku instancu i dodajte posao ciklusu igre da biste nacrtali kuglu na svakoj iteraciji ciklusa.
    Lopta = lopta () dok se istina:...Lopta.Izvlačenje (ekran)
  • 4. Učinite da se predmet pomakne. Stvorite funkciju koja ažurira položaj objekta. Nazovite ovu značajku u svakoj iteraciji ciklusa.
    Klasa lopta:...DEF Ažuriraj (samo): samo.X + = jastvo.Dxself.Y + = ja.Dy
  • pet. Ograničiti frekvenciju okvira. Lopta će se kretati vrlo brzo, jer se ciklus igre ponavlja stotine puta u sekundi. Upotrijebite PYGAME TIMER za ograničavanje frekvencije promjene okvira na 60 fps.
    • Sat = pygame.Vrijeme.Sat () dok istinita:...Sat.Tick ​​(60)
  • Držite posudu na ekranu. Dodajte provjere u funkciju ažuriranja statusa za promjenu smjera kretanja lopte, ako dostigne granice ekrana.
      Klasa lopta:...DEF Ažuriraj (samo):...Ako (samo.X <= 0 or self.x >= Rezolucija [0]): samo.DX * = -1if (samo.y <= 0 or self.y >= Rezolucija [1]): samo.DY * = -1
  • Isprobajte program! Sada bi program trebao izgledati ovako:
    Slika pod nazivom Programbeygamepart2.jpg
      Uvoz PygameFrom Pygame.Mještani uvozi * Rezolucija = (400.300) bijela = (255,255,255) crna = (0.0.0) crvena = (255,0,0) ekran = pygame.Prikaz.Set_mode (rezolucija) klasna kugla: Def __init __ (samo, xpos = rezolucija [0] / 2, ypos = rezolucija [1] / 2, xvel = 1, yvel = 1, rad = 15): ja.x = xposself.Y = yposfelf.DX = XVelself.Dy = Yvelself.Radius = Radself.Tip = "Lopta"Def Draw (samo, površina): pygame.Izvlačenje.Krug (površina, crna, (self.X, Ja.y), samo.RADIJ) DEF UPDATE: SEGI.X + = jastvo.Dxself.Y + = ja.DYIF (ja.X <= 0 or self.x >= Rezolucija [0]): samo.DX * = -1if (samo.y <= 0 or self.y >= Rezolucija [1]): samo.DY * = -1ball = lopta () sat = pygame.Vrijeme.Sat () dok istinita: ekran.Napuniti (bijela) lopta.Nacrtaj (ekran) lopta.Ažuriraj () Pygame.Prikaz.Flip () sat.Tick ​​(60) za događaj u Pygameu.Događaj.Dobiti (): ako se događaj.Tip == Zahtev: Pygame.prestati ()
  • 4. dio 8:
    Strukturističke igre
    jedan. Koristite klase za strukturiranje. Ubuduće će igra postati složenija. Koristite objektno orijentirane tehnike programiranja u strukturiranje koda.
  • 2. Pretvorite ciklus igre na nastavu. Od trenutka kada igra već uključuje podatke, uključujući igru ​​objekte i funkcije, ima smisla zamijeniti ciklus igre na nastavu.
    Igra klase ():
  • 3. Dodajte dizajnera. S njom negirate nekoliko objekata koji se koriste u igri, kreirajte ekran, tajmer i inicijalizirajte Pygame. Pygame se mora biti inicijaliziran kako bi se takve sposobnosti dodatno koristile kao tekst ili zvuk.
    Igra klase (): Def __init __ (samo): pygame.U SEBI.Ekran = Pygame.Prikaz.Set_Mode (Rezolucija).Sat = pygame.Vrijeme.Sat ()
  • 4. Podesite obradu događaja u funkciji.
    Igra klase ():...Def Hangevents (samo): za događaj u Pygameu.Događaj.Dobiti (): ako se događaj.Tip == Zahtev: Pygame.prestati ()
  • pet. Napravite ciklus igre sa funkcijom. Pozovite funkciju obrade događaja u svakoj iteraciji ciklusa.
    Igra klase ():...DEF Run (ja): Iako istina: ja.Vlasnici () sebe.Zaslon.Napuniti (bijelo) ja.Sat.Tick ​​(60) Pygame.Prikaz.Flip ()
  • 6. Podesite obradu više objekata za igru. U ovoj fazi, kod igre izaziva ažuriranje i prekrivanje pojedinih objekata u svakom okviru. Sa ovim pristupom, kod igre bit će prilično glomazan i neuredan, posebno ako u igri ima mnogo predmeta. Mudriji je prvo dodavati objekte u nizu, a zatim ažurirati i precrtati sve predmete u nizu na svakoj iteraciji ciklusa. Sada lako možete napraviti novi objekt u igri i odrediti još jedan početni položaj za njega.
    Igra klase (): Def __init __ (samo):...Ja.GameObjects = [].GameObjects.DOPUND (lopta ()) sebe.GameObjects.Dodavanje (lopta (100))...DEF Run (ja): Iako istina: ja.Vlasnici () za Gameobj u sebi.GameObjects: Gameobj.Ažuriranje () sebe.Zaslon.Popunite (bijeli) za Gameti u sebi.GameObjects: Gameobj.Crtati (ja.Ekran) Sebstvo.Sat.Tick ​​(60) Pygame.Prikaz.Flip ()
  • Slika pod nazivom ProgrambeygamePart3.jpg
    7. Isprobajte program! Sada bi program trebao izgledati ovako:
    Uvoz PygameFrom Pygame.Mještani uvozi * Rezolucija = (400.300) bijela = (255,255,255) crna = (0.0.0) crvena = (255,0,0) ekran = pygame.Prikaz.Set_mode (rezolucija) klasna kugla: Def __init __ (samo, xpos = rezolucija [0] / 2, ypos = rezolucija [1] / 2, xvel = 1, yvel = 1, rad = 15): ja.x = xposself.Y = yposfelf.DX = XVelself.Dy = Yvelself.Radius = Radself.Tip = "Lopta"Def Draw (samo, površina): pygame.Izvlačenje.Krug (površina, crna, (self.X, Ja.y), samo.RADIJ) DEF UPDATE: SEGI.X + = jastvo.Dxself.Y + = ja.DYIF (ja.X <= 0 or self.x >= Rezolucija [0]): samo.DX * = -1if (samo.y <= 0 or self.y >= Rezolucija [1]): samo.DY * =1Class igra (): Def __init __ (self): pygame.U SEBI.Ekran = Pygame.Prikaz.Set_Mode (Rezolucija).Sat = pygame.Vrijeme.Sat () self.GameObjects = [].GameObjects.DOPUND (lopta ()) sebe.GameObjects.DODATAK (lopta (100)) Def Hangevents (self): za događaj u Pygameu.Događaj.Dobiti (): ako se događaj.Tip == Zahtev: Pygame.Zatvorite () Def Run (Ja): Iako je istina: ja.Vlasnici () za Gameobj u sebi.GameObjects: Gameobj.Ažuriranje () sebe.Zaslon.Popunite (bijeli) za Gameti u sebi.GameObjects: Gameobj.Crtati (ja.Ekran) Sebstvo.Sat.Tick ​​(60) Pygame.Prikaz.Igra () igra ().Trčanje ()
  • Dio 5 od 8:
    Dodavanje objekta "igrača"
    jedan. Kreirajte klasu igrača i njegov dizajner. Morate stvoriti drugi krug koji kontrolira kretanje miša. Inicijalizirajte njegove parametre u dizajnu. Jedina važna vrijednost bit će radijus.
    Klasa igrača: Def __init __ (samo, rad = 20): ja.x = 0self.Y = 0self.Radijus = rad
  • 2. Odredite crtež objekta igrača. Izvlači se slično na način na koji su izvučeni drugi objekti za igru.
    Igrač klase:...Def Draw (samo, površina): pygame.Izvlačenje.Krug (površina, crvena, (ja.X, Ja.y), samo.Radijus)
  • 3. Dodajte kontrolu miša za objekt igrača. U svakom kadru igre morate provjeriti položaj pokazivača miša i povezati položaj objekta igrača s ovom tačkom.
    Igrač klase:...DEF Update (ja): Cord = Pygame.Miš.get_pos () self.X = kabel [0] self.Y = kabel [1]
  • 4. Dodajte objekt igrača na ImeObjects Array. Stvorite novu instancu objekta i dodajte ga na listu GameObjects.
    Igra klase (): Def __init __ (samo):...Ja.GameObjects.Dodatak (igrač ())
  • Slika pod nazivom ProgrambeygamePart4.jpg
    pet. Isprobajte program! Sada bi program trebao izgledati ovako:
    Uvoz PygameFrom Pygame.Mještani uvozi * Rezolucija = (400.300) bijela = (255,255,255) crna = (0.0.0) crvena = (255,0,0) ekran = pygame.Prikaz.Set_mode (rezolucija) klasna kugla: Def __init __ (samo, xpos = rezolucija [0] / 2, ypos = rezolucija [1] / 2, xvel = 1, yvel = 1, rad = 15): ja.x = xposself.Y = yposfelf.DX = XVelself.Dy = Yvelself.Radius = Radself.Tip = "Lopta"Def Draw (samo, površina): pygame.Izvlačenje.Krug (površina, crna, (self.X, Ja.y), samo.RADIJ) DEF UPDATE: SEGI.X + = jastvo.Dxself.Y + = ja.DYIF (ja.X <= 0 or self.x >= Rezolucija [0]): samo.DX * = -1if (samo.y <= 0 or self.y >= Rezolucija [1]): samo.DY * = -1class Player: Def __init __ (samo, rad = 20): ja.x = 0self.Y = 0self.Radius = Radself.Tip = "Igrač"Def Draw (samo, površina): pygame.Izvlačenje.Krug (površina, crvena, (ja.X, Ja.y), samo.RADIJ) DEF Ažuriranje (ja): Cord = Pygame.Miš.get_pos () self.X = kabel [0] self.Y = Cord [1] klasna igra (): Def __init __ (samo): pygame.U SEBI.Ekran = Pygame.Prikaz.Set_Mode (Rezolucija).Sat = pygame.Vrijeme.Sat () self.GameObjects = [].GameObjects.Dostup (igrač ()).GameObjects.DOPUND (lopta ()) sebe.GameObjects.DODATAK (lopta (100)) Def Hangevents (self): za događaj u Pygameu.Događaj.Dobiti (): ako se događaj.Tip == Zahtev: Pygame.Zatvorite () Def Run (Ja): Iako je istina: ja.Vlasnici () za Gameobj u sebi.GameObjects: Gameobj.Ažuriranje () sebe.Zaslon.Popunite (bijeli) za Gameti u sebi.GameObjects: Gameobj.Crtati (ja.Ekran) Sebstvo.Sat.Tick ​​(60) Pygame.Prikaz.Igra () igra ().Trčanje ()
  • Dio 6 od 8:
    Izrada interakcije objekata
    jedan. Značajke ažuriranja promjene položaja. Da bi implementirala interakciju objekata, potrebno im je osigurati pristup jednim objektima. Dodajte novi parametar u funkciju ažuriranja za prijenos podataka o popisu GameObjects. Parametar mora biti dodan u klase uređaja i kugličnim funkcijama. Ako imate puno časova, nasljedstvo će pomoći sačuvati popis parametara istog.
    Klasa lopta:...DEF Update (samo, gameobjects):...Igrač klase:...DEF Update (samo, gameobjects):
  • 2. Unesite čekove za sudar igrača sa kuglicama. Pogledajte sve objekte i definirajte ih među njima koji se odnose na kuglice. Zatim, koristeći radijuse predmeta i formule za određivanje udaljenosti, provjerite jesu li se predmeti sudarili jedno s drugim. Provjerite sudare između krugova jednostavno. To je glavni razlog koji kao primjer u ovoj igri ne koriste figure drugog oblika.
    Igrač klase:...DEF Update (samo, gameobjects):...Za Gameobj u Gameobjects: IF Gameobj.Tip == "Lopta": Ako (Gameobj.X - ja.x) ** 2 + (Gameobj).Y - Ja.y) ** 2 <= (gameObj.radius + self.radius)**2:
  • Slika pod nazivom ProgrambeygamePart5.jpg
    3. Postavite kraj igre kada sudar igrača sa loptom. U ovoj fazi jednostavno postavite izlaz iz igre.
    Ako (Gameobj.X - ja.x) ** 2 + (Gameobj).Y - Ja.y) ** 2 <= (gameObj.radius + self.radius)**2:pygame.quit()
  • 4. Isprobajte program! Sada bi program trebao izgledati ovako:
    Uvoz PygameFrom Pygame.Mještani uvozi * Rezolucija = (400, 300) bijela = (255,255,255) crna = (0,0,0) crvena = (255,0,0) ekran = pygame.Prikaz.Set_mode (rezolucija) klasna kugla: Def __init __ (samo, xpos = rezolucija [0] / 2, ypos = rezolucija [1] / 2, xvel = 1, yvel = 1, rad = 15): ja.x = xposself.Y = yposfelf.DX = XVelself.Dy = Yvelself.Radius = Radself.Tip = "Lopta"Def Draw (samo, površina): pygame.Izvlačenje.Krug (površina, crna, (self.X, Ja.y), samo.RADIUS) DEF UPDATE (SAMO, GOVORICOMS):.X + = jastvo.Dxself.Y + = ja.DYIF (ja.X <= 0 or self.x >= Rezolucija [0]): samo.DX * = -1if (samo.y <= 0 or self.y >= Rezolucija [1]): samo.DY * = -1class Player: Def __init __ (samo, rad = 20): ja.x = 0self.Y = 0self.Radius = Radself.Tip = "Igrač"Def Draw (samo, površina): pygame.Izvlačenje.Krug (površina, crvena, (ja.X, Ja.y), samo.Radijus) DEF Update (self, gameobjects): Cord = Pygame.Miš.get_pos () self.X = kabel [0] self.Y = kabel [1] za Gameti u GameObjects: IF Gameobj.Tip == "Lopta": Ako (Gameobj.X - ja.x) ** 2 + (Gameobj).Y - Ja.y) ** 2 <= (gameObj.radius + self.radius)**2:pygame.quit()class game():def __init__(self):pygame.init()self.screen = pygame.display.set_mode(resolution)self.clock = pygame.time.Clock()self.gameObjects = []self.gameObjects.append(Player())self.gameObjects.append(Ball())self.gameObjects.append(Ball(100))def handleEvents(self):for event in pygame.event.get():if event.type == QUIT:pygame.quit()def run(self):while True:self.handleEvents()for gameObj in self.gameObjects:gameObj.update(self.gameObjects)self.screen.fill(white)for gameObj in self.gameObjects:gameObj.draw(self.screen)self.clock.tick(60)pygame.display.flip()game().run()
  • Deo 7 od 8:
    Dodavanje igrača za igranje za kreiranje objekata
    jedan. Kreirajte klasu kontrolera za igre. Kontrolori igre odgovorni su za kurs igre. Ne podudaraju se sa klasom igre igre, koja je odgovorna za crtanje i ažuriranje svih objekata igara. Regulator će povremeno dodati novu loptu na ekranu i komplicirati igru. Dodajte dizajnera i inicijalizirajte neke početne vrijednosti. Interval će značiti vrijeme kroz koji će biti dodana nova lopta.
    Klasa GameController: Def __init __ (samo, interval = 5): self.Inter = Interlself.Sledeće = Pygame.Vrijeme.get_ticks () + (2 * 1000) self.Tip = "Regulator igre"
  • 2. Dodajte funkciju ažuriranja. Provjerit će koliko je vremena prošlo od dodavanja prethodne lopte ili od početka igre. Ako vrijeme premaše navedeni interval, tajmer će se resetirati, a nova lopta je dodana.
    Klasa GameController:...DEF Ažuriraj (self, gameobjects): Ako se ja.Sljedeći < pygame.time.get_ticks():self.next = pygame.time.get_ticks() + (self.inter * 1000)gameObjects.append(Ball())
  • 3. Instalirajte slučajne brzine za kuglice. Da bi se igra drugačije ponašala, potrebno je omogućiti mu da koriste slučajne brojeve za parametar brzine. Sada će brzina kuglica odrediti plutajući decimalni broj, a ne cijeli broj.
    Klasa GameController:...DEF Ažuriraj (self, gameobjects): Ako se ja.Sljedeći < pygame.time.get_ticks():self.next = pygame.time.get_ticks() + (self.inter * 1000)gameObjects.append(Ball(xVel=random()*2, yVel=random()*2))
  • 4. Ispravite značajku crteža. Funkcija crtanja ne radi s plutajućim zarezima (plutajući). Stoga je potrebno izraziti položaj lopte u cijelim brojevima prije nego što ga crtate.
    Klasa lopta:...Def Draw (samo, površina): pygame.Izvlačenje.Krug (površina, crna, (int (ja).x), int (ja).y)), ja.Radijus)
  • pet. Odredite način crtanja za kontroler igre. Budući da je ovo i igrač za igru, u glavnom ciklusu igre bit će pokušaj crtanja. Stoga je za kontrolor potrebno odrediti funkciju crtanja, što ne čini ništa kako bi izbjegli neuspjeh igara.
    Klasa GameController:...Def Draw (ja, ekran): prolaz
  • 6. Dodajte kontroler za igru ​​u Gameobjects i uklonite 2 kuglice. Igra mora dodati novu loptu svakih 5 sekundi.
    Igra klase (): Def __init __ (samo):...Ja.GameObjects = [].GameObjects.Appendroller (GameController ()).GameObjects.Dodatak (igrač ())
  • Slika pod nazivom ProgrambeygamePart6.jpg
    7. Isprobajte program! Sada bi program trebao izgledati ovako:
    Uvoz PygameFrom nasumičnim uvozom nasumično od pygame.Mještani uvozi * Rezolucija = (400.300) bijela = (255,255,255) crna = (0.0.0) crvena = (255,0,0) ekran = pygame.Prikaz.Set_mode (rezolucija) klasna kugla: Def __init __ (samo, xpos = rezolucija [0] / 2, ypos = rezolucija [1] / 2, xvel = 1, yvel = 1, rad = 15): ja.x = xposself.Y = yposfelf.DX = XVelself.Dy = Yvelself.Radius = Radself.Tip = "Lopta"Def Draw (samo, površina): pygame.Izvlačenje.Krug (površina, crna, (int (ja).x), int (ja).y)), ja.RADIUS) DEF UPDATE (SAMO, GOVORICOMS):.X + = jastvo.Dxself.Y + = ja.DYIF (ja.X <= 0 or self.x >= Rezolucija [0]): samo.DX * = -1if (samo.y <= 0 or self.y >= Rezolucija [1]): samo.DY * = -1class Player: Def __init __ (samo, rad = 20): ja.x = 0self.Y = 0self.Radius = Radself.Tip = "Igrač"Def Draw (samo, površina): pygame.Izvlačenje.Krug (površina, crvena, (ja.X, Ja.y), samo.Radijus) DEF Update (self, gameobjects): Cord = Pygame.Miš.get_pos () self.X = kabel [0] self.Y = kabel [1] za Gameti u GameObjects: IF Gameobj.Tip == "Lopta": Ako (Gameobj.X - ja.x) ** 2 + (Gameobj).Y - Ja.y) ** 2 <= (gameObj.radius + self.radius)**2:pygame.quit()class GameController:def __init__(self, interval = 5):self.inter = intervalself.next = pygame.time.get_ticks() + (2 * 1000)self.type = "game controller"def update(self, gameObjects):if self.next < pygame.time.get_ticks():self.next = pygame.time.get_ticks() + (self.inter * 1000)gameObjects.append(Ball(xVel=random()*2, yVel=random()*2))def draw(self, screen):passclass game():def __init__(self):pygame.init()self.screen = pygame.display.set_mode(resolution)self.clock = pygame.time.Clock()self.gameObjects = []self.gameObjects.append(GameController())self.gameObjects.append(Player())def handleEvents(self):for event in pygame.event.get():if event.type == QUIT:pygame.quit()def run(self):while True:self.handleEvents()for gameObj in self.gameObjects:gameObj.update(self.gameObjects)self.screen.fill(white)for gameObj in self.gameObjects:gameObj.draw(self.screen)self.clock.tick(60)pygame.display.flip()game().run()
  • Dio 8 od 8:
    Dodavanje računa i završetka igre
    jedan. Dodajte račun na klasu igre za igre. Kreirajte objekt klase fontova i varijablu rezultate. Objekt fonta mora se izvući u svakom okviru da bi prikazao tekući račun i povećao ga u svakom okviru kada se ažurira.
    Klasa GameController: Def __init __ (samo, interval = 5):...Ja.Ocjena = 0 sebe.Sredstva = Pygame.font.Font (nijedan, 12) DEF Update (samo, gameobjects):...Ja.Rezultat + = 1def crta (ja, ekran): ekran.Blit (ja.Spekulacija.Render (STR (self).Ocjena), istina, crna), (5,5))
  • 2. Promijenite postupak dovršetka igre. Uklonite jednostavan izlaz iz igre kada su sudar igrača sa loptom. Umjesto toga, stvorite varijablu u klasu igrača, koja će se provjeriti igranjem. Kad varijabla gamever postane istinita, morate zaustaviti ažuriranje objekata. Svi su predmeti zamrznuti na mjestu, pa će igrač moći shvatiti šta se dogodilo, i vidjet ćemo njegov račun. Objekti će i dalje biti prikazani na ekranu, ali jednostavno će se zaustaviti ažurirati.
    Klasa igrača: Def __init __ (samo, rad = 20):...Ja.GameOver = Falsdeef Ažuriraj (self, gameobjects):...Za Gameobj u Gameobjects: IF Gameobj.Tip == "Lopta": Ako (Gameobj.X - ja.x) ** 2 + (Gameobj).Y - Ja.y) ** 2 <= (gameObj.radius + self.radius)**2:self.gameOver = Trueclass game():def __init__(self):...self.gameOver = Falsedef run(self):while True:self.handleEvents()if not self.gameOver:for gameObj in self.gameObjects:gameObj.update(self.gameObjects)if gameObj.type == "player":self.gameOver = gameObj.gameOver
  • Slika pod nazivom Programbeygamefinal.jpg
    3. Isprobajte program! Završni kod programa trebao bi izgledati ovako:
    Uvoz PygameFrom nasumičnim uvozom nasumično od pygame.Mještani uvozi * Rezolucija = (400.300) bijela = (255,255,255) crna = (0.0.0) crvena = (255,0,0) ekran = pygame.Prikaz.Set_mode (rezolucija) klasna kugla: Def __init __ (samo, xpos = rezolucija [0] / 2, ypos = rezolucija [1] / 2, xvel = 1, yvel = 1, rad = 15): ja.x = xposself.Y = yposfelf.DX = XVelself.Dy = Yvelself.Radius = Radself.Tip = "Lopta"Def Draw (samo, površina): pygame.Izvlačenje.Krug (površina, crna, (int (ja).x), int (ja).y)), ja.RADIUS) DEF UPDATE (SAMO, GOVORICOMS):.X + = jastvo.Dxself.Y + = ja.DYIF (ja.X <= 0 or self.x >= Rezolucija [0]): samo.DX * = -1if (samo.y <= 0 or self.y >= Rezolucija [1]): samo.DY * = -1class Player: Def __init __ (samo, rad = 20): ja.x = 0self.Y = 0self.Radius = Radself.Tip = "Igrač"Ja.GameOver = Falsdef Nerešeno (samostalno, površina): Pygame.Izvlačenje.Krug (površina, crvena, (ja.X, Ja.y), samo.Radijus) DEF Update (self, gameobjects): Cord = Pygame.Miš.get_pos () self.X = kabel [0] self.Y = kabel [1] za Gameti u GameObjects: IF Gameobj.Tip == "Lopta": Ako (Gameobj.X - ja.x) ** 2 + (Gameobj).Y - Ja.y) ** 2 <= (gameObj.radius + self.radius)**2:self.gameOver = Trueclass GameController:def __init__(self, interval = 5):self.inter = intervalself.next = pygame.time.get_ticks() + (2 * 1000)self.type = "game controller"self.score = 0self.scoreText = pygame.font.Font(None, 12)def update(self, gameObjects):if self.next < pygame.time.get_ticks():self.next = pygame.time.get_ticks() + (self.inter * 1000)gameObjects.append(Ball(xVel=random()*2, yVel=random()*2))self.score += 1def draw(self, screen):screen.blit(self.scoreText.render(str(self.score), True, black), (5,5))class game():def __init__(self):pygame.init()self.screen = pygame.display.set_mode(resolution)self.clock = pygame.time.Clock()self.gameObjects = []self.gameObjects.append(GameController())self.gameObjects.append(Player())self.gameOver = Falsedef handleEvents(self):for event in pygame.event.get():if event.type == QUIT:pygame.quit()def run(self):while True:self.handleEvents()if not self.gameOver:for gameObj in self.gameObjects:gameObj.update(self.gameObjects)if gameObj.type == "player":self.gameOver = gameObj.gameOverself.screen.fill(white)for gameObj in self.gameObjects:gameObj.draw(self.screen)self.clock.tick(60)pygame.display.flip()game().run()
  • Slične publikacije