Python'un Arcade kitaplığı, projelerinizde oyun seviyelerini uygulamak için basit ve etkili bir yol sunar.

Oyun geliştirme, yaratıcı fikirlerinizi hayata geçirmenizi sağlayan heyecan verici ve yaratıcı bir süreçtir. Bir oyun tasarlarken, oyuncu deneyimini büyük ölçüde geliştirebilecek temel unsurlardan biri oyun seviyelerinin uygulanmasıdır.

Seviyeler, oyunculara oyunun farklı aşamalarında gezinirken bir başarı ve katılım duygusu veren yapı, ilerleme ve zorluklar sağlar.

Basit Bir Oyun Yaratın

Başlamadan önce, sahip olduğunuzdan emin olun. cihazınızda yüklü pip. yüklemek için bu komutu kullanın. oyun makinesi kütüphane:

pip yükleme çarşı

Oyuncunun sola ve sağa hareket edebildiği basit bir oyun oluşturun.

Bu makalede kullanılan kod bu makalede mevcuttur. GitHub deposu ve MIT lisansı altında ücretsiz olarak kullanabilirsiniz.

Kullanıcı girişini işlemek ve oyun durumunu buna göre güncellemek için Arcade kitaplığının yeteneklerinden yararlanın. adlı yeni bir dosya oluşturun. basit oyun.py ve aşağıdaki kodu ekleyin:

instagram viewer
içe aktarmak oyun makinesi

EKRAN_GENİŞLİK = 800
EKRAN_YÜKSEKLİK = 600

sınıfBenim oyunum(oyun makinesi. pencere):
kesinlikle__içinde__(kendi):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Benim oyunum")
arcade.set_background_color (arcade.color. BEYAZ)
self.player_x = SCREEN_WIDTH // 2

kesinlikleon_draw(kendi):
arcade.start_render()
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, çarşı.renk. MAVİ)

kesinlikleon_key_press(self, key, değiştiriciler):
eğer anahtar == çarşı.key. SOL:
self.player_x -= 10
elif anahtar == çarşı.key. SAĞ:
self.player_x += 10

kesinlikleon_key_release(self, key, değiştiriciler):
eğer anahtar == çarşı.key. SOL veya anahtar == çarşı.key. SAĞ:
geçmek

kesinlikleana():
oyun = Oyunum()
çarşı.run()

eğer __isim__ == "__ana__":
ana()

Çıktı aşağıdadır:

Birden Çok Düzey Oluştur

Şimdi birden fazla seviye ekleyerek oyunu genişletin. Her seviye, oyuncu için farklı zorluklar sağlayan kendine özgü özelliklere sahip olacaktır. Ek düzeyler eklemek için önceki kodu değiştirebilirsiniz. İşte bir örnek:

sınıfSeviye bir:
kesinlikle__içinde__(kendi):
self.player_x = SCREEN_WIDTH // 2

kesinliklegüncelleme(kendi):
geçmek

kesinlikleçizmek(kendi):
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, çarşı.renk. MAVİ)

sınıfSeviye İki:
kesinlikle__içinde__(kendi):
self.player_x = SCREEN_WIDTH // 2

kesinliklegüncelleme(kendi):
geçmek

kesinlikleçizmek(kendi):
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, çarşı.renk. KIRMIZI)

sınıfBenim oyunum(oyun makinesi. pencere):
kesinlikle__içinde__(kendi):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Benim oyunum")
arcade.set_background_color (arcade.color. BEYAZ)
self.levels = [SeviyeBir(), DüzeyTwo()]
self.current_level = 0

kesinlikleon_draw(kendi):
arcade.start_render()
self.levels[self.current_level].draw()

kesinlikleon_key_press(self, key, değiştiriciler):
eğer anahtar == çarşı.key. SOL:
self.levels[self.current_level].player_x -= 10
elif anahtar == çarşı.key. SAĞ:
self.levels[self.current_level].player_x += 10

kesinlikleon_key_release(self, key, değiştiriciler):
eğer anahtar == çarşı.key. SOL veya anahtar == çarşı.key. SAĞ:
geçmek

kesinliklegüncelleme(öz, delta_time):
self.levels[self.current_level].update()

kesinlikleana():
oyun = Oyunum()
çarşı.run()

eğer __isim__ == "__ana__":
ana()

Seviyeler Arası Geçiş

Seviyeler arasında yumuşak bir geçiş oluşturmak için oyuncunun belirli bir sınırı ne zaman geçtiğini tespit edin. Yapabilirsiniz oyuncunun hareketini takip etve oyuncu sınırı geçtiğinde bir sonraki seviyeye geçebilirsiniz. adlı yeni bir dosya oluşturun. geçiş-arasında-seviyeleri.py ve aşağıdaki güncellemelerle kodu ekleyin:

sınıfBenim oyunum(oyun makinesi. pencere):
# ...

kesinliklegüncelleme(öz, delta_time):
self.levels[self.current_level].update()

# Oyuncunun sınırı geçip geçmediğini kontrol edin
eğer self.levels[self.current_level].player_x < 0:
self.current_level += 1
self.current_level %= len (self.levels)
self.levels[self.current_level].player_x = SCREEN_WIDTH
elif self.levels[self.current_level].player_x > SCREEN_WIDTH:
self.current_level += 1
self.current_level %= len (self.levels)
self.levels[self.current_level].player_x = 0

# ...

Çıktı aşağıdadır:

Ek Özellikler Dahil

Oyun seviyelerinizi daha ilgi çekici hale getirmek için güçlendirmeler ve hedefler gibi ek özellikler ekleyebilirsiniz.

hedefler

Hedefler, oyuncunun bir seviyede gerçekleştirmesi için belirli hedefler veya hedefler sağlar. Bir amaç ve ilerleme duygusu eklerler. Burada, nesnel bir özelliği uygulamaya ilişkin bir örnek verilmiştir:

sınıfAmaç:
kesinlikle__içinde__(öz, x, y):
self.x = x
self.y = y
self.yarıçap = 20

kesinlikleçizmek(kendi):
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. YEŞİL)

sınıfSeviye bir:
kesinlikle__içinde__(kendi):
self.objective = Amaç(600, 400)
# ...

kesinliklegüncelleme(kendi):
# Oyuncunun hedefe ulaşıp ulaşmadığını kontrol edin
eğer arcade.check_for_collision (self.player, self.objective):
self.complete_objective()

kesinlikleçizmek(kendi):
self.objective.draw()
# ...

kesinlikletamamlama_hedefi(kendi):
# Amaç tamamlamayı işlemek için kod
geçmek

koleksiyon

Koleksiyon öğeleri, oyuncunun seviyeler boyunca toplayabileceği öğeler veya bonuslardır. Koleksiyonluk bir özelliği uygulamaya ilişkin bir örneği burada bulabilirsiniz:

sınıfTahsil edilebilir:
kesinlikle__içinde__(öz, x, y):
self.x = x
self.y = y
self.yarıçap = 10
self.is_collected = YANLIŞ

kesinlikleçizmek(kendi):
eğerOlumsuz self.is_collected:
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. TURUNCU)

kesinlikleTOPLAMAK(kendi):
self.is_collected = Doğru
# Koleksiyonun oyuncu üzerindeki etkisini işlemek için kod

sınıfSeviye bir:
kesinlikle__içinde__(kendi):
self.collectible = Koleksiyonluk(300, 300)
# ...

kesinliklegüncelleme(kendi):
# Oyuncunun öğeyi toplayıp toplamadığını kontrol edin
eğer arcade.check_for_collision (self.player, self.collectible):
self.collectible.collect()

kesinlikleçizmek(kendi):
self.collectible.draw()
# ...

Engeller

Engeller, oyuncunun yolunu engelleyen statik nesneler veya hareketli varlıklar olabilir. Oyuncunun strateji oluşturmasını ve üstesinden gelmenin yollarını bulmasını gerektirir. İşte engeller özelliğinin uygulanmasına bir örnek:

sınıfEngel:
kesinlikle__içinde__(öz, x, y, genişlik, yükseklik):
self.x = x
self.y = y
self.genişlik = genişlik
self.height = yükseklik

kesinlikleçizmek(kendi):
arcade.draw_rectangle_filled (self.x, self.y, self.width, self.height, arcade.color. GRİ)

sınıfSeviye bir:
kesinlikle__içinde__(kendi):
self.engeller = [Engel(400, 200, 100, 50), Engel(600, 500, 80, 120)]
# ...

Güç kaynağını çalıştırın

Güçlendirmeler, oyuncunun yeteneklerini geliştirebilir veya geçici avantajlar sağlayabilir. İşte bir güçlendirme özelliğinin uygulanmasına bir örnek:

sınıfGüçlendirme:
kesinlikle__içinde__(öz, x, y):
self.x = x
self.y = y
self.yarıçap = 10
self.is_active = Doğru

kesinlikleçizmek(kendi):
eğer self.is_active:
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. SARI)

kesinlikleactiv_power_up(kendi):
self.is_active = Doğru

kesinlikledevre dışı bırakma_güçlendirme(kendi):
self.is_active = YANLIŞ

sınıfSeviye bir:
kesinlikle__içinde__(kendi):
self.power_up = Güçlendirme(200, 200)
# ...

kesinliklegüncelleme(kendi):
# Oyuncunun güçlendirme ile çarpışıp çarpışmadığını kontrol edin
eğer arcade.check_for_collision (self.player, self.power_up):
self.player.Active_power_up()
self.power_up.deactive_power_up()

kesinlikleçizmek(kendi):
self.power_up.draw()
# ...

Seviye Tasarımı İçin En İyi Uygulamalar

Seviye tasarımı, ilgi çekici ve eğlenceli oyun deneyimleri yaratmada çok önemli bir rol oynar. Oyununuz için seviyeler tasarlarken göz önünde bulundurmanız gereken bazı en iyi uygulamalar şunlardır:

Hedefleri Temizle

Oyuncunun başarması için her seviyenin net bir amacı veya hedefi olmalıdır. Belirli bir yere ulaşmak, düşmanları yenmek veya bulmacaları çözmek olsun, hedef iyi tanımlanmalı ve oyuncuya iletilmelidir.

Kademeli Zorluk Eğrisi

Oyuncular için sorunsuz bir öğrenme eğrisi sağlamak için zorluk derecesi kademeli olarak artan tasarım seviyeleri. Daha basit zorluklarla başlayın ve oyuncu ilerledikçe yavaş yavaş yeni mekanikler veya engeller tanıtın. Zorluktaki ani artışlar oyuncuları hayal kırıklığına uğratabilir, bu nedenle dengeli bir ilerleme sağlamak önemlidir.

Görsel Netlik

Seviye tasarımının ve görsel öğelerin önemli bilgileri oyuncuya net bir şekilde ilettiğinden emin olun. Müzik ve ses efektlerini birleştirme ayrıca önemli ipuçlarını iletebilir ve oyuncuya gerekli bilgileri sağlayabilir.

Oyun testi ve yineleme

Seviye tasarımını iyileştirmek ve iyileştirmek için düzenli oyun testi yapmak çok önemlidir. Düzeltme gerektirebilecek alanları belirlemek için oyunculardan geri bildirim toplayın ve deneyimlerini gözlemleyin. Daha keyifli ve dengeli bir oyun deneyimi yaratmak için bu geri bildirime dayalı olarak seviye tasarımınızı yineleyin.

Ödül ve Meydan Okumayı Dengeleyin

Seviyenizdeki zorlukların üstesinden gelen oyuncuları ödüllendirin. Bu, güçlendirmeler, koleksiyonlar, yeni alanların kilidini açma veya anlatı ilerlemesi yoluyla elde edilebilir. Zorlukların zorluğunu anlamlı ödüllerle dengelemek, oyuncuları motive etmeye yardımcı olur ve bir başarı duygusu sağlar.

Seviyelerle Oyunları Daha İlgi Çekici Hale Getirin

Oyun seviyelerini uygulayarak genel oyuncu deneyimini geliştirebilir ve daha ilgi çekici bir oyun ortamı yaratabilirsiniz. Seviyeler ilerleme, meydan okuma ve çeşitlilik sunarak oyuncuların yatırım yapmasını ve motive olmasını sağlar. Yeni mekanikler, engeller, düşmanlar ve ödüller sunarak her seviyenin farklı ve heyecan verici olmasını sağlarlar.