Pygon ilə Pygonda bir oyunu necə proqramlaşdırmaq olar (şəkillərlə)

Mündəricat:

Pygon ilə Pygonda bir oyunu necə proqramlaşdırmaq olar (şəkillərlə)
Pygon ilə Pygonda bir oyunu necə proqramlaşdırmaq olar (şəkillərlə)

Video: Pygon ilə Pygonda bir oyunu necə proqramlaşdırmaq olar (şəkillərlə)

Video: Pygon ilə Pygonda bir oyunu necə proqramlaşdırmaq olar (şəkillərlə)
Video: Python3 Dersleri 27 - Dosya Açmak ve Yazmak 2024, Aprel
Anonim

Python'u artıq bilən insanlar üçün bu Pygame -ə girişdir. Bu məqalə, oyunçunun sıçrayan toplardan qaçan sadə bir oyun qurma addımlarını sizə öyrədəcək.

Addımlar

8 -in 1 -ci hissəsi: Pygame -in quraşdırılması

Addım 1. Pygame yükləyin

Http://www.pygame.org/download.shtml saytından platformanız üçün tapın.

Addım 2. Quraşdırıcını işə salın

Addım 3. Quraşdırmanın işlədiyini yoxlayın

Python terminalını açın. "Import pygame" yazın. Heç bir səhv görmürsənsə, Pygame uğurla quraşdırılmışdır.

    pygame idxal edin

8 -in 2 -ci hissəsi: Əsas Pəncərə Qurmaq

Addım 1. Yeni bir fayl açın

Addım 2. Pygame idxal edin

Pygame, qrafik funksiyalarına girişi təmin edən bir kitabxanadır. Bu funksiyaların necə işlədiyinə dair daha çox məlumat əldə etmək istəyirsinizsə, bunları Pygame veb saytına baxa bilərsiniz.

    pygame.locals -dan pygame idxal edin *

Addım 3. Pəncərə qətnaməsini təyin edin

Oyunun bir neçə hissəsində istinad edilə bilən ekran həlli üçün qlobal bir dəyişən hazırlayacaqsınız. Daha sonra dəyişdirilə biləcəyi üçün faylın yuxarı hissəsində tapmaq da asandır. İnkişaf etmiş layihələr üçün bu məlumatı ayrı bir faylda yerləşdirmək daha yaxşı bir fikir olardı.

    qətnamə = (400, 300)

Addım 4. Bəzi rəngləri təyin edin

Pygame rəngləri (0 ilə 255 arasında dəyişən RBGA -dır. Alfa dəyəri (A) isteğe bağlıdır, lakin digər rənglər (qırmızı, mavi və yaşıl məcburidir).

    ağ = (255, 255, 255) qara = (0, 0, 0) qırmızı = (255, 0, 0)

Addım 5. Ekranı işə salın

Daha əvvəl müəyyən edilmiş həll dəyişənindən istifadə edin.

    ekran = pygame.display.set_mode (qətnamə)

Addım 6. Oyun döngəsi yaradın

Oyunun hər bir hissəsində müəyyən hərəkətləri təkrarlayın. Bütün bu hərəkətləri təkrarlamaq üçün həmişə təkrarlanacaq bir döngə yaradın.

    Doğru halda:

Addım 7. Ekranı rəngləndirin

    ekran doldurun (ağ)

Addım 8. Ekranı göstərin

Proqramı işə salsanız, ekran ağa çevriləcək və sonra proqram çökəcək. Bunun səbəbi, əməliyyat sisteminin oyuna hadisələr göndərməsi və oyunun onlarla heç bir iş görməməsidir. Oyun çox işlənməmiş hadisələr aldıqdan sonra çökəcək.

    Doğru isə:… pygame.display.flip ()

Addım 9. Hadisələri idarə edin

Hər çərçivədə baş verən bütün hadisələrin siyahısını alın. Yalnız bir hadisəni, hadisəni tərk etməyi düşünürsünüz. Bu, istifadəçi oyun pəncərəsini bağladığı zaman baş verir. Bu da proqramımızın çox hadisələr səbəbindən çökməsini önləyəcək.

    isə True:… pygame.event.get () hadisəsi üçün: event.type == QUIT: pygame.quit ()

ProgramPygamePart1
ProgramPygamePart1

Addım 10. Bunu sınayın

Kodun indi necə görünəcəyi budur:

    pygame.locals -dən pygame idxal et * qətnamə = (400, 300) ağ = (255, 255, 255) qara = (0, 0, 0) qırmızı = (255, 0, 0) ekran = pygame.display.set_mode (Çözünürlük) True isə: pygame.event.get () hadisəsi üçün screen.fill (ağ) pygame.display.flip (): event.type == QUIT: pygame.quit ()

8 -dən 3 -cü hissə: Oyun obyekti etmək

Addım 1. Yeni bir sinif və konstruktor yaradın

Obyektin bütün xüsusiyyətlərini təyin edin. Bütün xüsusiyyətlər üçün standart dəyərlər də təqdim edirsiniz.

    sinif Ball: def _init _ (özünü, xPos = qətnamə [0] / 2, yPos = qətnamə [1] / 2, xVel = 1, yVel = 1, rad = 15): özünü.x = xPos özünü.y = yPos özünü.dx = xVel self.dy = yVel self.radius = rad self.type = "top"

Addım 2. Obyektin necə çəkiləcəyini müəyyənləşdirin

Topu bir dairə şəklində çəkmək və bir obyekti çəkmək funksiyasına bir səth ötürmək üçün konstruktorda təyin olunan xüsusiyyətlərdən istifadə edin. Səth daha əvvəl qətnamə istifadə edərək yaradılan ekran obyekti olacaq.

    def draw (özünü, səthi): pygame.draw.circle (səth, qara, (self.x, self.y), self.radius)

Addım 3. Sinifdən bir nümunə götürün və oyun döngəsinə topu hər döngəyə çəkməsini söyləyin

    top = Top () Doğru halda:… top.draw (ekran)

Addım 4. Obyekti hərəkət etdirin

Obyektin mövqeyini yeniləyəcək bir funksiya yaradın. Hər oyun döngəsində bu funksiyanı çağırın.

    sinif Ball:… def yeniləmə (özünü): self.x += self.dx özünü.y += özünü.dy

Addım 5. Çərçivə sürətini məhdudlaşdırın

Top həqiqətən sürətli hərəkət edəcək, çünki oyun döngəsi saniyədə yüzlərlə dəfə işləyir. Çərçivə sürətini 60 kadr / saniyə ilə məhdudlaşdırmaq üçün Pygame saatından istifadə edin.

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

Addım 6. Topu ekranda saxlayın

Topun ekranın kənarlarından birinə dəydiyi halda istiqamətini dəyişdirmək üçün yeniləmə funksiyasına çeklər əlavə edin.

    sinif Ball:… def yeniləmə (özünü):… əgər (self.x <= 0 və ya self.x> = qətnamə [0]): self.dx *= -1 əgər (self.y <= 0 və ya self.y > = qətnamə [1]): self.dy *= -1

ProgramPygamePart2
ProgramPygamePart2

Addım 7. Bunu sınayın

Kodun indi necə görünəcəyi budur:

    pygame.locals -dən pygame idxal et * qətnamə = (400, 300) ağ = (255, 255, 255) qara = (0, 0, 0) qırmızı = (255, 0, 0) ekran = pygame.display.set_mode (qətnamə) sinif Ball: def _init _ (öz, xPos = qətnamə [0] / 2, yPos = qətnamə [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 = "top" def draw (öz, səth): pygame.draw.circle (səth, qara, (self.x, self.y), self.radius) def yeniləməsi (özünü): self.x += self.dx self.y += self.dy if (self.x <= 0 və ya self.x> = çözünürlük [0]): self.dx *= -1 əgər (self.y <= 0 və ya self.y> = qətnamə [1]): self.dy *= -1 top = Ball () saat = pygame.time. Clock () True isə: ekran. doldurun (ağ) ball.draw (ekran) ball.update () pygame.display.flip () clock.tick (60) pygame.event.get () hadisəsi üçün hadisə: ()

8 -in 4 -cü hissəsi: Oyunun təşkili

Addım 1. Hər şeyi təşkil etmək üçün dərslərdən istifadə edin

Oyun daha da mürəkkəbləşəcək. Kodunuzu təşkil etmək üçün obyekt yönümlü üsullardan istifadə edin.

Addım 2. Oyun döngəsini bir sinif halına gətirin

Oyunumuzda oyun obyektləriniz və funksiyalarınız daxil olmaqla məlumatlar olduğundan, oyun döngənizi bir sinfə çevirməyin mənası var.

    sinif oyunu ():

Addım 3. Konstruktor əlavə edin

Burada bəzi oyun obyektləri yaradacaq, ekran və saatımızı yaradacaq və Pygame -i işə salacaqsınız. Mətn və ya səs kimi müəyyən xüsusiyyətlərdən istifadə etmək üçün Pygame -in işə salınması lazımdır.

    sinif oyunu (): def _init _ (özünü): pygame.init () self.screen = pygame.display.set_mode (qətnamə) self.clock = pygame.time. Clock ()

Addım 4. Hadisələri bir funksiyada idarə edin

    sinif oyunu ():… def handleEvents (özünü): pygame.event.get () hadisəsi üçün: event.type == QUIT: pygame.quit ()

Addım 5. Oyun döngəsini bir funksiya halına gətirin

Hadisə idarəetmə funksiyasını hər döngəyə çağırın.

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

Addım 6. Birdən çox oyun obyektini idarə edin

Hal -hazırda bu kod hər bir çərçivəni obyektimizə çəkmək və yeniləmək üçün zəng etməlidir. Bir çox obyektiniz olsaydı, bu qarışıq olardı. Gəlin obyektimizi bir sıra əlavə edək və sonra hər döngədəki bütün obyektləri yeniləyək və çəkək. İndi asanlıqla başqa bir obyekt əlavə edib fərqli bir başlanğıc mövqeyi verə bilərsiniz.

    sinif oyunu (): def _init _ (özünü):… self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Top (100))… def run (öz): halbuki Doğru: özünü.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.flip ()

ProgramPygamePart3
ProgramPygamePart3

Addım 7. Bunu sınayın

Kodun indi necə görünəcəyi budur:

    pygame.locals -dən pygame idxal et * qətnamə = (400, 300) ağ = (255, 255, 255) qara = (0, 0, 0) qırmızı = (255, 0, 0) ekran = pygame.display.set_mode (qətnamə) sinif Ball: def _init _ (öz, xPos = qətnamə [0] / 2, yPos = qətnamə [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 = "top" def draw (öz, səth): pygame.draw.circle (səth, qara, (self.x, öz.y), self.radius) def yeniləməsi (özünü): self.x += self.dx self.y += self.dy if (self.x <= 0 və ya self.x> = çözünürlük [0]): self.dx *= -1 əgər (self.y <= 0 və ya self.y> = qətnamə [1]): self.dy *= -1 sinif oyunu (): def _init _ (özünü): pygame.init () self.screen = pygame.display.set_mode (çözünürlük) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Ball ()) self.gameObjects.append (Top (100)) def handleEvents (özünü): pygame.event.get () hadisəsi üçün: əgər event.type == QUIT: pygame.quit () def run (self): while True: self.handleEvent self.gameObjects -də gameObj üçün s (): gameObj.update () self.screen.fill (ağ) self.gameObjlarda gameObj üçün: ağObj.draw (öz ekran) self.clock.tick (60) pygame.display. flip () oyunu (). qaç ()

8 -dən 5 -ci hissə: Oyunçu obyekti əlavə etmək

Addım 1. Bir oyunçu sinfi və konstruktor hazırlayın

Siçan tərəfindən idarə olunan başqa bir dairə quracaqsınız. Konstruktordakı dəyərləri işə salın. Radius yeganə vacib dəyərdir.

    sinif oyunçusu: def _init _ (özünü, rad = 20): özünü.x = 0 özünü.y = 0 özünü.radius = rad

Addım 2. Oyunçu obyektini necə çəkəcəyinizi müəyyənləşdirin

Digər oyun obyektlərini çəkdiyiniz kimi olacaq.

    sinif oyunçusu:… def çəkmə (özünü, səthi): pygame.draw.circle (səth, qırmızı, (self.x, self.y), self.radius)

Addım 3. Oyunçu obyekti üçün siçan nəzarətini əlavə edin

Hər çərçivədə, siçanın yerini yoxlayın və oyunçuların obyektlərinin yerini o nöqtəyə təyin edin.

    sinif oyunçusu:… def yeniləmə (özünü): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1]

Addım 4. gameObjects -ə oyunçu obyekti əlavə edin

Yeni bir oyunçu nümunəsi yaradın və siyahıya əlavə edin.

    sinif oyunu (): def _init _ (özünü):… self.gameObjects.append (Oyunçu ())

ProgramPygamePart4
ProgramPygamePart4

Addım 5. Bunu sınayın

Kodun indi necə görünəcəyi budur:

    pygame.locals -dən pygame idxal et * qətnamə = (400, 300) ağ = (255, 255, 255) qara = (0, 0, 0) qırmızı = (255, 0, 0) ekran = pygame.display.set_mode (qətnamə) sinif Ball: def _init _ (öz, xPos = qətnamə [0] / 2, yPos = qətnamə [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 = "top" def draw (öz, səth): pygame.draw.circle (səth, qara, (self.x, öz.y), self.radius) def yeniləməsi (özünü): self.x += self.dx self.y += self.dy if (self.x <= 0 və ya self.x> = çözünürlük [0]): self.dx *= -1 əgər (self.y <= 0 və ya self.y> = qətnamə [1]): self.dy *= -1 sinif Oyunçu: def _init _ (özünü, rad = 20): özünü.x = 0 özünü.y = 0 self.radius = rad self.type = "player" def draw (öz, səth): pygame.draw.circle (səth, qırmızı, (self.x, self.y), self.radius) def yeniləmə (özünü): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] class game (): def _init _ (self): pygame.init () self.screen = pygame.görüntü.set_ rejim (qətnamə) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Oyunçu ()) self.gameObjects.append (Top ()) self.gameObjects.avay (Top (100))) def handleEvents (özünü): pygame.event.get () hadisəsi üçün: event.type == QUIT: pygame.quit () def run (self): while 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.flip () game (). qaç ()

8 -dən 6 -cı hissə: Obyektlərin Oyunçu ilə qarşılıqlı əlaqədə olması

Addım 1. Yeniləmə funksiyalarını dəyişdirin

Cisimlərin qarşılıqlı əlaqəyə girməsi üçün bir -birlərinə girmələri lazımdır. GameObjects siyahısında keçmək üçün Yeniləməyə başqa bir parametr əlavə edək. Həm oyunçu obyektinə, həm də Top obyektlərinə əlavə etməlisiniz. Bir çox oyun obyektiniz varsa, miras bütün metod imzalarınızı eyni saxlamağa kömək edə bilər.

    sinif topu:… def yeniləməsi (özünü, gameObjects):… sinif oyunçusu:… def yeniləməsi (özünü, gameObjects):

Addım 2. Oyunçu ilə toplar arasında toqquşmalar olub olmadığını yoxlayın

Bütün oyun obyektlərindən keçin və obyektlərin tipinin top olub olmadığını yoxlayın. Sonra iki obyektin radiusunu və məsafə formulundan istifadə edərək toqquşub -vuruşmadıqlarını yoxlayın. Dairələr, toqquşmaları yoxlamaq üçün çox asandır. Bu oyun üçün başqa bir forma istifadə etməməyinizin ən böyük səbəbi budur.

    sinif oyunçusu:… def yeniləməsi (özünü, gameObjects):… gameObj for gameObjects: if gameObj.type == "top": əgər (gameObj.x - self.x) ** 2 + (gameObj.y - self.y)) ** 2 <= (gameObj.radius + self.radius) ** 2:

ProgramPygamePart5
ProgramPygamePart5

Addım 3. Oyunçu "zərbə" alarsa oyunu bitirin

Hələlik oyundan çıxaq.

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

Addım 4. Bunu sınayın

Budur kodun indi necə görünməsi lazımdır:

    pygame.locals -dən pygame idxal et * qətnamə = (400, 300) ağ = (255, 255, 255) qara = (0, 0, 0) qırmızı = (255, 0, 0) ekran = pygame.display.set_mode (qətnamə) sinif Ball: def _init _ (öz, xPos = qətnamə [0] / 2, yPos = qətnamə [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 = "top" def draw (öz, səth): pygame.draw.circle (səth, qara, (self.x, öz.y), self.radius) def yeniləməsi (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 və ya self.x> = çözünürlük [0]): özünü.dx *= -1 əgər (self.y <= 0 və ya self.y> = qətnamə [1]): self.dy *= -1 sinif Oyunçu: def _init _ (self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def heçə getmə (özünü, səthi): pygame.draw.circle (səth, qırmızı, (self.x, self.y), self.radius) def update (self, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] gameObj for gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: pygame.quit () sinif oyunu (): def _init _ (özünü): pygame.init () self.screen = pygame.display.set_mode (qətnamə) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (Oyunçu ()) self.gameObjects.append (Ball ()) self.gameObjects.append (Ball (100)) def handleEvents (self): pygame.event.get () hadisəsi üçün: event.type == QUIT: pygame.quit () def run (self): while True: self.gameObjects -də gameObj üçün self.handleEvents () self.screen) self.clock.tick (60) pygame.display.flip () oyun (). run ()

7 -dən 8 -ci hissə: Nesnələr yaratmaq üçün Oyun Nəzarətçisi əlavə edin

Addım 1. Bir oyun nəzarətçi sinfi yaradın

Oyunu idarə edənlər oyunun "işləməsindən" məsuldur. Bütün obyektlərimizi çəkmək və yeniləməkdən məsul olan oyun sinifimizdən fərqlidir. Nəzarətçi oyunu çətinləşdirmək üçün vaxtaşırı ekrana başqa bir top əlavə edəcək. Bir konstruktor əlavə edin və bəzi əsas dəyərləri işə salın. Aralıq başqa bir topun əlavə olunmasından əvvəlki vaxt olacaq.

    sinif GameController: def _init _ (self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks () + (2 * 1000) self.type = "oyun nəzarətçisi"

Addım 2. Yeniləmə funksiyasını əlavə edin

Bu, topun əlavə edildiyi vaxtdan və ya oyunun əvvəlindən nə qədər vaxt keçdiyini yoxlayacaq. Vaxt intervaldan çox olarsa, vaxtı sıfırlayacaq və top əlavə edəcəksiniz.

    sinif GameController:… def yeniləməsi (özünü, gameObjects): əgər self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Top ())

Addım 3. Toplara təsadüfi sürətlər verin

Oyunu hər dəfə fərqli etmək üçün təsadüfi ədədlərdən istifadə etməlisiniz. Ancaq topların sürətləri artıq tam ədəd əvəzinə üzən nöqtə sayıdır.

    sinif GameController:… def yeniləməsi (özünü, gameObjects): əgər self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Top (xVel = təsadüfi ()*2, yVel = təsadüfi ()*2))

Addım 4. Çəkmə funksiyasını düzəldin

Çəkmə funksiyası üzgüçülükləri qəbul etməyəcək. Toplar çəkilməzdən əvvəl topun mövqeyini tam ədədlərə çevirək.

    sinif topu:… def çəkmə (özünü, səthi): pygame.draw.circle (səth, qara, (int (self.x), int (self.y)), özünü.radius)

Addım 5. Oyun nəzarətçisi üçün heç -heçə üsulu təyin edin

Bir oyun obyekti olduğu üçün əsas döngə onu çəkməyə çalışacaq. Oyunun çökməməsi üçün heç bir şey etməyən bir çəkmə funksiyası təyin etməlisiniz.

    sinif GameController:… def heç -heçə (özünü, ekran): keç

Addım 6. Oyun nəzarətçisini gameObjects -ə əlavə edin və 2 topu çıxarın

Oyun hər beş saniyədə bir top çıxarmalıdır.

    sinif oyunu (): def _init _ (özünü):… self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Oyunçu ())

ProgramPygamePart6
ProgramPygamePart6

Addım 7. Bunu sınayın

Kodun indi necə görünəcəyi budur:

    təsadüfi idxaldan pygame idxal edin təsadüfi pygame.locals idxal * qətnamə = (400, 300) ağ = (255, 255, 255) qara = (0, 0, 0) qırmızı = (255, 0, 0) ekran = pygame. display.set_mode (resolution) class Ball: def _init _ (self, xPos = resolution [0] / 2, yPos = resolution [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "top" def draw (öz, səth): pygame.draw.circle (səth, qara, (int (özünü). x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 və ya self). x> = qətnamə [0]): self.dx *= -1 əgər (self.y <= 0 və ya self.y> = çözünürlük [1]): self.dy *= -1 sinif Oyunçu: def _init _ (özünü, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw (öz, səth): pygame.draw.circle (səth, qırmızı, (self.x), self.y), self.radius) def yeniləməsi (özünü, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] gameObj for game Obyektlər: əgər gameObj.type == "top": if (gameObj.x - self.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius)* * 2: pygame.quit () sinif GameController: def _init _ (özünü, interval = 5): self.inter = interval özünü.next = pygame.time.get_ticks () + (2 * 1000) self.type = "oyun nəzarətçisi "def update (self, gameObjects): self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter * 1000) gameObjects.append (Top (xVel = təsadüfi) ()*2, yVel = təsadüfi ()*2)) def Draw (özünü, ekran): sinif oyununu keçir (): def _init _ (özünü): pygame.init () self.screen = pygame.display.set_mode (qətnamə)) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Player ()) def handleEvents (self): pygame.event hadisəsi üçün.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 self.gameO -da gameObj üçün (ağ) doldurun obyektlər: gameObj.draw (self.screen) self.clock.tick (60) pygame.display.flip () oyun (). run ()

8 -in 8 -ci hissəsi: Hesab əlavə etmək və oyun bitmək

Addım 1. Oyun nəzarətçi sinfinə bir bal əlavə edin

Şrift obyekti və hesab dəyişənini yaradın. Hesabını göstərmək və yeniləmədə hər çərçivəni artırmaq üçün hər çərçivədə yazı tipi çəkəcəksiniz.

    sinif GameController: def _init _ (self, interval = 5):… self.score = 0 self.scoreText = pygame.font. Font (None, 12) def update (self, gameObjects):… self.score += 1 def draw (özünü, ekran): screen.blit (self.scoreText.render (str (self.score), Doğru, qara), (5, 5))

Addım 2. Oyunun necə bitəcəyini dəyişdirin

Oyunçu bir toqquşma algıladığında işdən çıxaq. Bunun əvəzinə oyunçunun oyunun yoxlaya biləcəyi bir dəyişən təyin edəcəksiniz. GameOver qurulduqda, obyektləri yeniləməyi dayandırın. Bu, oyunçunun nə baş verdiyini görə biləcəyini və hesablarını yoxlaya bilməsi üçün hər şeyi yerində donduracaq. Nəzərə alın ki, obyektlər hələ də çəkilir, yenilənmir.

    sinif oyunçusu: def _init _ (özünü, rad = 20):… self.gameOver = Yanlış def yeniləməsi (özünü, gameObjects):… gameObj for gameObjects: əgər gameObj.type == "top": əgər (gameObj.x - özünü.x) ** 2 + (gameObj.y - self.y) ** 2 <= (gameObj.radius + self.radius) ** 2: self.gameOver = True class game (): def _init _ (self): … Self.gameOver = False def run (self): while True: self.handleEvents () if not self.gameOver: for gameObj in self.gameObjects: gameObj.update (self.gameObjects) if gameObj.type == "player": self.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

Addım 3. Bunu sınayın

Hazır kodun indi necə görünəcəyi budur:

    təsadüfi idxaldan pygame idxal edin təsadüfi pygame.locals idxal * qətnamə = (400, 300) ağ = (255, 255, 255) qara = (0, 0, 0) qırmızı = (255, 0, 0) ekran = pygame. display.set_mode (resolution) class Ball: def _init _ (self, xPos = resolution [0] / 2, yPos = resolution [1] / 2, xVel = 1, yVel = 1, rad = 15): self.x = xPos self.y = yPos self.dx = xVel self.dy = yVel self.radius = rad self.type = "top" def draw (öz, səth): pygame.draw.circle (səth, qara, (int (özünü) x), int (self.y)), self.radius) def update (self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 və ya self). x> = qətnamə [0]): self.dx *= -1 əgər (özünü.y <= 0 və ya özünü.y> = qətnamə [1]): self.dy *= -1 sinif Oyunçu: def _init _ (özünü, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" self.gameOver = False def draw (öz, səth): pygame.draw.circle (səth, qırmızı, (self.x, self.y), self.radius) def yeniləməsi (özünü, gameObjects): cord = pygame.mouse.get_pos () self.x = cord [0] self.y = cord [1] gameObj for gameObjects üçün: if gameObj.type == "top": 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 = interval self.next = pygame.time.get_ticks () + (2*1000) özünü. type = "oyun nəzarətçisi" self.score = 0 self.scoreText = pygame.font. Font (Heç biri, 12) def yeniləməsi (özünü, gameObjects): əgər self.next <pygame.time.get_ticks (): self.next = pygame.time.get_ticks () + (self.inter*1000) gameObjects.append (Top (xVel = təsadüfi ()*2, yVel = təsadüfi ()*2)) self.score + = 1 def Draw (self, screen)): screen.blit (self.scoreText.render (str (self.score), True, black), (5, 5)) sinif oyunu (): def _init _ (self): pygame.init () self.screen = pygame.display.set_mode (çözünürlük) self.clock = pygame.time. Clock () self.gameObjects = self.gameObjects.append (GameController ()) self.gameObjects.append (Oyunçu ()) self.gameOver = Yanlış def handleEvents (self): pygame.event.get (): hadisə üçün ent.type == QUIT: pygame.quit () def run (self): while True: self.handleEvents () if not.gameOver: gameObj for self.gameObjects: gameObj.update (self.gameObjects) if 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 () oyun (). qaç ()

Tövsiyə: