Kuinka ohjelmoida peli Pythonissa Pygamen avulla (kuvilla)

Sisällysluettelo:

Kuinka ohjelmoida peli Pythonissa Pygamen avulla (kuvilla)
Kuinka ohjelmoida peli Pythonissa Pygamen avulla (kuvilla)

Video: Kuinka ohjelmoida peli Pythonissa Pygamen avulla (kuvilla)

Video: Kuinka ohjelmoida peli Pythonissa Pygamen avulla (kuvilla)
Video: ChatGPT API in Python 2024, Huhtikuu
Anonim

Tämä on johdanto Pygameen ihmisille, jotka jo tuntevat Pythonin. Tämä artikkeli opettaa sinulle vaiheet yksinkertaisen pelin rakentamiseen, jossa pelaaja väistää pomppivia palloja.

Askeleet

Osa 1/8: Pygamen asennus

Vaihe 1. Lataa Pygame

Löydä se alustallesi osoitteesta

Vaihe 2. Suorita asennusohjelma

Vaihe 3. Tarkista, että asennus toimi

Avaa Python -pääte. Kirjoita "Tuo pygame". Jos et näe virheitä, Pygame asennettiin onnistuneesti.

    tuoda pygame

Osa 2/8: Perusikkunan asettaminen

Vaihe 1. Avaa uusi tiedosto

Vaihe 2. Tuo Pygame

Pygame on kirjasto, joka tarjoaa pääsyn grafiikkatoimintoihin. Jos haluat lisätietoja näiden toimintojen toiminnasta, voit etsiä ne Pygame -verkkosivustolta.

    tuo pygame pygame.locals -tuonnista *

Vaihe 3. Aseta ikkunan resoluutio

Teet globaalin muuttujan näytön tarkkuudelle, jotta siihen voidaan viitata useissa pelin osissa. Se on myös helppo löytää tiedoston yläosasta, joten sitä voidaan muuttaa myöhemmin. Edistyneissä hankkeissa näiden tietojen sijoittaminen erilliseen tiedostoon olisi parempi idea.

    resoluutio = (400, 300)

Vaihe 4. Määritä joitakin värejä

Pygame -värit ovat (RBGA, jonka arvot vaihtelevat välillä 0 ja 255. Alfa -arvo (A) on valinnainen, mutta muut värit (punainen, sininen ja vihreä ovat pakollisia).

    valkoinen = (255, 255, 255) musta = (0, 0, 0) punainen = (255, 0, 0)

Vaihe 5. Alusta näyttö

Käytä aiemmin määriteltyä resoluutiomuuttujaa.

    screen = pygame.display.set_mode (resoluutio)

Vaihe 6. Tee pelisilmukka

Toista tietyt toiminnot pelimme jokaisessa kehyksessä. Tee silmukka, joka toistuu aina kaikkien näiden toimintojen läpi.

    vaikka totta:

Vaihe 7. Väritä näyttö

    screen.fill (valkoinen)

Vaihe 8. Näytä näyttö

Jos suoritat ohjelman, näyttö muuttuu valkoiseksi ja ohjelma kaatuu. Tämä johtuu siitä, että käyttöjärjestelmä lähettää tapahtumia peliin eikä peli tee mitään niiden kanssa. Kun peli vastaanottaa liikaa käsittelemättömiä tapahtumia, se kaatuu.

    Vaikka totta:… pygame.display.flip ()

Vaihe 9. Käsittele tapahtumia

Hanki luettelo kaikista tapahtumista, jotka ovat tapahtuneet kussakin kehyksessä. Välität vain yhdestä tapahtumasta, lopettamistapahtumasta. Tämä tapahtuu, kun käyttäjä sulkee peli -ikkunan. Tämä estää myös ohjelmamme kaatumasta liian monien tapahtumien vuoksi.

    kun taas True:… tapahtumalle pygame.event.get (): if event.type == QUIT: pygame.quit ()

ProgramPygamePart1
ProgramPygamePart1

Vaihe 10. Kokeile

Tältä koodin pitäisi näyttää nyt:

    tuo pygame pygame.localsista tuonti * resoluutio = (400, 300) valkoinen = (255, 255, 255) musta = (0, 0, 0) punainen = (255, 0, 0) screen = pygame.display.set_mode (tarkkuus) kun taas True: screen.fill (valkoinen) pygame.display.flip () tapahtumalle pygame.event.get (): if event.type == QUIT: pygame.quit ()

Osa 3/8: Peliobjektin tekeminen

Vaihe 1. Luo uusi luokka ja rakentaja

Aseta kaikki objektin ominaisuudet. Annat myös oletusarvot kaikille ominaisuuksille.

    luokan pallo: def _init _ (itse, xPos = resoluutio [0] / 2, yPos = resoluutio [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 = "pallo"

Vaihe 2. Määritä, miten objekti piirretään

Käytä konstruktorissa määriteltyjä ominaisuuksia piirtääksesi pallo ympyräksi ja välittämällä pinnan kohteen piirtämiseen. Pinta on näytön objekti, joka luotiin aiemmin tarkkuudella.

    def draw (itse, pinta): pygame.draw.circle (pinta, musta, (self.x, self.y), self.radius)

Vaihe 3. Tee luokan esiintymä ja kerro pelisilmukalle, että se vetää pallon jokaiseen silmukkaan

    pallo = pallo (), kun taas totta:… ball.draw (näyttö)

Vaihe 4. Anna kohteen liikkua

Luo toiminto, joka päivittää objektin sijainnin. Kutsu tämä toiminto jokaiseen pelisilmukkaan.

    luokan pallo:… def päivitys (itse): self.x += self.dx self.y += self.dy

Vaihe 5. Rajoita kuvataajuutta

Pallo liikkuu todella nopeasti, koska pelisilmukka kulkee satoja kertoja sekunnissa. Käytä Pygamen kelloa rajoittaaksesi kuvataajuuden 60 kuvaan sekunnissa.

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

Vaihe 6. Pidä pallo näytöllä

Lisää tarkistuksia päivitystoimintoon, jos haluat kääntää pallon suunnan, jos se osuu johonkin näytön reunaan.

    luokan pallo:… def päivitys (itse):… jos (itse.x <= 0 tai itse.x> = resoluutio [0]): itse.dx *= -1 jos (itse.y <= 0 tai itse.y > = resoluutio [1]): self.dy *= -1

ProgramPygamePart2
ProgramPygamePart2

Vaihe 7. Kokeile

Tältä koodin pitäisi näyttää nyt:

    tuo pygame pygame.localsista tuonti * resoluutio = (400, 300) valkoinen = (255, 255, 255) musta = (0, 0, 0) punainen = (255, 0, 0) screen = pygame.display.set_mode (resoluutio) luokka Ball: def _init _ (itse, xPos = resoluutio [0] / 2, yPos = resoluutio [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 (itse, pinta): pygame.draw.circle (pinta, musta, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 or self.x> = resoluutio [0]): self.dx *= -1 jos (self.y <= 0 tai self.y> = resoluutio [1]): self.dy *= -1 pallo = Ball () kello = peli -aika. Kello () kun True: näyttö. täytä (valkoinen) pallo.piirrä (näyttö) pallo. ()

Osa 4/8: Pelin järjestäminen

Vaihe 1. Järjestä kaikki luokkien avulla

Peli muuttuu monimutkaisemmaksi. Järjestä koodisi objektipohjaisilla tekniikoilla.

Vaihe 2. Tee pelisilmukka luokkaan

Koska pelissämme on nyt tietoja, mukaan lukien peliobjektisi ja -toimintosi, on järkevää muuttaa pelisilmukka luokkaan.

    luokan peli ():

Vaihe 3. Lisää rakentaja

Täällä tulet näyttämään joitakin peliobjekteja, luomaan näytön ja kellon ja alustamaan Pygame. Pygame on alustettava käyttämään tiettyjä ominaisuuksia, kuten tekstiä tai ääntä.

    luokan peli (): def _init _ (itse): pygame.init () self.screen = pygame.display.set_mode (resoluutio) self.clock = pygame.time. Clock ()

Vaihe 4. Käsittele tapahtuman tapahtumia

    luokan peli ():… def handleEvents (itse): tapahtumalle pygame.event.get (): if event.type == QUIT: pygame.quit ()

Vaihe 5. Tee pelisilmukasta toiminto

Soita tapahtumakäsittelytoiminto joka silmukka.

    luokan peli ():… def run (self): kun True: self.handleEvents () self.screen.fill (valkoinen) self.clock.tick (60) pygame.display.flip ()

Vaihe 6. Käsittele useita peliobjekteja

Tällä hetkellä tämän koodin on kutsuttava piirtämään ja päivittämään objektiimme jokainen kehys. Tämä menisi sekaisin, jos sinulla olisi paljon esineitä. Lisäämme objektimme taulukkoon ja päivitämme ja piirrämme sitten kaikki taulukon objektit jokaisen silmukan. Nyt voit helposti lisätä toisen kohteen ja antaa sille toisen lähtöasennon.

    luokan peli (): def _init _ (itse):… self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100))… def run (self): kun 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.voltti()

ProgramPygamePart3
ProgramPygamePart3

Vaihe 7. Kokeile

Tältä koodin pitäisi näyttää nyt:

    tuo pygame pygame.localsista tuonti * resoluutio = (400, 300) valkoinen = (255, 255, 255) musta = (0, 0, 0) punainen = (255, 0, 0) screen = pygame.display.set_mode (resoluutio) luokka Ball: def _init _ (itse, xPos = resoluutio [0] / 2, yPos = resoluutio [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 (itse, pinta): pygame.draw.circle (pinta, musta, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 or self.x> = resoluutio [0]): self.dx *= -1 jos (self.y <= 0 tai self.y> = resoluutio [1]): self.dy *= -1 luokan peli (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (resoluutio) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): tapahtumalle pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): kun True: self.handleEvent s () 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 () peli (). run ()

Osa 5/8: Pelaajaobjektin lisääminen

Vaihe 1. Tee pelaajaluokka ja rakentaja

Teet toisen ympyrän, jota hiiri ohjaa. Alusta arvot konstruktorissa. Säde on ainoa tärkeä arvo.

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

Vaihe 2. Määritä, miten pelaajaobjekti piirretään

Se tulee olemaan samalla tavalla kuin muut peliesineet.

    luokan pelaaja:… def draw (itse, pinta): pygame.draw.circle (pinta, punainen, (self.x, self.y), self.radius)

Vaihe 3. Lisää hiiren ohjain soitinobjektille

Tarkista jokaisessa kehyksessä hiiren sijainti ja aseta pelaajien kohteiden sijainti tähän pisteeseen.

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

Vaihe 4. Lisää pelaajaobjekti gameObjectsiin

Luo uusi pelaaja -ilmentymä ja lisää se luetteloon.

    luokan peli (): def _init _ (itse):… self.gameObjects.append (Pelaaja ())

ProgramPygamePart4
ProgramPygamePart4

Vaihe 5. Kokeile

Tältä koodin pitäisi näyttää nyt:

    tuo pygame pygame.localsista tuonti * resoluutio = (400, 300) valkoinen = (255, 255, 255) musta = (0, 0, 0) punainen = (255, 0, 0) screen = pygame.display.set_mode (resoluutio) luokka Ball: def _init _ (itse, xPos = resoluutio [0] / 2, yPos = resoluutio [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 (itse, pinta): pygame.draw.circle (pinta, musta, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 or self.x> = resoluutio [0]): self.dx *= -1 jos (self.y <= 0 tai self.y> = resoluutio [1]): self.dy *= -1 luokka Pelaaja: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (itse, pinta): pygame.draw.circle (pinta, punainen, (self.x, self.y), self.radius) def update (itse): johto = pygame.mouse.get_pos () self.x = johto [0] self.y = johto [1] luokan peli (): def _init _ (itse): pygame.init () self.screen = pygame.display.set_ tila (resoluutio) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Player ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100))) def handleEvents (self): tapahtumalle pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): kun True: self.handleEvents () gameObj itse.gameObjects: gameObj.update () self.screen.fill (valkoinen) pelilleObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () peli (). juosta()

Osa 6/8: Esineiden vuorovaikutus pelaajan kanssa

Vaihe 1. Muuta päivitystoimintoja

Jotta esineet voivat olla vuorovaikutuksessa, niiden on päästävä toisiinsa. Lisätään toinen parametri päivitettäväksi GameObjects -luetteloon. Sinun on lisättävä se sekä pelaaja- että Ball -esineisiin. Jos sinulla on paljon peliobjekteja, perintö voi auttaa sinua pitämään kaikki metodisi allekirjoitukset samana.

    luokan pallo:… def päivitys (itse, gameObjects):… luokan pelaaja:… def päivitys (itse, gameObjects):

Vaihe 2. Tarkista pelaajan ja pallojen väliset törmäykset

Käy läpi kaikki peliobjektit ja tarkista, onko niiden tyyppi pallo. Tarkista sitten kahden kohteen säteet ja etäisyyskaava, törmäävätkö ne. Piireissä on todella helppo tarkistaa törmäykset. Tämä on suurin syy, miksi et käyttänyt muuta muotoa tähän peliin.

    luokan pelaaja:… def päivitys (itse, gameObjects):… pelilleOBJ pelissäObjects: jos gameObj.type == "pallo": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (peliObj.säde + itse säde) ** 2:

ProgramPygamePart5
ProgramPygamePart5

Vaihe 3. Lopeta peli, jos pelaaja saa "osuman"

Lopetetaan vain peli toistaiseksi.

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

Vaihe 4. Kokeile

Tältä koodin pitäisi näyttää nyt:

    tuo pygame pygame.localsista tuonti * resoluutio = (400, 300) valkoinen = (255, 255, 255) musta = (0, 0, 0) punainen = (255, 0, 0) screen = pygame.display.set_mode (resoluutio) luokka Ball: def _init _ (itse, xPos = resoluutio [0] / 2, yPos = resoluutio [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 (itse, pinta): pygame.draw.circle (pinta, musta, (self.x, self.y), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 or self.x> = resoluutio [0]): self.dx *= -1 jos (self.y <= 0 tai self.y> = resoluutio [1]): self.dy *= -1 luokka Pelaaja: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (itse, pinta): pygame.draw.circle (pinta, punainen, (self.x, self.y), self.radius) def päivitys (itse, gameObjects): johto = pygame.mouse.get_pos () self.x = johto [0] self.y = johto [1] gameObj: lle gameObjectsissa: jos gameObj.type == "pallo": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: pygame.quit () luokan peli (): def _init _ (itse): pygame.init () self.screen = pygame.display.set_mode (resoluutio) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Player ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): tapahtumaan 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 () peli (). run ()

Osa 7/8: Peliohjaimen lisääminen objektien luomiseen

Vaihe 1. Luo peliohjainluokka

Pelin ohjaimet ovat vastuussa pelin "suorittamisesta". Se eroaa peliluokastamme, joka on vastuussa kaikkien kohteidemme piirtämisestä ja päivittämisestä. Ohjain lisää säännöllisesti toisen pallon näytölle vaikeuttaakseen peliä. Lisää konstruktori ja alusta joitakin perusarvoja. Aikaväli on aika ennen uuden pallon lisäämistä.

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

Vaihe 2. Lisää päivitystoiminto

Tämä tarkistaa, kuinka paljon aikaa on kulunut pallon lisäämisestä tai pelin alusta. Jos aika on pidempi kuin aikaväli, nollaat ajan ja lisäät pallon.

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

Vaihe 3. Anna palloille satunnaiset nopeudet

Sinun on käytettävä satunnaislukuja tehdäksesi pelistä erilaisen joka kerta. Kuitenkin pallojen nopeudet ovat nyt liukuluku luku kokonaisluvun sijasta.

    luokan 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 = satunnainen ()*2, yVel = satunnainen ()*2))

Vaihe 4. Korjaa piirtotoiminto

Tasapeli ei hyväksy kellukkeita. Muunnetaan pallon sijainti kokonaislukuiksi ennen kuin pallot vedetään.

    luokan pallo:… def draw (itse, pinta): pygame.draw.circle (pinta, musta, (int (self.x), int (self.y)), self.radius)

Vaihe 5. Määritä peliohjaimen tasapeli

Koska se on peliobjekti, pääsilmukka yrittää piirtää sen. Sinun on määritettävä piirtotoiminto, joka ei tee mitään, jotta peli ei kaatuisi.

    luokan GameController:… def draw (itse, näyttö): pass

Vaihe 6. Lisää peliohjain gameObjectsiin ja poista 2 palloa

Pelin pitäisi nyt saada pallo viiden sekunnin välein.

    luokan peli (): def _init _ (itse):… self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ())

ProgramPygamePart6
ProgramPygamePart6

Vaihe 7. Kokeile

Tältä koodin pitäisi näyttää nyt:

    tuo pygame satunnaisesta tuonnista satunnaisesti pygamesta. paikalliset tuonti * resoluutio = (400, 300) valkoinen = (255, 255, 255) musta = (0, 0, 0) punainen = (255, 0, 0) screen = pygame. display.set_mode (resoluutio) luokka Ball: def _init _ (itse, xPos = resoluutio [0] / 2, yPos = resoluutio [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 (itse, pinta): pygame.draw.circle (pinta, musta, (int (its.) x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 tai self.) x> = resoluutio [0]): self.dx *= -1 jos (self.y <= 0 tai self.y> = resoluutio [1]): self.dy *= -1 luokka Pelaaja: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (itse, pinta): pygame.draw.circle (pinta, punainen, (self.x), self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] gameObj -pelissä Objektit: jos gameObj.type == "pallo": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius)* * 2: pygame.quit () luokka GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "peliohjain "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 = satunnainen ()*2)) def draw (itse, näyttö): pass luokan peli (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (päätöslauselma) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) def handleEvents (self): tapahtumaan pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): kun True: self.handleEvents () for gameObj in self.gameObjects: gameObj.update (self.gameObjects) self.screen.täytä (valkoinen) gameObj: lle itse. gameO bjects: gameObj.draw (itsenäyttö) self.clock.tick (60) pygame.display.flip () peli (). run ()

Osa 8/8: Pisteiden lisääminen ja pelin päättyminen

Vaihe 1. Lisää pisteet peliohjaimen luokkaan

Luo kirjasinobjekti ja pistemuuttuja. Piirrät fontin jokaiseen kehykseen näyttääksesi pisteet ja kasvattaaksesi pisteitä jokaisen päivityksen yhteydessä.

    luokan GameController: def _init _ (itse, väli = 5):… self.pisteet = 0 self.scoreText = pygame.font. Font (Ei mitään, 12) def update (self, gameObjects):… self.pisteet += 1 def draw (itse, näyttö): screen.blit (self.scoreText.render (str (self.score), True, black), (5, 5))

Vaihe 2. Muokkaa miten peli päättyy

Päästä eroon lopettamisesta, kun pelaaja havaitsee törmäyksen. Sen sijaan asetat pelaajaan muuttujan, jonka peli voi tarkistaa. Kun gameOver on asetettu, lopeta objektien päivittäminen. Tämä jäädyttää kaiken paikallaan, jotta pelaaja voi nähdä mitä tapahtui ja tarkistaa pisteet. Huomaa, että objektit piirretään edelleen, mutta niitä ei päivitetä.

    luokan pelaaja: def _init _ (self, rad = 20):… self.gameOver = Väärä def -päivitys (self, gameObjects):… gameObj: lle gameObjectsissa: if gameObj.type == "pallo": if (gameObj.x - itse.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: self.gameOver = True class game (): def _init _ (self): … Self.gameOver = Väärä def run (self): kun True: self.handleEvents () ellei self.gameOver: gameObj: lle itsessä.gameObjects: gameObj.update (self.gameObjects) jos gameObj.type == "player": self.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

Vaihe 3. Kokeile

Lopullisen koodin pitäisi näyttää nyt tältä:

    tuo pygame satunnaisesta tuonnista satunnaisesti pygamesta. paikalliset tuonti * resoluutio = (400, 300) valkoinen = (255, 255, 255) musta = (0, 0, 0) punainen = (255, 0, 0) screen = pygame. display.set_mode (resoluutio) luokka Ball: def _init _ (itse, xPos = resoluutio [0] / 2, yPos = resoluutio [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 (itse, pinta): pygame.draw.circle (pinta, musta, (int (itse.) x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 tai self.) x> = resoluutio [0]): self.dx *= -1 jos (self.y <= 0 tai self.y> = resoluutio [1]): self.dy *= -1 luokka Pelaaja: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" self.gameOver = False def draw (self, pinta): pygame.draw.circle (pinta, punainen), (self.x, self.y), self.radius) def update (self, gameObjects): johto = pygame.mouse.get_pos () self.x = johto [0] self.y = johto [1] gameObj: lle gameObjects: jos gameObj.type == "pallo": 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 = intervalli self.next = pygame.time.get_ticks () + (2*1000) self. type = "peliohjain" 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 (itse, näyttö): screen.blit (self.scoreText.render (str (self.score), True, black), (5, 5)) luokan peli (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (resoluutio) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) self.gameOver = False def handleEvents (itse): tapahtumaan pygame.event.get (): jos ev ent.type == QUIT: pygame.quit () def run (self): kun True: self.handleEvents () jos ei self.gameOver: gameObj in self.gameObjects: gameObj.update (self.gameObjects) jos gameObj. type == "player": self.gameOver = gameObj.gameOver self.screen.fill (white) for gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () peli (). juokse ()

Suositeltava: