Pygame ile Python'da Oyun Nasıl Programlanır (Resimlerle)

İçindekiler:

Pygame ile Python'da Oyun Nasıl Programlanır (Resimlerle)
Pygame ile Python'da Oyun Nasıl Programlanır (Resimlerle)

Video: Pygame ile Python'da Oyun Nasıl Programlanır (Resimlerle)

Video: Pygame ile Python'da Oyun Nasıl Programlanır (Resimlerle)
Video: Python3 Dersleri 27 - Dosya Açmak ve Yazmak 2024, Nisan
Anonim

Bu, Python'u zaten bilen kişiler için Pygame'e giriş niteliğindedir. Bu makale, oyuncunun zıplayan toplardan kaçtığı basit bir oyun oluşturmanın adımlarını öğretecektir.

adımlar

Bölüm 1/8: Pygame'i Yükleme

Adım 1. Pygame'i indirin

www.pygame.org/download.shtml adresinden platformunuz için bulun.

Adım 2. Yükleyiciyi çalıştırın

Adım 3. Kurulumun çalıştığını doğrulayın

Bir Python terminali açın. "Pygame'i içe aktar" yazın. Herhangi bir hata görmüyorsanız, Pygame başarıyla kuruldu.

    pygame'i içe aktar

Bölüm 2/8: Temel Bir Pencere Ayarlama

Adım 1. Yeni bir dosya açın

Adım 2. Pygame'i içe aktarın

Pygame, grafik işlevlerine erişim sağlayan bir kütüphanedir. Bu işlevlerin nasıl çalıştığı hakkında daha fazla bilgi istiyorsanız, bunları Pygame web sitesinde arayabilirsiniz.

    pygame'i pygame.locals'tan içe aktar *

Adım 3. Pencere çözünürlüğünü ayarlayın

Oyunun çeşitli bölümlerinde referans alınabilmesi için ekran çözünürlüğü için global bir değişken yapacaksınız. Daha sonra değiştirilebilmesi için dosyanın üst kısmında bulunması da kolaydır. Gelişmiş projeler için bu bilgileri ayrı bir dosyaya koymak daha iyi bir fikir olacaktır.

    çözünürlük = (400, 300)

Adım 4. Bazı renkleri tanımlayın

Pygame'deki renkler (0 ile 255 arasında değişen RBGA'dır. Alfa değeri (A) isteğe bağlıdır, ancak diğer renkler (kırmızı, mavi ve yeşil zorunludur).

    beyaz = (255, 255, 255) siyah = (0, 0, 0) kırmızı = (255, 0, 0)

Adım 5. Ekranı başlatın

Daha önce tanımlanan çözünürlük değişkenini kullanın.

    ekran = pygame.display.set_mode(çözünürlük)

Adım 6. Bir oyun döngüsü yapın

Oyunumuzun her karesinde belirli eylemleri tekrarlayın. Tüm bu eylemler arasında dolaşmak için her zaman tekrar edecek bir döngü yapın.

    Doğru iken:

Adım 7. Ekranı renklendirin

    screen.fill(beyaz)

Adım 8. Ekranı görüntüleyin

Programı çalıştırırsanız ekran beyaza döner ve ardından program çöker. Bunun nedeni, işletim sisteminin oyuna olaylar göndermesi ve oyunun bunlarla hiçbir şey yapmamasıdır. Oyun çok fazla işlenmemiş olay aldığında çökecektir.

    Doğru iken: … pygame.display.flip()

Adım 9. Olayları ele alın

Her karede meydana gelen tüm olayların bir listesini alın. Sadece bir olayla ilgileneceksin, bırakma olayı. Bu, kullanıcı oyun penceresini kapattığında meydana gelir. Bu aynı zamanda programımızın çok fazla olay nedeniyle çökmesini de önleyecektir.

    while True: … pygame.event.get() içindeki olay için: if event.type == QUIT: pygame.quit()

ProgramPygamePart1
ProgramPygamePart1

Adım 10. Deneyin

İşte kodun şimdi nasıl görünmesi gerektiği:

    pygame'i pygame.locals'den içe aktar içe aktar * çözünürlük = (400, 300) beyaz = (255, 255, 255) siyah = (0, 0, 0) kırmızı = (255, 0, 0) ekran = pygame.display.set_mode(çözünürlük) iken True: pygame.event.get() içindeki olay için screen.fill(white) pygame.display.flip(): if event.type == QUIT: pygame.quit()

Bölüm 3/8: Bir Oyun Nesnesi Yapmak

Adım 1. Yeni bir sınıf ve kurucu oluşturun

Nesnenin tüm özelliklerini ayarlayın. Ayrıca tüm özellikler için varsayılan değerler sağlıyorsunuz.

    sınıf Top: def _init_(self, xPos = çözünürlük[0] / 2, yPos = çözünürlük[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"

Adım 2. Nesnenin nasıl çizileceğini tanımlayın

Topu bir daire olarak çizmek ve nesneyi çizmek için fonksiyona bir yüzey geçirmek için yapıcıda tanımlanan özellikleri kullanın. Yüzey, daha önce çözünürlük kullanılarak oluşturulan ekran nesnesi olacaktır.

    def draw(self, yüzey): pygame.draw.circle(surface, black, (self.x, self.y), self.radius)

Adım 3. Sınıfın bir örneğini yapın ve oyun döngüsüne her döngüde topu çekmesini söyleyin

    top = Ball() iken True: … ball.draw(ekran)

Adım 4. Nesneyi hareket ettirin

Nesnenin konumunu güncelleyecek bir işlev oluşturun. Her oyun döngüsünde bu işlevi çağırın.

    sınıf Top: … def update(self): self.x += self.dx self.y += self.dy

Adım 5. Kare hızını sınırlayın

Oyun döngüsü saniyede yüzlerce kez çalıştığı için top gerçekten hızlı hareket edecektir. Kare hızını 60 fps ile sınırlamak için Pygame'in saatini kullanın.

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

Adım 6. Topu ekranda tutun

Ekran kenarlarından birine çarptığında topun yönünü tersine çevirmek için güncelleme işlevine kontroller ekleyin.

    sınıf Top: … def güncelleme(self): … if (self.x <= 0 veya self.x >= çözünürlük[0]): self.dx *= -1 if (self.y <= 0 veya self.y >= çözünürlük[1]): self.dy *= -1

ProgramPygamePart2
ProgramPygamePart2

Adım 7. Deneyin

İşte kodun şimdi nasıl görünmesi gerektiği:

    pygame'i pygame.locals'den içe aktar içe aktar * çözünürlük = (400, 300) beyaz = (255, 255, 255) siyah = (0, 0, 0) kırmızı = (255, 0, 0) ekran = pygame.display.set_mode(çözünürlük) sınıfı Top: def _init_(self, xPos = çözünürlük[0] / 2, yPos = çözünürlük[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(self, yüzey): pygame.draw.circle(surface, black, (self.x, self.y), self.radius) def update(self): self.x += self.dx self.y += self.dy if (self.x <= 0 veya self.x >= çözünürlük[0]): self.dx *= -1 if (self.y <= 0 veya self.y >= çözünürlük[1]): self.dy *= -1 top = Ball() saat = pygame.time. Clock() iken True: ekran. fill(white) ball.draw(screen) ball.update() pygame.display.flip() clock.tick(60) pygame.event.get() içindeki olay için: if event.type == QUIT: pygame.quit ()

Bölüm 4/8: Oyunu Düzenlemek

Adım 1. Her şeyi düzenlemek için sınıfları kullanın

Oyun daha karmaşık hale gelecek. Kodunuzu düzenlemek için nesne yönelimli teknikleri kullanın.

Adım 2. Oyun döngüsünü bir sınıfa dönüştürün

Oyunumuz artık oyun nesneleri ve işlevleri içeren verilere sahip olduğundan, oyun döngünüzü bir sınıfa dönüştürmek mantıklıdır.

    sınıf oyunu():

Adım 3. Bir kurucu ekleyin

Burada bazı oyun nesnelerini somutlaştıracak, ekranımızı ve saatimizi oluşturacak ve Pygame'i başlatacaksınız. Metin veya ses gibi belirli özellikleri kullanmak için Pygame'in başlatılması gerekir.

    class game(): def _init_(self): pygame.init() self.screen = pygame.display.set_mode(çözünürlük) self.clock = pygame.time. Clock()

Adım 4. Bir fonksiyondaki olayları işleyin

    class game(): … def handleEvents(self): pygame.event.get() içindeki olay için: if event.type == QUIT: pygame.quit()

Adım 5. Oyun döngüsünü bir fonksiyon haline getirin

Her döngüde olay işleme işlevini çağırın.

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

Adım 6. Birden çok oyun nesnesini kullanın

Şu anda bu kodun, her karede nesnemiz üzerinde çizim ve güncelleme çağırması gerekiyor. Çok fazla nesneniz varsa, bu dağınık olur. Nesnemizi bir diziye ekleyelim ve ardından dizideki tüm nesneleri her döngüde güncelleyip çizelim. Artık kolayca başka bir nesne ekleyebilir ve ona farklı bir başlangıç pozisyonu verebilirsiniz.

    class game(): def _init_(self): … self.gameObjects = self.gameObjects.append(Ball()) self.gameObjects.append(Ball(100)) … def run(self): while True: self self.gameObjects içindeki gameObj için.handleEvents(): self.gameObjects içindeki gameObj için gameObj.update() self.screen.fill(beyaz): gameObj.draw(self.screen) self.clock.tick(60) pygame.display.flip()

ProgramPygamePart3
ProgramPygamePart3

Adım 7. Deneyin

İşte kodun şimdi nasıl görünmesi gerektiği:

    pygame'i pygame.locals'den içe aktar içe aktar * çözünürlük = (400, 300) beyaz = (255, 255, 255) siyah = (0, 0, 0) kırmızı = (255, 0, 0) ekran = pygame.display.set_mode(çözünürlük) sınıfı Top: def _init_(self, xPos = çözünürlük[0] / 2, yPos = çözünürlük[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(self, yüzey): pygame.draw.circle(surface, black, (self.x, self.y), self.radius) def update(self): self.x += self.dx self.y += self.dy if (self.x <= 0 veya self.x >= çözünürlük[0]): self.dx *= -1 if (self.y <= 0 veya self.y >= çözünürlük[1]): self.dy *= -1 class game(): 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(Ball()) self.gameObjects.append(Ball(100)) def handleEvents(self): pygame.event.get() içindeki olay için: if event.type == QUIT: pygame.quit() def run(self): while True: self.handleEvent self.gameObjects içindeki gameObj için s(): self.gameObjects içindeki gameObj için gameObj.update() self.screen.fill(beyaz): gameObj.draw(self.screen) self.clock.tick(60) pygame.display. çevir() oyun().run()

Bölüm 5/8: Oyuncu Nesnesi Ekleme

Adım 1. Bir oyuncu sınıfı ve kurucu yapın

Fare tarafından kontrol edilen başka bir daire yapacaksınız. Yapıcıdaki değerleri başlatın. Yarıçap tek önemli değerdir.

    sınıf Oyuncu: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad

Adım 2. Oynatıcı nesnesinin nasıl çizileceğini tanımlayın

Diğer oyun nesnelerini çizdiğiniz gibi olacak.

    sınıf Oyuncu: … def draw(self, yüzey): pygame.draw.circle(surface, red, (self.x, self.y), self.radius)

Adım 3. Oynatıcı nesnesi için fare kontrolü ekleyin

Her karede, farenin konumunu kontrol edin ve oyuncuların nesnelerinin konumunu o noktaya ayarlayın.

    sınıf Oyuncu: … def update(self): kordon = pygame.mouse.get_pos() self.x = kordon[0] self.y = kordon[1]

Adım 4. gameObjects'e bir oyuncu nesnesi ekleyin

Yeni bir oyuncu örneği oluşturun ve listeye ekleyin.

    class game(): def _init_(self): … self.gameObjects.append(Player())

ProgramPygamePart4
ProgramPygamePart4

Adım 5. Deneyin

İşte kodun şimdi nasıl görünmesi gerektiği:

    pygame'i pygame.locals'den içe aktar içe aktar * çözünürlük = (400, 300) beyaz = (255, 255, 255) siyah = (0, 0, 0) kırmızı = (255, 0, 0) ekran = pygame.display.set_mode(çözünürlük) sınıfı Top: def _init_(self, xPos = çözünürlük[0] / 2, yPos = çözünürlük[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(self, yüzey): pygame.draw.circle(surface, black, (self.x, self.y), self.radius) def update(self): self.x += self.dx self.y += self.dy if (self.x <= 0 veya self.x >= çözünürlük[0]): self.dx *= -1 if (self.y <= 0 veya self.y >= çözünürlük[1]): self.dy *= -1 sınıf Oyuncu: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "player" def draw(self, yüzey): pygame.draw.circle(surface, red, (self.x, self.y), self.radius) def güncelleme (self): kordon = pygame.mouse.get_pos() self.x = kordon[0] self.y = kordon[1] sınıf oyun(): def _init_(self): pygame.init() self.screen = pygame.görüntüleme.set_ mod(çözünürlük) self.clock = pygame.time. Clock() self.gameObjects = self.gameObjects.append(Player()) self.gameObjects.append(Ball()) self.gameObjects.append(Ball(100))) def handleEvents(self): pygame.event.get() içindeki olay için: if event.type == QUIT: pygame.quit() def run(self): while True: self.handleEvents() için gameObj için self.gameObjects: self.gameObjects içindeki gameObj için gameObj.update() self.screen.fill(beyaz): gameObj.draw(self.screen) self.clock.tick(60) pygame.display.flip() game(). Çalıştırmak()

Bölüm 6/8: Nesnelerin Oyuncuyla Etkileşime Girmesi

Adım 1. Güncelleme işlevlerini değiştirin

Nesnelerin etkileşime girebilmesi için birbirlerine erişimlerinin olması gerekir. GameObjects listesine geçmek için Update'e bir parametre daha ekleyelim. Bunu hem oyuncu nesnesine hem de Top nesnelerine eklemeniz gerekecek. Çok sayıda oyun nesneniz varsa, kalıtım, tüm yöntem imzalarınızı aynı tutmanıza yardımcı olabilir.

    class Top: … def update(self, gameObjects): … class Player: … def update(self, gameObjects):

Adım 2. Oyuncu ve toplar arasındaki çarpışmaları kontrol edin

Tüm oyun nesnelerini gözden geçirin ve nesnelerin türünün top olup olmadığını kontrol edin. Ardından, çarpışıp çarpışmadıklarını kontrol etmek için iki nesnenin yarıçapını ve mesafe formülünü kullanın. Çemberler üzerindeki çarpışmaları kontrol etmek gerçekten çok kolay. Bu oyun için başka bir şekil kullanmamış olmanızın en büyük nedeni budur.

    class Oyuncu: … def update(self, gameObjects): … gameObjects içindeki gameObj için: if gameObj.type == "ball": if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)**2:

ProgramPygamePart5
ProgramPygamePart5

Adım 3. Oyuncu "vurulursa" oyunu bitirin

Şimdilik oyunu bırakalım.

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

Adım 4. Deneyin

İşte kodun şimdi nasıl görünmesi gerektiği:

    pygame'i pygame.locals'den içe aktar içe aktar * çözünürlük = (400, 300) beyaz = (255, 255, 255) siyah = (0, 0, 0) kırmızı = (255, 0, 0) ekran = pygame.display.set_mode(çözünürlük) sınıfı Top: def _init_(self, xPos = çözünürlük[0] / 2, yPos = çözünürlük[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(self, yüzey): pygame.draw.circle(surface, black, (self.x, self.y), self.radius) def update(self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 veya self.x >= çözünürlük[0]): self.dx *= -1 if (self.y <= 0 veya self.y >= çözünürlük[1]): self.dy *= -1 class Player: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "oyuncu" def draw(self, yüzey): pygame.draw.circle(surface, red, (self.x, self.y), self.radius) def update(self, gameObjects): cord = pygame.mouse.get_pos() self.x = kablo[0] self.y = gameObj için gameObjects: eğer gameObj.type == "top": if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)**2: pygame.quit() sınıfı oyun(): tanım _init_(self): pygame.init() self.screen = pygame.display.set_mode(çözünürlük) self.clock = pygame.time. Clock() self.gameObjects = self.gameObjects.append(Player()) self.gameObjects.append(Ball()) self.gameObjects.append(Ball(100)) def handleEvents(self): pygame.event.get() içindeki olay için: if event.type == QUIT: pygame.quit () def run(self): while True: self.gameObjects içindeki gameObj için self.handleEvents(): self.gameObjects içindeki gameObj için gameObj.update(self.gameObjects) self.screen.fill(white): gameObj.draw(self.screen) self.clock.tick(60) pygame.display.flip() oyun().run()

Bölüm 7/8: Nesneler Oluşturmak için Oyun Denetleyicisi Ekleme

Adım 1. Bir oyun denetleyicisi sınıfı oluşturun

Oyun denetleyicileri, oyunu "çalıştırmaktan" sorumludur. Tüm nesnelerimizi çizmekten ve güncellemekten sorumlu olan oyun sınıfımızdan farklıdır. Kontrolör, oyunu zorlaştırmak için periyodik olarak ekrana başka bir top ekleyecektir. Bir kurucu ekleyin ve bazı temel değerleri başlatın. Aralık, başka bir top eklenmeden önceki süre olacaktır.

    class GameController: def _init_(self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks() + (2 * 1000) self.type = "oyun kumandası"

Adım 2. Güncelleme işlevini ekleyin

Bu, bir topun eklenmesinden bu yana veya oyunun başlangıcından itibaren ne kadar zaman geçtiğini kontrol edecektir. Zaman, aralıktan fazlaysa, zamanı sıfırlar ve bir top eklersiniz.

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

Adım 3. Toplara rastgele hızlar verin

Oyunu her seferinde farklı kılmak için rastgele sayılar kullanmanız gerekecek. Ancak, topların hızları artık bir tam sayı yerine kayan noktalı bir sayıdır.

    sınıf GameController: … def update(self, gameObjects): if self.next < pygame.time.get_ticks(): self.next = pygame.time.get_ticks() + (self.inter * 1000) gameObjects.append(Ball(xVel=rastgele()*2, yVel=rastgele()*2))

Adım 4. Çizim işlevini düzeltin

Beraberlik işlevi yüzenleri kabul etmeyecektir. Toplar çekilmeden önce topun konumunu tam sayılara çevirelim.

    sınıf Top: … def draw(self, yüzey): pygame.draw.circle(surface, black, (int(self.x), int(self.y)), self.radius)

Adım 5. Oyun kumandası için bir çizim yöntemi tanımlayın

Bir oyun nesnesi olduğu için ana döngü onu çizmeye çalışacaktır. Oyunun çökmemesi için hiçbir şey yapmayan bir beraberlik işlevi tanımlamanız gerekecek.

    sınıf GameController: … def draw(self, screen): pass

Adım 6. Oyun denetleyicisini gameObjects'e ekleyin ve 2 topu çıkarın

Oyun şimdi her beş saniyede bir top üretmelidir.

    class game(): def _init_(self): … self.gameObjects = self.gameObjects.append(GameController()) self.gameObjects.append(Player())

ProgramPygamePart6
ProgramPygamePart6

Adım 7. Deneyin

İşte kodun şimdi nasıl görünmesi gerektiği:

    pygame'i rastgele içe aktar pygame.locals'den rastgele içe aktar içe aktar * çözünürlük = (400, 300) beyaz = (255, 255, 255) siyah = (0, 0, 0) kırmızı = (255, 0, 0) ekran = pygame. display.set_mode(çözünürlük) sınıfı Top: def _init_(self, xPos = çözünürlük[0] / 2, yPos = çözünürlük[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(self, yüzey): pygame.draw.circle(surface, black, (int(self. x), int(self.y)), self.radius) def update(self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 veya self. x >= çözünürlük[0]): self.dx *= -1 if (self.y <= 0 veya self.y >= çözünürlük[1]): self.dy *= -1 class Oyuncu: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "oyuncu" def draw(self, yüzey): pygame.draw.circle(surface, red, (self.x), self.y), self.radius) def update(self, gameObjects): cord = pygame.mouse.get_pos() self.x = oyun içi gameObj için kordon[0] self.y = kordon[1] Nesneler: if gameObj.type == "top": if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)* *2: pygame.quit() sınıfı GameController: def _init_(self, interval = 5): self.inter = interval self.next = pygame.time.get_ticks() + (2 * 1000) self.type = "oyun kumandası " def update(self, gameObjects): if self.next < pygame.time.get_ticks(): self.next = pygame.time.get_ticks() + (self.inter * 1000) gameObjects.append(Ball(xVel=random) ()*2, yVel=random()*2)) def draw(self, screen): pass class game(): 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(Player()) def handleEvents(self): pygame.event içindeki olay için.get(): if event.type == QUIT: pygame.quit() def run(self): while True: self.gameObjects içindeki gameObj için self.handleEvents(): gameObj.update(self.gameObjects) self.screen self.gameO'da gameObj için.fill(beyaz) nesneler: gameObj.draw(self.screen) self.clock.tick(60) pygame.display.flip() game().run()

Bölüm 8/8: Puan Ekleme ve Oyun Bitti

Adım 1. Oyun denetleyicisi sınıfına bir puan ekleyin

Bir yazı tipi nesnesi ve bir puan değişkeni oluşturun. Puanı görüntülemek ve güncellemedeki her karede puanı artırmak için her karede yazı tipini çizeceksiniz.

    class GameController: def _init_(self, interval = 5): … self.score = 0 self.scoreText = pygame.font. Font(None, 12) def update(self, gameObjects): … self.score += 1 def çekiliş (self, screen): screen.blit(self.scoreText.render(str(self.score), True, black), (5, 5))

Adım 2. Oyunun nasıl biteceğini değiştirin

Oyuncu bir çarpışma tespit ettiğinde bırakmadan kurtulalım. Bunun yerine, oyuncuda oyunun kontrol edebileceği bir değişken ayarlarsınız. gameOver ayarlandığında, nesneleri güncellemeyi durdurun. Bu, oyuncunun ne olduğunu görebilmesi ve puanını kontrol edebilmesi için her şeyi yerinde dondurur. Nesnelerin hala çizildiğini, sadece güncellenmediğini unutmayın.

    class Oyuncu: def _init_(self, rad = 20): … self.gameOver = Yanlış tanım güncelleme(self, gameObjects): … gameObj için gameObjects: if gameObj.type == "ball": if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)**2: self.gameOver = Gerçek sınıf game(): def _init_(self): … self.gameOver = False def run(self): while True: self.gameOver değilse self.handleEvents(): self.gameObjects içindeki gameObj için: gameObj.update(self.gameObjects) ise gameObj.type == "player": self.gameOver = gameObj.gameOver

ProgramPygameFinal
ProgramPygameFinal

Adım 3. Deneyin

İşte bitmiş kodun şimdi nasıl görünmesi gerektiği:

    pygame'i rastgele içe aktar pygame.locals'den rastgele içe aktar içe aktar * çözünürlük = (400, 300) beyaz = (255, 255, 255) siyah = (0, 0, 0) kırmızı = (255, 0, 0) ekran = pygame. display.set_mode(çözünürlük) sınıfı Top: def _init_(self, xPos = çözünürlük[0] / 2, yPos = çözünürlük[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(self, yüzey): pygame.draw.circle(surface, black, (int(self. x), int(self.y)), self.radius) def update(self, gameObjects): self.x += self.dx self.y += self.dy if (self.x <= 0 veya self. x >= çözünürlük[0]): self.dx *= -1 if (self.y <= 0 veya self.y >= çözünürlük[1]): self.dy *= -1 class Oyuncu: def _init_(self, rad = 20): self.x = 0 self.y = 0 self.radius = rad self.type = "oyuncu" self.gameOver = Yanlış def draw(self, yüzey): pygame.draw.circle(surface, red, (self.x, self.y), self.radius) def update(self, gameObjects): kordon = pygame.mouse.get_pos() self.x = kordon[0] self.y = kordon[1] gameObjects içindeki gameObj için: if gameObj.type == "top": if (gameObj.x - self.x)**2 + (gameObj.y - self.y)**2 <= (gameObj.radius + self.radius)**2: self.gameOver = Gerçek sınıf GameController: def _init_(self, interval = 5): self.inter = aralık self.next = pygame.time.get_ticks() + (2 * 1000) self. type = "oyun denetleyicisi" self.score = 0 self.scoreText = pygame.font. Font(Yok, 12) def update(self, gameObjects): if self.next < pygame.time.get_ticks(): self.next = pygame.time.get_ticks() + (self.inter * 1000) gameObjects.append(Ball(xVel=random()*2, yVel=random()*2)) self.score += 1 def draw(self, screen): screen.blit(self.scoreText.render(str(self.score), True, black), (5, 5)) class game(): 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(Player()) self.gameOver = Yanlış def handleEvents(self): pygame.event.get() içindeki olay için: if ev ent.type == QUIT: pygame.quit() def run(self): while True: self.handleEvents() değilse self.gameOver: self.gameObjects içindeki gameObj için: gameObj ise gameObj.update(self.gameObjects). type == "player": self.gameOver = self.gameObjects içindeki gameObj için gameObj.gameOver self.screen.fill(beyaz): gameObj.draw(self.screen) self.clock.tick(60) pygame.display.flip () oyun().run()

Önerilen: