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 ()
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
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 ()
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 ())
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:
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 ())
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
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ç ()