Kā ieprogrammēt spēli Python ar Pygame (ar attēliem)

Satura rādītājs:

Kā ieprogrammēt spēli Python ar Pygame (ar attēliem)
Kā ieprogrammēt spēli Python ar Pygame (ar attēliem)

Video: Kā ieprogrammēt spēli Python ar Pygame (ar attēliem)

Video: Kā ieprogrammēt spēli Python ar Pygame (ar attēliem)
Video: AKA - Energy (Official Music Video) ft. Gemini Major 2024, Aprīlis
Anonim

Šis ir ievads Pygame cilvēkiem, kuri jau zina Python. Šis raksts iemācīs jums vienkāršas spēles izveidi, kurā spēlētājs izvairās no atlecošajām bumbiņām.

Soļi

1. daļa no 8: Pygame instalēšana

Solis 1. Lejupielādējiet Pygame

Atrodiet to savai platformai vietnē

2. solis. Palaidiet instalētāju

3. solis. Pārbaudiet, vai instalācija darbojās

Atveriet Python termināli. Ierakstiet “importēt spēles”. Ja neredzat kļūdas, Pygame tika veiksmīgi instalēts.

    importēt pigame

2. daļa no 8: Pamata loga iestatīšana

1. solis. Atveriet jaunu failu

2. darbība. Importējiet Pygame

Pygame ir bibliotēka, kas nodrošina piekļuvi grafikas funkcijām. Ja vēlaties iegūt vairāk informācijas par to, kā šīs funkcijas darbojas, varat tās meklēt vietnē Pygame.

    importēt pygame no pygame.locals importēt *

3. solis. Iestatiet loga izšķirtspēju

Jūs izveidosit globālu mainīgo ekrāna izšķirtspējai, lai uz to varētu atsaukties vairākās spēles daļās. To ir arī viegli atrast faila augšdaļā, lai to vēlāk varētu mainīt. Uzlabotiem projektiem šīs informācijas ievietošana atsevišķā failā būtu labāka ideja.

    izšķirtspēja = (400, 300)

4. solis. Definējiet dažas krāsas

Krāsas spēlē ir (RBGA, kuras vērtības svārstās no 0 līdz 255. Alfa vērtība (A) nav obligāta, bet citas krāsas (sarkana, zila un zaļa) ir obligātas).

    balta = (255, 255, 255) melna = (0, 0, 0) sarkana = (255, 0, 0)

5. solis. Inicializējiet ekrānu

Izmantojiet iepriekš definēto izšķirtspējas mainīgo.

    ekrāns = pygame.display.set_mode (izšķirtspēja)

6. solis. Izveidojiet spēles cilpu

Atkārtojiet noteiktas darbības visos mūsu spēles kadros. Izveidojiet cilpu, kas vienmēr atkārtosies, lai veiktu visas šīs darbības.

    kamēr taisnība:

7. solis. Krāsojiet ekrānu

    screen.fill (balts)

8. solis. Parādiet ekrānu

Palaižot programmu, ekrāns kļūs balts un pēc tam programma avarēs. Tas ir tāpēc, ka operētājsistēma sūta notikumus uz spēli, un spēle ar tiem neko nedara. Tiklīdz spēle saņems pārāk daudz neapstrādātu notikumu, tā avarēs.

    kamēr taisnība:… pygame.display.flip ()

9. solis. Rīkojieties ar notikumiem

Iegūstiet sarakstu ar visiem notikumiem, kas notikuši katrā kadrā. Jums rūp tikai viens notikums - izstāšanās notikums. Tas notiek, kad lietotājs aizver spēles logu. Tas arī novērsīs mūsu programmas sabrukumu pārāk daudzu notikumu dēļ.

    kamēr True:… notikumam pygame.event.get (): if event.type == QUIT: pygame.quit ()

ProgramPygamePart1
ProgramPygamePart1

10. solis. Izmēģiniet to

Lūk, kā kodam vajadzētu izskatīties tagad:

    importēt pygame no pygame.locals importēt * izšķirtspēja = (400, 300) balta = (255, 255, 255) melna = (0, 0, 0) sarkana = (255, 0, 0) ekrāns = pygame.display.set_mode (izšķirtspēja), kamēr True: screen.fill (balta) pygame.display.flip () notikumam pygame.event.get (): if event.type == QUIT: pygame.quit ()

3. daļa no 8: Spēles objekta izveide

1. solis. Izveidojiet jaunu klasi un konstruktoru

Iestatiet visas objekta īpašības. Jūs arī sniedzat noklusējuma vērtības visiem īpašumiem.

    klases bumba: def _init _ (self, xPos = izšķirtspēja [0] / 2, yPos = izšķirtspēja [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 = "bumba"

2. solis. Definējiet, kā uzzīmēt objektu

Izmantojiet konstruktorā noteiktās īpašības, lai uzzīmētu bumbu kā apli, kā arī nodotu virsmu objekta vilkšanas funkcijai. Virsma būs ekrāna objekts, kas tika izveidots, izmantojot iepriekšējo izšķirtspēju.

    def draw (sevis, virsmas): pygame.draw.circle (virsma, melna, (self.x, self.y), self.radius)

3. solis. Izveidojiet klases eksemplāru, kā arī pasakiet spēles cilpai, lai tā ievelk bumbu katrā cilpā

    bumba = bumba (), kamēr taisnība:… ball.draw (ekrāns)

4. solis. Pārvietojiet objektu

Izveidojiet funkciju, kas atjauninās objekta atrašanās vietu. Izsauciet šo funkciju katrā spēles ciklā.

    klases bumba:… def update (self): self.x += self.dx self.y += self.dy

5. solis. Ierobežojiet kadru ātrumu

Bumba kustēsies ļoti ātri, jo spēles cilpa darbojas simtiem reižu sekundē. Izmantojiet Pygame pulksteni, lai ierobežotu kadru ātrumu līdz 60 kadriem sekundē.

    pulkstenis = pygame.time. Clock (), kamēr True:… clock.tick (60)

6. Turiet bumbu uz ekrāna

Atjaunināšanas funkcijā pievienojiet čekus, lai mainītu bumbiņas virzienu, ja tā trāpa vienā no ekrāna malām.

    klases bumba:… def update (self):… if (self.x <= 0 or self.x> = resolution [0]): self.dx *= -1 if (self.y <= 0 or self.y > = izšķirtspēja [1]): self.dy *= -1

ProgramPygamePart2
ProgramPygamePart2

7. solis. Izmēģiniet to

Lūk, kā kodam vajadzētu izskatīties tagad:

    importēt pygame no pygame.locals importēt * izšķirtspēja = (400, 300) balta = (255, 255, 255) melna = (0, 0, 0) sarkana = (255, 0, 0) ekrāns = pygame.display.set_mode (izšķirtspēja) klases bumba: def _init _ (self, xPos = izšķirtspēja [0] / 2, yPos = izšķirtspēja [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 (virsma, melna, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 vai self.x> = izšķirtspēja [0]): self.dx *= -1, ja (self.y <= 0 vai self.y> = izšķirtspēja [1]): self.dy *= -1 bumba = Ball () pulkstenis = pygame.time. Clock (), kamēr True: screen. aizpildīt (balta) ball.draw (screen) ball.update () pygame.display.flip () clock.tick (60) notikumam pygame.event.get (): if event.type == QUIT: pygame.quit ()

4. daļa no 8: Spēles organizēšana

1. solis. Izmantojiet nodarbības, lai visu sakārtotu

Spēle kļūs sarežģītāka. Izmantojiet uz objektu orientētas metodes, lai sakārtotu kodu.

Solis 2. Padariet spēles cilpu klasē

Tā kā mūsu spēlē tagad ir dati, tostarp jūsu spēles objekti un funkcijas, ir jēga pārvērst savu spēļu cilpu par klasi.

    klases spēle ():

3. solis. Pievienojiet konstruktoru

Šeit jūs parādīsit dažus spēles objektus, izveidosit mūsu ekrānu un pulksteni un inicializēsiet Pygame. Pygame ir jāinicializē, lai izmantotu noteiktas funkcijas, piemēram, tekstu vai skaņu.

    klases spēle (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (izšķirtspēja) self.clock = pygame.time. Clock ()

4. solis. Apstrādājiet notikumus kādā funkcijā

    klases spēle ():… def handleEvents (self): notikumam pygame.event.get (): if event.type == QUIT: pygame.quit ()

Solis 5. Padariet spēles cilpu par funkciju

Izsauciet notikumu apstrādes funkciju katrā ciklā.

    klases spēle ():… def run (self): kamēr True: self.handleEvents () self.screen.fill (balta) self.clock.tick (60) pygame.display.flip ()

6. Darbs ar vairākiem spēles objektiem

Šobrīd šim kodam katrā kadrā ir jāizsauc zīmēt un atjaunināt mūsu objektā. Tas būtu netīrs, ja jums būtu daudz priekšmetu. Pievienosim savu objektu masīvam un pēc tam katru cilpu atjaunināsim un uzzīmēsim visus masīva objektus. Tagad jūs varat viegli pievienot citu objektu un piešķirt tam citu sākuma pozīciju.

    klases spēle (): def _init _ (self):… self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100))… def run (self): kamēr True: self.handleEvents () gameObj in self.gameObjects: gameObj.update () self.screen.fill (balts) spēleiObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip ()

ProgramPygamePart3
ProgramPygamePart3

7. solis. Izmēģiniet to

Lūk, kā kodam vajadzētu izskatīties tagad:

    importēt pygame no pygame.locals importēt * izšķirtspēja = (400, 300) balta = (255, 255, 255) melna = (0, 0, 0) sarkana = (255, 0, 0) ekrāns = pygame.display.set_mode (izšķirtspēja) klases bumba: def _init _ (self, xPos = izšķirtspēja [0] / 2, yPos = izšķirtspēja [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 (virsma, melna, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 vai self.x> = izšķirtspēja [0]): self.dx *= -1, ja (self.y <= 0 vai self.y> = izšķirtspēja [1]): self.dy *= -1 klases spēle (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (izšķirtspēja) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): notikumam pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): kamēr True: self.handleEvent s () spēleiObj self.gameObjects: gameObj.update () self.screen.fill (balts) spēleiObj self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display. flip () spēle (). run ()

5. daļa no 8: Spēlētāja objekta pievienošana

1. solis. Izveidojiet spēlētāju klasi un konstruktoru

Jūs izveidosit vēl vienu loku, kuru kontrolē pele. Inicializējiet vērtības konstruktorā. Rādiuss ir vienīgā svarīgā vērtība.

    klases spēlētājs: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad

2. solis. Definējiet, kā uzzīmēt spēlētāja objektu

Tas būs tāds pats kā jūs uzzīmējāt citus spēles objektus.

    klases spēlētājs:… def draw (sevis, virsmas): pygame.draw.circle (virsma, sarkana, (self.x, self.y), self.radius)

Solis 3. Pievienojiet atskaņotāja objektam peles vadīklu

Katrā kadrā pārbaudiet peles atrašanās vietu un iestatiet spēlētāju objektu atrašanās vietu uz šo punktu.

    klases spēlētājs:… def update (self): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1]

4. solis. Pievienojiet atskaņotāja objektu gameObjects

Izveidojiet jaunu spēlētāja instanci un pievienojiet to sarakstam.

    klases spēle (): def _init _ (self):… self.gameObjects.append (Player ())

ProgramPygamePart4
ProgramPygamePart4

5. solis. Izmēģiniet to

Lūk, kā kodam vajadzētu izskatīties tagad:

    importēt pygame no pygame.locals importēt * izšķirtspēja = (400, 300) balta = (255, 255, 255) melna = (0, 0, 0) sarkana = (255, 0, 0) ekrāns = pygame.display.set_mode (izšķirtspēja) klases bumba: def _init _ (self, xPos = izšķirtspēja [0] / 2, yPos = izšķirtspēja [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 (virsma, melna, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy if (self.x <= 0 vai self.x> = izšķirtspēja [0]): self.dx *= -1, ja (self.y <= 0 vai self.y> = izšķirtspēja [1]): self.dy *= -1 klases spēlētājs: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (self, virsmas): pygame.draw.circle (virsma, sarkana, (self.x, self.y), self.radius) def update (self): aukla = pygame.mouse.get_pos () self.x = aukla [0] self.y = aukla [1] klases spēle (): def _init _ (self): pygame.init () self.screen = pygame.display.set_ režīms (izšķirtspēja) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Player ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): notikumam pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): kamēr True: self.handleEvents () gameObj in self.gameObjects: gameObj.update () self.screen.fill (balta) spēleiObj self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () spēle (). palaist ()

6. daļa no 8: Objektu mijiedarbības nodrošināšana ar atskaņotāju

1. darbība. Mainiet atjaunināšanas funkcijas

Lai objekti varētu mijiedarboties, tiem jābūt pieejamiem viens otram. Pievienosim atjauninājumam vēl vienu parametru, lai to nodotu gameObjects sarakstam. Jums tas būs jāpievieno gan spēlētāja objektam, gan bumbas objektiem. Ja jums ir daudz spēļu objektu, mantošana varētu palīdzēt saglabāt visus metodes parakstus vienādus.

    klases bumba:… def atjauninājums (self, gameObjects):… klases spēlētājs:… def update (self, gameObjects):

2. solis. Pārbaudiet, vai nav sadursmes starp spēlētāju un bumbiņām

Iet cauri visiem spēles objektiem un pārbaudiet, vai objektu veids ir bumba. Pēc tam izmantojiet abu objektu rādiusus un attāluma formulu, lai pārbaudītu, vai tie saduras. Lokus patiešām ir viegli pārbaudīt sadursmēs. Tas ir lielākais iemesls, kāpēc šai spēlei neizmantojāt kādu citu formu.

    klases spēlētājs:… def atjauninājums (self, gameObjects):… gameObj spēlēObjects: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2:

ProgramPygamePart5
ProgramPygamePart5

Solis 3. Pārtrauciet spēli, ja spēlētājs saņem "sitienu"

Pagaidām vienkārši iziesim no spēles.

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

4. solis. Izmēģiniet to

Lūk, kā kodam vajadzētu izskatīties tagad:

    importēt pygame no pygame.locals importēt * izšķirtspēja = (400, 300) balta = (255, 255, 255) melna = (0, 0, 0) sarkana = (255, 0, 0) ekrāns = pygame.display.set_mode (izšķirtspēja) klases bumba: def _init _ (self, xPos = izšķirtspēja [0] / 2, yPos = izšķirtspēja [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 (virsma, melna, (self.x, self.y), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 vai self.x> = izšķirtspēja [0]): self.dx *= -1, ja (self.y <= 0 vai self.y> = izšķirtspēja [1]): self.dy *= -1 klase Spēlētājs: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (self, virsmas): pygame.draw.circle (virsma, sarkana, (self.x, self.y), self.radius) def atjauninājums (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] gameObj in gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: pygame.quit () klases spēle (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (izšķirtspēja) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Player ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): notikumam 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 (balts) spēleiObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () spēle (). run ()

7. daļa no 8: Spēļu kontroliera pievienošana objektu izveidei

Solis 1. Izveidojiet spēļu kontroliera klasi

Spēles kontrolieri ir atbildīgi par spēles "vadīšanu". Tas atšķiras no mūsu spēļu klases, kas ir atbildīga par visu mūsu objektu zīmēšanu un atjaunināšanu. Kontrolieris periodiski pievienos ekrānam vēl vienu bumbiņu, lai padarītu spēli grūtāku. Pievienojiet konstruktoru un inicializējiet dažas pamatvērtības. Intervāls būs laiks, pirms tiek pievienota cita bumba.

    klases GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "spēles kontrolieris"

2. solis. Pievienojiet atjaunināšanas funkciju

Tas pārbaudīs, cik daudz laika ir pagājis kopš bumbas pievienošanas brīža vai no spēles sākuma. Ja laiks pārsniedz intervālu, jūs atiestatīsit laiku un pievienosit bumbiņu.

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

3. Piešķiriet bumbiņām izlases ātrumu

Lai spēle būtu atšķirīga, jums katru reizi jāizmanto nejauši skaitļi. Tomēr bumbiņu ātrums tagad ir peldošā komata skaitlis, nevis vesels skaitlis.

    klases GameController:… def update (self, gameObjects): ja self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball (xVel = nejaušs ()*2, yVel = nejaušs ()*2))

Solis 4. Labojiet zīmēšanas funkciju

Izlozes funkcija nepieņem pludiņus. Pirms bumbiņu izlozēšanas pārveidosim bumbas pozīciju veselos skaitļos.

    klases bumba:… def draw (self, surface): pygame.draw.circle (virsma, melna, (int (self.x), int (self.y)), self.radius)

5. solis. Definējiet spēles kontroliera izlozes metodi

Tā kā tas ir spēles objekts, galvenā cilpa mēģinās to uzzīmēt. Jums būs jādefinē izlozes funkcija, kas neko nedara, lai spēle netiktu avarēta.

    klases GameController:… def draw (self, screen): piespēle

6. solis. Pievienojiet spēles kontrolieri gameObjects un noņemiet 2 bumbiņas

Spēlei tagad ik pēc piecām sekundēm vajadzētu radīt bumbu.

    klases spēle (): def _init _ (self):… self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ())

ProgramPygamePart6
ProgramPygamePart6

7. solis. Izmēģiniet to

Lūk, kā kodam vajadzētu izskatīties tagad:

    importēt pygame no nejaušas importēšanas izlases veidā no pygame. display.set_mode (izšķirtspēja) klases bumba: def _init _ (self, xPos = izšķirtspēja [0] / 2, yPos = izšķirtspēja [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, virsmas): pygame.draw.circle (virsma, melna, (int (self. x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 vai self. x> = izšķirtspēja [0]): self.dx *= -1, ja (self.y <= 0 vai self.y> = izšķirtspēja [1]): self.dy *= -1 klases Spēlētājs: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (self, surface): pygame.draw.circle (virsma, sarkana, (self.x, self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] spēleiObj spēlē Objekti: ja gameObj.type == "bumba": ja (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius)* * 2: pygame.quit () klases GameController: def _init _ (self, interval = 5): self.inter = intervāls self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "spēles kontrolieris "def update (self, gameObjects): ja self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball (xVel = random) ()*2, yVel = nejauši ()*2)) def draw (self, screen): iziet klases spēli (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (izšķirtspēja) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) def handleEvents (self): notikumam pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): kamēr True: self.handleEvents () for gameObj in self.gameObjects: gameObj.update (self.gameObjects) self.screen.fill (balts) spēleiObj sevī.gameO bjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () spēle (). run ()

8. daļa no 8: Rezultāta pievienošana un spēles beigas

1. solis. Pievienojiet punktu skaitu spēļu kontrolieru klasei

Izveidojiet fonta objektu un punktu mainīgo. Jūs uzzīmēsiet fontu katrā kadrā, lai parādītu rezultātu, un palielinātu katra atjauninājuma kadra rezultātu.

    klases GameController: def _init _ (self, interval = 5):… self.score = 0 self.scoreText = pygame.font. Font (nav, 12) def update (self, gameObjects):… self.score += 1 def neizšķirts (self, screen): screen.blit (self.scoreText.render (str (self.score), True, black), (5, 5))

2. solis. Mainiet spēles beigu veidu

Atbrīvosimies no atmešanas, kad spēlētājs konstatēs sadursmi. Tā vietā jūs atskaņotājā iestatīsit mainīgo, kuru spēle var pārbaudīt. Kad ir iestatīts gameOver, pārtrauciet objektu atjaunināšanu. Tas iesaldēs visu savā vietā, lai spēlētājs varētu redzēt notikušo un pārbaudīt savu rezultātu. Ņemiet vērā, ka objekti joprojām tiek zīmēti, tikai netiek atjaunināti.

    klases spēlētājs: def _init _ (self, rad = 20):… self.gameOver = Nepareizs def atjauninājums (self, gameObjects):… gameObj spēlēObjects: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: self.gameOver = Patiesas klases spēle (): def _init _ (self): … Self.gameOver = False def run (self): kamēr True: self.handleEvents () ja ne self.gameOver: gameObj in self.gameObjects: gameObj.update (self.gameObjects), ja gameObj.type == "player": self.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

Solis 3. Izmēģiniet to

Gatavam kodam tagad vajadzētu izskatīties šādi:

    importēt pygame no nejaušas importēšanas izlases veidā no pygame. display.set_mode (izšķirtspēja) klases bumba: def _init _ (self, xPos = izšķirtspēja [0] / 2, yPos = izšķirtspēja [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, virsmas): pygame.draw.circle (virsma, melna, (int (self. x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 vai self. x> = izšķirtspēja [0]): self.dx *= -1, ja (self.y <= 0 vai self.y> = izšķirtspēja [1]): self.dy *= -1 klases Spēlētājs: 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 (virsma, sarkana, (self.x, self.y), self.radius) def update (self, gameObjects): aukla = pygame.mouse.get_pos () self.x = aukla [0] self.y = aukla [1] spēleiObj spēlēObjects: ja gameObj.type == "bumba": ja (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 = intervāls self.next = pygame.time.get_ticks () + (2*1000) self. type = "spēles kontrolieris" self.score = 0 self.scoreText = pygame.font. Font (Nav, 12) def atjauninājums (self, gameObjects): if self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter*1000) spēle): screen.blit (self.scoreText.render (str (self.score), True, black), (5, 5)) klases spēle (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (izšķirtspēja) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) self.gameOver = False def handleEvents (self): notikumam pygame.event.get (): ja ev ent.type == QUIT: pygame.quit () def run (self): kamēr True: self.handleEvents () ja ne self.gameOver: gameObj in self.gameObjects: gameObj.update (self.gameObjects), ja gameObj. type == "player": self.gameOver = gameObj.gameOver self.screen.fill (balts) gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () spēle (). palaist ()

Ieteicams: