Si të programoni një lojë në Python me Pygame (me fotografi)

Përmbajtje:

Si të programoni një lojë në Python me Pygame (me fotografi)
Si të programoni një lojë në Python me Pygame (me fotografi)

Video: Si të programoni një lojë në Python me Pygame (me fotografi)

Video: Si të programoni një lojë në Python me Pygame (me fotografi)
Video: Какого числа от 1 до 31, родился человек, такая у него и вся жизнь 2024, Mund
Anonim

Kjo është një hyrje në Pygame për njerëzit që tashmë e njohin Python. Ky artikull do t'ju mësojë hapat për të ndërtuar një lojë të thjeshtë që ka lojtarin të shmangë topat e kërcimit.

Hapa

Pjesa 1 nga 8: Instalimi i Pygame

Hapi 1. Shkarkoni Pygame

Gjeni atë për platformën tuaj nga

Hapi 2. Drejtoni instaluesin

Hapi 3. Verifikoni që instalimi ka funksionuar

Hapni një terminal Python. Shkruani "importi i lojërave pygame". Nëse nuk shihni ndonjë gabim, atëherë Pygame u instalua me sukses.

    import pygame

Pjesa 2 nga 8: Vendosja e një dritareje bazë

Hapi 1. Hapni një skedar të ri

Hapi 2. Importo Pygame

Pygame është një bibliotekë që siguron qasje në funksionet grafike. Nëse doni më shumë informacion se si funksionojnë këto funksione, mund t'i kërkoni në faqen e internetit të Pygame.

    import pygame nga pygame.locals import *

Hapi 3. Vendosni rezolucionin e dritares

Ju do të bëni një ndryshore globale për rezolucionin e ekranit në mënyrë që të mund të referoheni në disa pjesë të lojës. Alsoshtë gjithashtu e lehtë për tu gjetur në krye të skedarit, kështu që mund të ndryshohet më vonë. Për projektet e avancuara, vendosja e këtij informacioni në një skedar të veçantë do të ishte një ide më e mirë.

    rezolucion = (400, 300)

Hapi 4. Përcaktoni disa ngjyra

Ngjyrat në pygame janë (RBGA të cilat variojnë në vlera midis 0 dhe 255. Vlera alfa (A) është fakultative, por ngjyrat e tjera (e kuqe, blu dhe jeshile janë të detyrueshme).

    e bardhë = (255, 255, 255) e zezë = (0, 0, 0) e kuqe = (255, 0, 0)

Hapi 5. Filloni ekranin

Përdorni ndryshoren e rezolucionit që ishte përcaktuar më herët.

    ekran = pygame.display.set_mode (rezolucion)

Hapi 6. Bëni një lak loje

Përsëritni veprime të caktuara në çdo kuadër të lojës sonë. Bëni një lak që gjithmonë do të përsëritet për të kaluar nëpër të gjitha këto veprime.

    ndërsa e vërtetë:

Hapi 7. Ngjyrosni ekranin

    ekran. mbush (e bardhë)

Hapi 8. Shfaq ekranin

Nëse drejtoni programin, ekrani do të bëhet i bardhë dhe pastaj programi do të rrëzohet. Kjo ndodh sepse sistemi operativ po dërgon ngjarje në lojë dhe loja nuk po bën asgjë me to. Pasi loja merr shumë ngjarje të pakontrolluara, ajo do të rrëzohet.

    ndërsa True:… pygame.display.flip ()

Hapi 9. Trajtoni ngjarjet

Merrni një listë të të gjitha ngjarjeve që kanë ndodhur në secilën kornizë. Ju do të kujdeseni vetëm për një ngjarje, ngjarjen e lënies. Kjo ndodh kur përdoruesi mbyll dritaren e lojës. Kjo gjithashtu do të parandalojë prishjen e programit tonë për shkak të shumë ngjarjeve.

    ndërsa E vërtetë:… për ngjarje në pygame.event.get (): nëse event.type == QUIT: pygame.quit ()

ProgramPygamePart1
ProgramPygamePart1

Hapi 10. Provojeni

Ja se si duhet të duket kodi tani:

    import pygame nga pygame.locals import * rezolutë = (400, 300) e bardhë = (255, 255, 255) e zezë = (0, 0, 0) e kuqe = (255, 0, 0) ekran = pygame.display.set_mode (rezolucion) ndërsa True: screen.fill (e bardhë) pygame.display.flip () për ngjarje në pygame.event.get (): if event.type == QUIT: pygame.quit ()

Pjesa 3 nga 8: Krijimi i një objekti loje

Hapi 1. Bëni një klasë dhe konstruktor të ri

Vendosni të gjitha vetitë e objektit. Po siguroni gjithashtu vlera të paracaktuara për të gjitha pronat.

    klasa Ball: def _init _ (vet, xPos = rezolucion [0] / 2, yPos = rezolucion [1] / 2, xVel = 1, yVel = 1, rad = 15): vet.x = xPos vet.y = yPos vet.dx = xVel vetë.dy = yVel veta.radius = rad vetë.type = "top"

Hapi 2. Përcaktoni se si të vizatoni objektin

Përdorni vetitë që janë përcaktuar në konstruktorin për të tërhequr topin si rreth, si dhe për të kaluar një sipërfaqe në funksionin për të tërhequr objektin. Sipërfaqja do të jetë objekti i ekranit që është krijuar duke përdorur rezolucionin më herët.

    def barazim (vetvetja, sipërfaqja): pygame.draw.circle (sipërfaqe, e zezë, (vetja.x, vetja.y), vetja.radius)

Hapi 3. Bëni një shembull të klasës, si dhe thuajini lakut të lojës të tërheqë topin në çdo lak

    top = Top () ndërsa e vërtetë:… top.draw (ekran)

Hapi 4. Bëni objektin të lëvizë

Krijoni një funksion që do të përditësojë pozicionin e objektit. Thirrni këtë funksion në çdo lak loje.

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

Hapi 5. Kufizoni shkallën e kornizës

Topi do të lëvizë me të vërtetë shpejt sepse loopi i lojës po funksionon qindra herë në sekondë. Përdorni orën e Pygame për të kufizuar shkallën e kornizës në 60 fps.

    orë = pygame.time. Clock () ndërsa True:… clock.tick (60)

Hapi 6. Mbani topin në ekran

Shtoni kontrolle në funksionin e përditësimit për të ndryshuar drejtimin e topit nëse godet një nga skajet e ekranit.

    klasa Ball:… def update (self):… if (self.x <= 0 or self.x> = resolution [0]): self.dx *= -1 if (self.y <= 0 ose self.y > = rezolucioni [1]): vetë.dy *= -1

ProgramPygamePart2
ProgramPygamePart2

Hapi 7. Provojeni

Ja se si duhet të duket kodi tani:

    import pygame nga pygame.locals import * rezolucion = (400, 300) e bardhë = (255, 255, 255) e zezë = (0, 0, 0) e kuqe = (255, 0, 0) ekran = pygame.display.set_mode (rezolucion) klasa Ball: def _init _ (vet, xPos = rezolucion [0] / 2, yPos = rezolucion [1] / 2, xVel = 1, yVel = 1, rad = 15): vet.x = xPos vet.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "top" def barazim (vetja, sipërfaqja): pygame.draw.circle (sipërfaqe, e zezë, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy nëse (self.x <= 0 ose self.x> = rezolucion [0]): self.dx *= -1 if (self.y <= 0 ose self.y> = rezolucion [1]): self.dy *= -1 top = Ball () orë = pygame.time. Clock () ndërsa True: ekran. mbush (e bardhë) topin.dërras (ekranin) topin.ditëso () pygame.display.flip () clock.tick (60) për ngjarjen në pygame.event.get (): nëse event.type == QUIT: pygame.quit ()

Pjesa 4 nga 8: Organizimi i lojës

Hapi 1. Përdorni klasat për të organizuar gjithçka

Loja do të bëhet më e ndërlikuar. Përdorni teknika të orientuara nga objekti për të organizuar kodin tuaj.

Hapi 2. Bëni lakun e lojës në një klasë

Meqenëse loja jonë tani ka të dhëna duke përfshirë objektet dhe funksionet e lojës tuaj, ka kuptim ta shndërroni lakun tuaj të lojës në një klasë.

    lojë në klasë ():

Hapi 3. Shtoni një konstruktor

Këtu do të krijoni disa objekte të lojës, do të krijoni ekranin dhe orën tonë dhe do të filloni Pygame. Pygame duhet të inicializohet për të përdorur veçori të caktuara si tekst ose zë.

    lojë në klasë (): def _init _ (vet): pygame.init () self.screen = pygame.display.set_mode (rezolucion) self.clock = pygame.time. Clock ()

Hapi 4. Trajtoni ngjarjet në një funksion

    lojë në klasë ():… def handleEvents (vetë): për ngjarje në pygame.event.get (): nëse event.type == QUIT: pygame.quit ()

Hapi 5. Bëni lakun e lojës një funksion

Thirrni funksionin e trajtimit të ngjarjeve çdo lak.

    lojë në klasë ():… def run (vet): ndërsa True: self.handleEvents () self.screen.fill (white) self.clock.tick (60) pygame.display.flip ()

Hapi 6. Trajtoni objekte të shumta të lojës

Tani për tani ky kod duhet të thërrasë barazim dhe përditësim në objektin tonë çdo kornizë. Kjo do të ishte e çrregullt nëse do të kishit shumë objekte. Le të shtojmë objektin tonë në një grup dhe pastaj të përditësojmë dhe vizatojmë të gjitha objektet në grup çdo lak. Tani mund të shtoni lehtësisht një objekt tjetër dhe t'i jepni një pozicion tjetër fillestar.

    lojë në klasë (): def _init _ (vet):… self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100))… def run (vet): ndërsa E vërtetë: vet.handleEvents () për lojëObj in self.gameObjects: gameObj.update () self.screen.fill (white) for gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.rrokullisje()

ProgramPygamePart3
ProgramPygamePart3

Hapi 7. Provojeni

Ja se si duhet të duket kodi tani:

    import pygame nga pygame.locals import * rezolutë = (400, 300) e bardhë = (255, 255, 255) e zezë = (0, 0, 0) e kuqe = (255, 0, 0) ekran = pygame.display.set_mode (rezolucion) klasa Topi: def _init _ (vet, xPos = rezolucion [0] / 2, yPos = rezolucion [1] / 2, xVel = 1, yVel = 1, rad = 15): vet.x = xPos vet.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "top" def barazim (vetja, sipërfaqja): pygame.draw.circle (sipërfaqe, e zezë, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy nëse (self.x <= 0 ose self.x> = rezolucion [0]): self.dx *= -1 nëse (self.y <= 0 ose self.y> = rezolucion [1]): self.dy *= -1 lojë në klasë (): def _init _ (vet): pygame.init () self.screen = pygame.display.set_mode (rezolucion) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (vetë): për ngjarjen në pygame.event.get (): nëse event.type == QUIT: pygame.quit () def run (self): ndërsa True: self.handleEvent s () për 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. rrokullisje () lojë (). drejtuar ()

Pjesa 5 nga 8: Shtimi i një objekti lojtari

Hapi 1. Bëni një klasë lojtar dhe konstruktor

Ju do të bëni një rreth tjetër që kontrollohet nga miu. Filloni vlerat në konstruktorin. Rrezja është vlera e vetme e rëndësishme.

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

Hapi 2. Përcaktoni se si të vizatoni objektin e lojtarit

Do të jetë në të njëjtën mënyrë siç vizatuat objektet e tjera të lojës.

    klasi Lojtari: … barazim def (vetvetja, sipërfaqja): pygame.draw.circle (sipërfaqe, e kuqe, (self.x, self.y), self.radius)

Hapi 3. Shtoni kontrollin e miut për objektin e luajtësit

Në çdo kornizë, kontrolloni vendndodhjen e miut dhe vendosni vendndodhjen e objekteve të lojtarëve në atë pikë.

    lojtari i klasës:… def update (self): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1]

Hapi 4. Shtoni një objekt lojtari në lojëObjects

Krijoni një shembull të ri të lojtarit dhe shtojeni atë në listë.

    lojë në klasë (): def _init _ (vet):… self.gameObjects.append (Lojtar ())

ProgramPygamePart4
ProgramPygamePart4

Hapi 5. Provojeni

Ja se si duhet të duket kodi tani:

    import pygame nga pygame.locals import * rezolutë = (400, 300) e bardhë = (255, 255, 255) e zezë = (0, 0, 0) e kuqe = (255, 0, 0) ekran = pygame.display.set_mode (rezolucion) klasa Topi: def _init _ (vet, xPos = rezolucion [0] / 2, yPos = rezolucion [1] / 2, xVel = 1, yVel = 1, rad = 15): vet.x = xPos vet.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "top" def barazim (vetja, sipërfaqja): pygame.draw.circle (sipërfaqe, e zezë, (self.x, self.y), self.radius) def update (self): self.x += self.dx self.y += self.dy nëse (self.x <= 0 ose self.x> = rezolucion [0]): self.dx *= -1 nëse (self.y <= 0 ose self.y> = rezoluta [1]): self.dy *= -1 klasa Lojtari: def _init _ (self, rad = 20): self.x = 0 vet.y = 0 self.radius = rad self.type = "player" def barazim (vetja, sipërfaqja): pygame.draw.circle (sipërfaqe, e kuqe, (self.x, self.y), self.radius) def përditësim (vetja): kordoni = pygame.mouse.get_pos () veta.x = kordoni [0] vetja.y = kordoni [1] lojë e klasës (): def _init _ (vetja): pygame.init () self.screen = pygame.shfaq.vendos_ mënyra (rezolucioni) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Player ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Top (100)) def handleEvents (vetja): për ngjarje në pygame.event.get (): nëse event.type == QUIT: pygame.quit () def run (self): ndërsa True: self.handleEvents () për lojëObj në vetvete.gameObjects: gameObj.update () self.screen.fill (e bardhë) për lojëObj në self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () lojë () vrap ()

Pjesa 6 nga 8: Marrja e objekteve në bashkëveprim me luajtësin

Hapi 1. Ndryshoni funksionet Update

Në mënyrë që objektet të ndërveprojnë, ata do të duhet të kenë qasje tek njëri -tjetri. Le të shtojmë një parametër tjetër në Update për të kaluar në listën e objekteve të lojës. Ju do të duhet ta shtoni atë si në objektin e lojtarit ashtu edhe në objektet e Ballit. Nëse keni shumë objekte të lojës, trashëgimia mund t'ju ndihmojë të mbani të gjitha nënshkrimet e metodës tuaj të njëjta.

    klasa Ball:… def update (vetja, objekti i lojës):… lojtari i klasës:… përditësimi def (vetja, objekti i lojës):

Hapi 2. Kontrolloni për përplasjet midis lojtarit dhe topave

Kaloni nëpër të gjitha objektet e lojës dhe kontrolloni nëse lloji i objekteve është top. Pastaj përdorni rrezet e dy objekteve dhe formulën e distancës për të kontrolluar nëse ato përplasen. Qarqet janë vërtet të lehta për tu kontrolluar përplasjet. Kjo është arsyeja më e madhe që ju nuk keni përdorur ndonjë formë tjetër për këtë lojë.

    klasa Lojtari:… def update (vetja, gameObjects):… për gameObj në lojëObjects: if gameObj.type == "top": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2:

ProgramPygamePart5
ProgramPygamePart5

Hapi 3. Përfundoni lojën nëse lojtari "goditet"

Le të heqim dorë nga loja tani për tani.

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

Hapi 4. Provojeni

Ja se si duhet të duket kodi tani:

    import pygame nga pygame.locals import * rezolucion = (400, 300) e bardhë = (255, 255, 255) e zezë = (0, 0, 0) e kuqe = (255, 0, 0) ekran = pygame.display.set_mode (rezolucion) klasa Topi: def _init _ (vet, xPos = rezolucion [0] / 2, yPos = rezolucion [1] / 2, xVel = 1, yVel = 1, rad = 15): vet.x = xPos vet.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "top" def barazim (vetja, sipërfaqja): pygame.draw.circle (sipërfaqe, e zezë, (self.x, self.y), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 ose self.x> = rezolucion [0]): vet.dx *= -1 nëse (self.y <= 0 ose self.y> = rezolucion [1]): self.dy *= -1 lojtar i klasës: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def barazim (vetja, sipërfaqja): pygame.draw.circle (sipërfaqja, e kuqe, (self.x, self.y), self.radius) def update (vetja, objektet e lojës): cord = pygame.mouse.get_pos () self.x = kordoni [0] self.y = kordoni [1] për lojëObj në lojëObjektet: nëse gameObj.type == "top": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: pygame.quit () lojë në klasë (): def _init _ (vetja): pygame.init () self.screen = pygame.display.set_mode (rezolucioni) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Player ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (vetja): për ngjarje në pygame.event.get (): nëse event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () për gameObj in self.gameObjects: gameObj.update (self.gameObjects) self.screen.fill (white) për gameObj in self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () lojë (). drejto ()

Pjesa 7 nga 8: Shtimi i një kontrolluesi të lojës për të krijuar objekte

Hapi 1. Krijoni një klasë kontrollues lojërash

Kontrolluesit e lojës janë përgjegjës për "drejtimin" e lojës. Differentshtë ndryshe nga klasa jonë e lojës e cila është përgjegjëse për vizatimin dhe azhurnimin e të gjitha objekteve tona. Kontrolluesi periodikisht do të shtojë një top tjetër në ekran për ta bërë lojën më të vështirë. Shtoni një konstruktor dhe filloni disa vlera themelore. Intervali do të jetë koha para se të shtohet një top tjetër.

    klasa GameController: def _init _ (vetja, intervali = 5): self.inter = intervali self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "kontrolluesi i lojës"

Hapi 2. Shtoni funksionin e përditësimit

Kjo do të kontrollojë sa kohë ka kaluar që nga koha kur është shtuar topi ose që nga fillimi i lojës. Nëse koha është më shumë se intervali, do ta rivendosni kohën dhe do të shtoni një top.

    klasa GameController:… def update (vetja, lojaObjektet): nëse vetë.pastaj <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball ())

Hapi 3. Jepni topave shpejtësi të rastësishme

Ju do të duhet të përdorni numra të rastit për ta bërë lojën të ndryshme çdo herë. Sidoqoftë, shpejtësitë e topave tani janë një numër i pikave lundruese në vend të një numri të plotë.

    klasa GameController:… def update (vetja, lojaObjektet): nëse vetë.pastaj <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball (xVel = e rastësishme ()*2, yVel = e rastësishme ()*2))

Hapi 4. Fiksoni funksionin e vizatimit

Funksioni i tërheqjes nuk do të pranojë nota. Le ta shndërrojmë pozicionin e topit në numra të plotë para se topat të tërhiqen.

    klasa Ball: … barazim def (vetvetja, sipërfaqja): pygame.draw.circle (sipërfaqe, e zezë, (int (self.x), int (self.y)), self.radius)

Hapi 5. Përcaktoni një metodë barazimi për kontrolluesin e lojës

Meqenëse është një objekt loje, laku kryesor do të përpiqet ta tërheqë atë. Ju do të duhet të përcaktoni një funksion tërheqjeje që nuk bën asgjë në mënyrë që loja të mos rrëzohet.

    klasa GameController:… def barazim (vetja, ekrani): kalim

Hapi 6. Shtoni kontrolluesin e lojës në gameObjects dhe hiqni 2 topat

Loja tani duhet të pjellë një top çdo pesë sekonda.

    lojë në klasë (): def _init _ (vet):… self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Lojtar ())

ProgramPygamePart6
ProgramPygamePart6

Hapi 7. Provojeni

Ja se si duhet të duket kodi tani:

    importoni pygame nga importi i rastësishëm i rastësishëm nga pygame.locals import * rezolucion = (400, 300) e bardhë = (255, 255, 255) e zezë = (0, 0, 0) e kuqe = (255, 0, 0) ekran = pygame. display.set_mode (rezolucioni) klasa Ball: def _init _ (self, xPos = rezolucion [0] / 2, yPos = rezolucion [1] / 2, xVel = 1, yVel = 1, rad = 15): vet.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "top" def barazim (vetja, sipërfaqja): pygame.draw.circle (sipërfaqe, e zezë, (int (vetja x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy nëse (self.x <= 0 ose vetja. x> = rezolucion [0]): self.dx *= -1 nëse (self.y <= 0 ose self.y> = rezolucion [1]): self.dy *= -1 klasa Lojtari: def _init _ (vetja, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (vet, sipërfaqe): pygame.draw.circle (sipërfaqe, e kuqe, (self.x, self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = kordoni [0] self.y = kordoni [1] për lojëObj në lojë Objektet: nëse gameObj.type == "top": nëse (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius)* * 2: pygame.quit () class GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "game controller "def update (self, gameObjects): nëse self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Ball (xVel = rastësor ()*2, yVel = rastësor ()*2)) def barazim (vetja, ekrani): kaloni lojën e klasës (): def _init _ (vetja): pygame.init () self.screen = pygame.display.set_mode (rezolucion) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Lojtari ()) def handleEvents (vetja): për ngjarje në pygame.event.get (): if event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () për lojëObj në self.gameObjects: gameObj.update (self.gameObjects) self.screen.mbush (e bardhë) për lojëObj në vetvete.gameO bjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () lojë (). drejto ()

Pjesa 8 nga 8: Shtimi i një Rezultati dhe Lojë e Përfunduar

Hapi 1. Shtoni një rezultat në klasën e kontrolluesit të lojës

Krijoni një objekt fonti dhe një ndryshore rezultati. Ju do të vizatoni fontin në çdo kornizë për të shfaqur rezultatin dhe për të rritur rezultatin çdo kornizë në përditësim.

    klasa GameController: def _init _ (vetja, intervali = 5):… self.score = 0 self.scoreText = pygame.font. Font (Asnjë, 12) def përditësim (vet, gameObjects):… vet.score += 1 barazim def (vetja, ekrani): screen.blit (self.scoreText.render (str (self.score), E vërtetë, e zezë), (5, 5))

Hapi 2. Modifikoni sesi përfundon loja

Le të heqim qafe dorëheqjen kur lojtari zbulon një përplasje. Në vend të kësaj ju do të vendosni një ndryshore në lojtar që loja mund të kontrollojë. Kur është vendosur gameOver, ndaloni përditësimin e objekteve. Kjo do të ngrijë gjithçka në vend në mënyrë që lojtari të shohë se çfarë ka ndodhur dhe të kontrollojë rezultatin e tij. Vini re se objektet janë ende duke u tërhequr, thjesht nuk janë përditësuar.

    klasa Lojtari: def _init _ (vet, rad = 20):… self.gameOver = Përditësim i rremë def (vet, lojëObjektet):… për lojëObj në lojëObjektet: nëse gameObj.type == "top": nëse (gameObj.x - vetja.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: self.gameOver = Lojë e vërtetë e klasës (): def _init _ (vetja): … Self.gameOver = Def drejtimi i rremë (vetja): ndërsa i Vërtetë: self.handleEvents () nëse jo self.gameOver: për gameObj në self.gameObjects: gameObj.update (self.gameObjects) nëse gameObj.type == "lojtar": self.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

Hapi 3. Provojeni

Ja se si duhet të duket kodi i përfunduar tani:

    importoni pygame nga importi i rastësishëm i rastësishëm nga pygame.locals import * rezolucion = (400, 300) e bardhë = (255, 255, 255) e zezë = (0, 0, 0) e kuqe = (255, 0, 0) ekran = pygame. display.set_mode (rezolucioni) klasa Ball: def _init _ (self, xPos = rezolucion [0] / 2, yPos = rezolucion [1] / 2, xVel = 1, yVel = 1, rad = 15): vet.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "top" def barazim (vetja, sipërfaqja): pygame.draw.circle (sipërfaqe, e zezë, (int (vetja x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy nëse (self.x <= 0 ose vetja. x> = rezolucion [0]): self.dx *= -1 nëse (self.y <= 0 ose self.y> = rezolucion [1]): self.dy *= -1 klasa Lojtari: def _init _ (vetja, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" self.gameOver = Vizatimi i rremë i defit (vetja, sipërfaqja): pygame.draw.circle (sipërfaqe, e kuqe, (self.x, self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = kordoni [0] self.y = kordoni [1] për gameObj në lojëObjektet: nëse gameObj.type == "top": nëse (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: self.gameOver = GameController i klasës së vërtetë: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2*1000) vetja. type = "kontrolluesi i lojës" self.score = 0 self.scoreText = pygame.font. Font (Asnjë, 12) def update (self, gameObjects): nëse self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter*1000) lojëObjects.append (Top (xVel = rastësor)) 2, yVel = rastësor ()*2)) veta. rezultat + = 1 barazim def (vet, ekran): screen.blit (self.scoreText.render (str (self.score), E vërtetë, e zezë), (5, 5)) lojë në klasë (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (rezolucion) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) self.gameOver = False def handleEvents (vetja): për ngjarje në pygame.event.get (): nëse ev ent.type == QUIT: pygame.quit () def drejtuar (vetja): ndërsa True: self.handleEvents () nëse jo self.gameOver: për gameObj në self.gameObjects: gameObj.update (self.gameObjects) nëse gameObj. type == "player": self.gameOver = gameObj.gameOver self.screen.fill (e bardhë) për lojëObj në self.gameObjects: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () lojë (). drejto ()

Recommended: