Oyununuz çok kısa olmadığı sürece, ilerlemeyi kaydedebilmenize yardımcı olur. Kısa oyunlarda bile yüksek skorlar kaydedilebilir.
Oyununuza bir kaydet ve yükle sistemi eklemek, oyuncu deneyimini büyük ölçüde geliştirebilir. Oyuncuların zorlukla kazandıkları başarıları kaybetmeden ilerlemelerini sürdürmelerine, oyun oturumlarına devam etmelerine ve farklı stratejiler denemelerine olanak tanır.
Python'un Arcade kitaplığını kullanarak bu özelliği oyununuza eklemenin ne kadar kolay olduğuna şaşıracaksınız.
Basit Bir Oyun Yaratın
oluşturarak başlayın oyuncunun hareket edebildiği basit bir oyun sol ve sağ.
Bu makalede kullanılan kod bu makalede mevcuttur. GitHub deposu ve MIT lisansı altında ücretsiz olarak kullanabilirsiniz.
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 = 600
OYUNCU_HIZ = 5
mavi = çarşı.renk. MAVİsınıfOyun Penceresi(oyun makinesi. pencere):
kesin__içinde__(öz, genişlik, yükseklik):
super().__init__(genişlik, yükseklik)
self.player_x = genişlik // 2kesinon_draw(kendi):
arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, mavi)kesingüncelleme(öz, delta_time):
geçmekkesinon_key_press(self, key, değiştiriciler):
eğer anahtar == çarşı.key. SOL:
self.player_x -= PLAYER_SPEED
elif anahtar == çarşı.key. SAĞ:
self.player_x += PLAYER_SPEEDkesinana():
pencere = GameWindow (SCREEN_WIDTH, SCREEN_HEIGHT)
çarşı.run()
eğer __isim__ == '__ana__':
ana()
Kod, oynatıcıyı temsil eden mavi bir dikdörtgene sahip bir pencere oluşturur. Oyuncu, sol ve sağ ok tuşlarını kullanarak sola ve sağa hareket edebilir.
Oyun Durumlarını Yönetme
Kaydet ve yükle sistemini uygulamak için farklı oyun durumlarını yönetmeniz gerekir. Bir oyun durumu, nesnelerin konumları, puanlar ve diğer ilgili veriler dahil olmak üzere oyunun mevcut durumunu temsil eder. Bu örnek için, yalnızca oyuncunun x koordinatına odaklanın.
Oyun durumlarını yönetmek için bir GameState oyunun verilerini kapsayan ve onu kaydetmek ve yüklemek için yöntemler sağlayan sınıf. İşte kod:
sınıfGameState:
kesin__içinde__(kendi):
self.player_x = 0
Oyun Verilerini Kaydetme
Oyun verilerini kaydetmek için, Oyun Penceresi class ve gerektiğinde oyun durumunu kaydetmek için bir yöntem ekleyin. Basitlik için JSON biçimini kullanın. İşte kod:
İçinde oyunu kaydet yöntem, bir Python sözlüğü oluştur ilgili oyun verilerini içerir. Ardından, adlı bir JSON dosyasına serileştirin. kaydet.json.
içe aktarmak json
sınıfOyun Penceresi(oyun makinesi. pencere):
kesin__içinde__(öz, genişlik, yükseklik):
super().__init__(genişlik, yükseklik)
self.game_state = GameState()kesinoyunu kaydet(kendi):
veri = {
"oyuncu_x": self.game_state.player_x
}
ile açık('kaydet.json', 'w') gibi dosya:
json.dump (veri, dosya)
yazdır (veri)kesinon_draw(kendi):
arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, mavi)kesingüncelleme(öz, delta_time):
geçmek
kesinon_key_press(self, key, değiştiriciler):
eğer anahtar == çarşı.key. SOL:
self.game_state.player_x -= PLAYER_SPEED
elif anahtar == çarşı.key. SAĞ:
self.game_state.player_x += PLAYER_SPEED
elif anahtar == çarşı.key. S:
self.save_game()
Oyun Verilerini Yükleme
Oyun verilerini yüklemek için Oyun Penceresi sınıflandırın ve oyun durumunu yüklemek için bir yöntem ekleyin. adlı yeni bir dosya oluşturun. load-game.py ve aşağıdaki güncellemelerle kodu ekleyin:
sınıfOyun Penceresi(oyun makinesi. pencere):
kesin__içinde__(öz, genişlik, yükseklik):
super().__init__(genişlik, yükseklik)
self.game_state = GameState()
self.load_game()kesinoyunu yükle(kendi):
denemek:
ile açık('kaydet.json', 'R') gibi dosya:
veri = json.load (dosya)
self.game_state.player_x = veri["oyuncu_x"]
hariç FileNotFoundError:
geçmek
kesinon_key_press(self, key, değiştiriciler):
eğer anahtar == çarşı.key. L:
self.load_game()
bu oyunu yükle yöntem açmaya çalışır kaydet.json oyun verilerini dosyalayın ve alın. Daha sonra oyun durumunu yüklenen verilerle günceller. Dosya yoksa, varsayılan oyun durumunu bırakarak istisnayı yok sayabilirsiniz.
Ek Özellikler Dahil
Oyunun kaydetme ve yükleme sistemini geliştirmek için daha fazla özellik ekleyebilirsiniz.
Yüksek Puanları Kaydetme
Oyun durumunun yanı sıra yüksek puanları kaydetmek, birçok oyunda ortak bir özelliktir. Yapabilirsiniz puanları yönet ve bu sistemi kullanarak yüksek puanı kaydedin. adlı yeni bir dosya oluşturun. yüksek skor.py ve aşağıdaki güncellemelerle kodu ekleyin:
sınıfOyun Penceresi(oyun makinesi. pencere):
kesin__içinde__(öz, genişlik, yükseklik):
super().__init__(genişlik, yükseklik)
self.high_score = 0kesinoyunu yükle(kendi):
denemek:
ile açık('kaydet.json', 'R') gibi dosya:
veri = json.load (dosya)
yazdır (veri)
self.player_x = data.get("oyuncu_x", self.player_x)
self.high_score = data.get('yüksek skor', self.high_score)
hariç FileNotFoundError:
geçmekkesinoyunu kaydet(kendi):
veri = {
"oyuncu_x": self.player_x,
'yüksek skor': self.high_score
}
ile açık('kaydet.json', 'w') gibi dosya:
json.dump (veri, dosya)
yazdır (veri)
kesinon_key_press(self, key, değiştiriciler):
eğer anahtar == çarşı.key. SOL:
self.player_x -= PLAYER_SPEED
elif anahtar == çarşı.key. SAĞ:
self.player_x += PLAYER_SPEED
self.high_score += 1
Otomatik Kaydetme Özelliği
Oyunculara gönül rahatlığı sağlamak ve ilerleme kaybını önlemek için oyun durumunu düzenli aralıklarla otomatik olarak kaydedebilirsiniz. adlı yeni bir dosya oluşturun. otomatik kaydetme.py ve aşağıdaki güncellemelerle kodu ekleyin:
içe aktarmak zaman
sınıfOyun Penceresi(oyun makinesi. pencere):
kesin__içinde__(öz, genişlik, yükseklik):
super().__init__(genişlik, yükseklik)
self.game_state = GameState()# Her 6 saniyede bir kaydet
self.autosave_interval = 6
self.last_save_time = zaman.zaman()kesingüncelleme(öz, delta_time):
current_time = zaman.zaman()
time_diff = current_time - self.last_save_time
eğer time_diff >= self.autosave_interval:
self.save_game()
Yazdır("Kaydedildi")
self.last_save_time = current_time
Bu kod parçacığında, güncelleme yöntem, son kaydetmeden bu yana belirtilen zaman aralığının geçip geçmediğini kontrol eder. Eğer öyleyse, tetikler oyunu kaydet yöntemi Oyun Penceresi oyun durumunu otomatik olarak kaydetmek için sınıf. Ayarla otomatik kaydetme aralığı oyununuzun gereksinimlerine göre değer.
Oyun Verilerini Doğrulama
Yüklenen oyun verilerinin doğrulanması, bütünlüğünü ve tutarlılığını sağlamak için çok önemlidir. Veri doğrulamayı kaydetme ve yükleme sistemimize kolayca dahil edebilirsiniz:
sınıfGameState:
kesin__içinde__(kendi):
self.player_x = 0kesinKayıt Yeri(kendi):
eğer self.is_valid_state():
veri = {
"oyuncu_x": self.player_x
}ile açık('kaydet.json', 'w') gibi dosya:
json.dump (veri, dosya)kesinYükleme durumu(kendi):
ile açık('kaydet.json', 'R') gibi dosya:
veri = json.load (dosya)eğer self.validate_loaded_data (veri):
self.player_x = veri["oyuncu_x"]
başka:
Yazdır("Hata!")kesinis_valid_state(kendi):
# Burada doğrulama mantığını gerçekleştirin
# Durum geçerliyse True, aksi takdirde False döndürün
geçmek
kesinvalid_loaded_data(öz, veri):
# Yüklenen veriler üzerinde doğrulama gerçekleştirin
# Veriler geçerliyse True, aksi takdirde False döndürün
geçmek
Bu ek özellikleri kaydet ve yükle sistemine dahil ederek daha çok yönlü ve sağlam bir oyun deneyimi oluşturabilirsiniz. deneyim, oyunculara birden fazla oyun durumunu kaydetme, yüksek puanları takip etme, otomatik kaydetmeyi etkinleştirme ve verileri sağlama yeteneği sunar bütünlük.
Kaydet ve Yükle Sistemi için En İyi Uygulamalar
Kaydet ve yükle sisteminin uygulanması, oyun geliştirmenin önemli bir yönüdür. Sağlam ve güvenilir bir sistem sağlamak için en iyi uygulamaları takip etmek çok önemlidir. Dikkate alınması gereken bazı temel uygulamalar şunlardır:
Hassas Verileri Şifreleyin
Oyununuz şifreler, kişisel veriler veya uygulama içi satın almalar gibi hassas bilgiler içeriyorsa kaydedilen oyun durumunu şifrelemek çok önemlidir. Şifreleme, oyuncunun gizliliğini koruyan ve verilerine yetkisiz erişimi önleyen ekstra bir güvenlik katmanı ekler. Hassas bilgileri korumak için şifreleme algoritmalarından ve kitaplıklardan yararlanın.
Yüklenen Verileri Doğrula
Oyun verilerini yüklemeden önce, bütünlüğünü ve tutarlılığını sağlamak için doğrulamak önemlidir. Yüklenen verilerin oyununuzun beklenen biçimine, yapısına ve kısıtlamalarına uyduğunu doğrulayın.
Kilitlenmeleri veya hileleri önlemek için kritik veri alanlarında doğrulama kontrolleri yapın. Potansiyel hataları veya beklenmeyen verileri işlemek için sağlam veri doğrulama mekanizmalarını uygulayın.
Hataları İncelikle Ele Alın
Dosya G/Ç işlemleriyle uğraşırken hatalar oluşabilir. Bu hataları incelikle işlemek ve oynatıcıya bilgilendirici hata mesajları sağlamak çok önemlidir. gibi istisnaları yakalayın ve işleyin FileNotFoundError veya İzin Hatası, kaydetme ve yükleme işlemleri sırasında.
Oyuncuları yönlendirmek ve hayal kırıklığını önlemek için kullanıcı dostu hata mesajları görüntüleyin. Ek olarak, sorunları teşhis etmeye ve düzeltmeye yardımcı olması için hata günlüğü uygulamayı düşünün.
Kaydetme ve Yükleme İşlevini Test Etme
Güvenilirliğini ve doğruluğunu sağlamak için oyununuzun kaydetme ve yükleme işlevini kapsamlı bir şekilde test edin. Farklı oyun durumlarında kaydetme, geçerli ve geçersiz kaydetme dosyalarından yükleme ve son durumları test etme gibi çeşitli senaryoları kapsayan test senaryoları oluşturun.
Oyun durumunun düzgün bir şekilde kaydedildiğini ve yüklendiğini ve beklenen davranışın gerçekleştiğini doğrulayın. Otomatik test çerçeveleri, kapsamlı test takımları oluşturmaya yardımcı olabilir.
Kaydet ve Yükle Sistemi ile Oyunları Daha Eğlenceli Hale Getirin
Bir kaydet ve yükle sistemi eklemek, oyunculara süreklilik ve ilerleme hissi sağlayarak oyunları daha ilgi çekici hale getirebilir. Oyuncular özgürce deney yapabilir, farklı yaklaşımlar deneyebilir ve başarılarını kaybetmeden oyuna daha sonra geri dönebilir.
Bu özellik ayrıca oyuncuların arkadaşlarıyla rekabet etmesine veya önceki yüksek puanlarını geçmek için kendilerine meydan okumasına olanak tanıyarak oyununuza tekrar oynanabilirlik ve uzun vadeli katılım sağlar.