Kusursuz bir oyun deneyimi için kaydetme ve yükleme oyunu ilerleme özelliğini nasıl dahil edeceğinizi öğrenin.

Modern oyun geliştirmede, oyun ilerlemesini kaydetme ve yükleme yeteneği, kullanıcı deneyimini ve katılımını artıran çok önemli bir özelliktir. Python'da 2B oyunlar oluşturmak için popüler bir kitaplık olan PyGame, kaydetme ve yükleme özelliğini zahmetsizce uygulamak için gerekli araçları sağlar.

Basit Bir Oyun Yaratmak

Başlamadan önce, sahip olduğunuzdan emin olun. cihazınızda yüklü pip. Pip'i yükledikten sonra, yüklemek için aşağıdaki komutu çalıştırın. pygame modül:

pip kurulumu pygame

PyGame'de bir kaydetme ve yükleme sisteminin uygulanmasını göstermek için basit bir oyun oluşturarak başlayın.

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

Bu oyunda, oyuncu sola ve sağa hareket etme yeteneğine sahip olacak. İşte temel oyun yapısını gösteren örnek bir kod parçacığı:

içe aktarmak pygame

# Pygame'i başlat
pygame.init()

instagram viewer

# Oyun penceresini ayarla
pencere genişliği = 800
pencere_yüksekliği = 600
pencere = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption("Sistem Eğitimini Kaydet ve Yükle")

# Oyun değişkenleri
oyuncu_x = 400
oyuncu_y = 500
oyuncu_hızı = 5

# Oyun döngüsü
koşu = Doğru
sırasında koşma:
için etkinlik içinde pygame.event.get():
eğer event.type == pygame. ÇIKIŞ YAPMAK:
koşu = YANLIŞ

tuşlar = pygame.key.get_pressed()
eğer anahtarlar[pygame. K_LEFT]:
player_x -= player_speed
eğer anahtarlar[pygame. K_RIGHT]:
player_x += player_speed

# Ekranı temizle
pencere.doldur((0, 0, 0))

# Oyuncuyu çiz
pygame.draw.rect (pencere, (255, 255, 255), (player_x, player_y, 50, 50))

# Ekranı güncelle
pygame.display.flip()

# Oyundan çık
pygame.quit()

Oyun Durumunu ve Veri Sürekliliğini Yönetme

Kaydet ve yükle işlevini uygulamadan önce, oyun durumunu yönetmenin ve verileri kalıcı hale getirmenin bir yolunu oluşturmanız gerekir. Yaygın bir yaklaşım, bir Python sözlüğü kullanın ilgili oyun verilerini saklamak için. Oyun durumu yönetimini dahil etmek için önceki kodu nasıl değiştirebileceğinize bir örnek:

# Oyun değişkenleri
oyun_durumu = {
"oyuncu_x": 400,
"player_y": 500
}

# Oyun döngüsü
koşu = Doğru
sırasında koşma:
# ...

tuşlar = pygame.key.get_pressed()
eğer anahtarlar[pygame. K_LEFT]:
oyun_durumu["oyuncu_x"] -= oyuncu_hızı
eğer anahtarlar[pygame. K_RIGHT]:
oyun_durumu["oyuncu_x"] += oynatıcı_hızı

# ...

pygame.display.flip()

Kaydet ve Yükle İşlevini Uygulama

Oyun ilerlemesini kaydetmek ve yüklemek için Python'un yerleşik özelliklerinden yararlanabilirsiniz. turşu Python nesnelerini seri hale getirmemize ve serisini kaldırmamıza izin veren modül. adlı yeni bir dosya oluşturun. save-game.py ve aşağıdaki güncellemelerle kodu ekleyin:

oyun_durumu = {
"oyuncu_x": oyuncu_x,
"player_y": oyuncu_y
}

# Oyun durumunu kaydet
kesinliklesave_game_state(oyun_durumu, dosya_adı):
denemek:
ile aç (dosya_adı, 'wb') gibi dosya:
turşu.dump (oyun_durumu, dosya)
Yazdır("Oyun durumu başarıyla kaydedildi!")
hariç GÇ Hatası:
Yazdır("Hata: Oyun durumu kaydedilemiyor.")

# Oyun durumunu yükle
kesinlikleload_game_state(dosya adı):
denemek:
ile aç (dosya_adı, 'rb') gibi dosya:
game_state = turşu.yük (dosya)
Yazdır("Oyun durumu başarıyla yüklendi!")
geri dönmek oyun_durumu
hariç (IOError, turşu. UnpicklingError):
Yazdır("Hata: Oyun durumu yüklenemiyor.")

# Oyun döngüsü
koşu = Doğru
sırasında koşma:

# ...

tuşlar = pygame.key.get_pressed()
eğer anahtarlar[pygame. K_LEFT]:
player_x -= player_speed
oyun_durumu["oyuncu_x"] = oyuncu_x
eğer anahtarlar[pygame. K_RIGHT]:
player_x += player_speed
oyun_durumu["oyuncu_x"] = oyuncu_x

eğer anahtarlar[pygame. K_s]:
save_game_state (oyun_durumu, "save_game.pickle")
eğer anahtarlar[pygame. K_l]:
oyun_durumu = yük_oyun_durumu("save_game.pickle")
player_x = oyun_durumu["oyuncu_x"]

# ...

# ...

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

Kayıt Yuvaları için Kullanıcı Arayüzü Tasarlama

Bir kaydetme ve yükleme arabirimi sağlamak için, oynatıcının hangi yuvayı kaydedeceğini veya yükleyeceğini seçmesine izin veren kaydetme yuvalarını görüntüleyebilirsiniz. Bu örnek için, seçenekler konsolda görüntülenir, ancak Daha kullanıcı dostu bir arayüz oluşturmak için Python'un GUI çerçeveleri.

Oluşturmak save_slots kullanılabilir kaydetme yuvalarını temsil eden liste. Ayrıca, bir ekleyin seçili_yuva oyuncu tarafından seçilen yuvayı takip etmek için değişken.

Oyuncu kaydet düğmesine bastığında mevcut kaydetme yuvalarını göster (K_s). Oyuncu, karşılık gelen sayı tuşuna basarak bir yuva seçebilir (K_1, K_2, veya K_3). Bir yuva seçilirse, oyun durumu seçilen yuvanın adını taşıyan bir dosyaya kaydedilir.

Benzer şekilde, oyuncu yükle düğmesine bastığında (K_l), kaydetme yuvalarını görüntüleyin. Oyuncu, tuşlara basarak bir yuva seçebilir K_a, k_b, veya K_c oyun durumunu yüklemek için. Alternatif olarak, dokunmatik girişleri kullan slot seçimi için klavye girişleri yerine. Bir yuva seçilirse, oyun durumu ilgili dosyadan yüklenir.

adlı yeni bir dosya oluşturun. arayüz.py ve aşağıdaki güncellemelerle kodu ekleyin:

# Oyun değişkenleri
save_slots = ['1. Bölme', "Yuva 2", "Yuva 3"]
seçili_yuva = Hiçbiri

# Oyun döngüsü
koşu = Doğru
sırasında koşma:
için etkinlik içinde pygame.event.get():
eğer event.type == pygame. ÇIKIŞ YAPMAK:
koşu = YANLIŞ

eğer event.type == pygame. TUŞ AŞAĞI:
eğer event.key == pygame. K_s:
# Kaydetme alanlarını göster
seçili_yuva = Hiçbiri
için ben, yuva içinde numaralandır (save_slots):
Yazdır(f"Yuvayı Kaydet {i+1}: {yuva}")
Yazdır("Oyunu kaydetmek için bir yuva seçin.")

eğer event.key == pygame. K_l:
Yazdır("Yuva Seçin:- a - Yuva 1, b - Yuva 3, c - Yuva 3")
# Kaydetme alanlarını göster
seçili_yuva = Hiçbiri
için ben, yuva içinde numaralandır (save_slots):
Yazdır(f"Yuvayı Kaydet {i+1}: {yuva}")
Yazdır("Oyunu yüklemek için bir slot seçin.")

eğer olay.anahtar içinde [oyun oyunu. K_1, pygame. K_2, pygame. K_3]:
# Seçilen yuvaya göre oyunu kaydedin veya yükleyin
slot_index = event.key - pygame. K_1
seçili_yuva = save_slots[slot_index]

save_game_state (oyun_durumu, F"{selected_slot}.turşu")
Yazdır(f"Oyun kaydedildi {selected_slot}!")

eğer olay.anahtar içinde [oyun oyunu. K_a, pygame. K_b, pygame. K_c]:

slot_index = event.key - pygame. K_a
seçili_yuva = save_slots[slot_index]
oyun_durumu = yük_oyun_durumu(F"{selected_slot}.turşu")
player_x = oyun_durumu["oyuncu_x"]
Yazdır(f"Oyun şuradan yüklendi: {selected_slot}!")
# ...

pygame.display.flip()

# ...

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

Atıf gerekmez: Imran tarafından ekran görüntüsü

Üzerine Yazma Seçeneklerini İşleme

Mevcut kayıtların üzerine yazma seçenekleri sağlamak için, bir kayıt dosyasının üzerine yazmadan önce oynatıcıdan onay isteyen bir uyarı mesajı uygulayabilirsiniz. adlı yeni bir dosya oluşturun. üzerine yazma-save.py ve kodu aşağıdaki güncellemelerle değiştirin:

# Oyun durumunu kaydet
kesinliklesave_game_state(oyun_durumu, dosya_adı):
eğer os.path.exists (dosya_adı):
# Mevcut kayıtlı dosyanın üzerine yazmak için onay iste
üzerine yaz = giriş("Kayıt dosyası zaten var. Üzerine yazmak istiyor musunuz? (e/a): ")
eğer overwrite.lower() != 'y':
Yazdır("Kaydetme iptal edildi.")
geri dönmek

denemek:
ile aç (dosya_adı, 'wb') gibi dosya:
turşu.dump (oyun_durumu, dosya)
Yazdır("Oyun durumu başarıyla kaydedildi!")
hariç GÇ Hatası:
Yazdır("Hata: Oyun durumu kaydedilemiyor.")

# ...

# Oyun durumunu yükle
kesinlikleload_game_state(dosya adı):
eğerOlumsuz os.path.exists (dosya_adı):
Yazdır("Hata: Kayıt dosyası mevcut değil.")
geri dönmekHiçbiri

denemek:
ile aç (dosya_adı, 'rb') gibi dosya:
game_state = turşu.yük (dosya)
Yazdır("Oyun durumu başarıyla yüklendi!")
geri dönmek oyun_durumu
hariç (IOError, turşu. UnpicklingError):
Yazdır("Hata: Oyun durumu yüklenemiyor.")
geri dönmekHiçbiri

# ...

Yukarıdaki kodda, bir oyun durumunu kaydetmeden önce, kaydetme dosyasının zaten var olup olmadığını kullanarak kontrol edersiniz. os.path.exists(). Varsa, oynatıcıdan mevcut kaydetme dosyasının üzerine yazmasını onaylarsınız. Oynatıcı üzerine yazmamayı seçerse kaydetme işlemi iptal edilir.

Benzer şekilde, bir oyun durumunu yüklemeden önce, kullanarak kaydetme dosyasının var olup olmadığını kontrol edersiniz. os.path.exists(). Olmazsa, oynatıcıyı bir hata mesajı ile bilgilendirirsiniz.

Kaydet ve Yükle Sistemi için En İyi Uygulamalar

PyGame'de veya herhangi bir oyun geliştirme projesinde bir kaydetme ve yükleme sistemi uygularken aşağıdaki en iyi uygulamaları göz önünde bulundurun:

  • Oyun durumunu temsil etmek için iyi tanımlanmış bir veri yapısı kullanın ve aşağıdaki gibi bir serileştirme kitaplığı kullanarak serileştirin: turşu. Bu, tüm oyun durumunu kolayca kaydetmenize ve yüklemenize olanak tanır.
  • Kayıtlı dosyaları depolamak için özel bir dizin veya klasör oluşturun. Bu, kaydedilen dosyaların düzenlenmesine yardımcı olur ve ana oyun dizininin yığılmasını önler.
  • Hata işlemeyi uygulayın ve hata ayıklama ve sorun gidermeye yardımcı olmak için bilgilendirici hata mesajları sağlayın. Bu, oyuncuların kaydetme ve yükleme işlemleri sırasında ortaya çıkabilecek sorunları anlamalarına yardımcı olur.
  • Oyuncuların birden çok oyun kaydetmesine izin vermek için birden çok kaydetme yuvası uygulamayı düşünün. Bu, oyunculara ilerlemelerinin üzerine yazmadan farklı yolları keşfetme veya oyunun belirli bölümlerini yeniden oynama esnekliği sağlar.

Kaydet ve Yükle Sistemiyle Oyunları Daha İlgi Çekici Hale Getirin

Kaydet ve yükle özelliğinin eklenmesi, bir oyunun katılımını ve keyfini büyük ölçüde artırabilir. Oyuncuların ilerlemelerini kaydetmelerine ve istedikleri zaman oyuna geri dönmelerine olanak tanır. Ayrıca, oyuncu seçimlerinin ve eylemlerinin kalıcı sonuçlar doğurduğu karmaşık oyun dünyaları yaratmak için olanaklar sunar.

Kaydet ve yükle sistemini uygulayarak, oyuncularınızın daha sürükleyici ve tatmin edici bir oyun deneyimi yaşamasını sağlayabilirsiniz.