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:
içe aktarmak oyun makinesi
EKRAN_GENİŞLİK = 800
EKRAN_YÜKSEKLİK = 600sı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 // 2kesinlikleon_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 += 10kesinlikleon_key_release(self, key, değiştiriciler):
eğer anahtar == çarşı.key. SOL veya anahtar == çarşı.key. SAĞ:
geçmekkesinlikleana():
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 // 2kesinliklegüncelleme(kendi):
geçmekkesinlikleç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 // 2kesinliklegüncelleme(kendi):
geçmekkesinlikleç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 = 0kesinlikleon_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 += 10kesinlikleon_key_release(self, key, değiştiriciler):
eğer anahtar == çarşı.key. SOL veya anahtar == çarşı.key. SAĞ:
geçmekkesinliklegü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 = 20kesinlikleç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 kodsı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ükseklikkesinlikleç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ğrukesinlikleç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ğrukesinlikledevre 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.