Oyun Durumunu JSON ile Kaydet ve Yükle
Oyun sırasında oyuncunun konumu, puanı, envanteri gibi verileri saklamak gerekir. JSON serilization bunu basit ve okunabilir kılar.
Önce bir oyuncu sınıfı ve kayıt/yükleme fonksiyonları yazacağız. Python'un yerleşik json modülü bunu kolaylaştırır.
1import json2import os3from datetime import datetime45class Player:6def __init__(self, name, level=1, health=100, gold=0, inventory=None):7self.name = name8self.level = level9self.health = health10self.gold = gold11self.inventory = inventory or []12self.last_save = None1314def to_dict(self):15"""Oyuncu verisini sözlüğe çevir"""16return {17"name": self.name,18"level": self.level,19"health": self.health,20"gold": self.gold,21"inventory": self.inventory,22"last_save": datetime.now().isoformat()23}2425@staticmethod26def from_dict(data):27"""Sözlükten oyuncu nesnesi oluştur"""28player = Player(29name=data["name"],30level=data["level"],31health=data["health"],32gold=data["gold"],33inventory=data.get("inventory", [])34)35player.last_save = data.get("last_save")36return player3738def save_game(player, filename="save.json"):39"""Oyuncu verisini JSON dosyasına kaydet"""40try:41with open(filename, "w", encoding="utf-8") as f:42json.dump(player.to_dict(), f, indent=2, ensure_ascii=False)43print(f"Oyun kaydedildi: {filename}")44except IOError as e:45print(f"Kayıt hatası: {e}")4647def load_game(filename="save.json"):48"""JSON dosyasından oyuncu verisini yükle"""49if not os.path.exists(filename):50print(f"Kayıt dosyası bulunamadı: {filename}")51return None5253try:54with open(filename, "r", encoding="utf-8") as f:55data = json.load(f)56player = Player.from_dict(data)57print(f"Oyun yüklendi: {player.name}")58return player59except (json.JSONDecodeError, KeyError) as e:60print(f"Yükleme hatası: {e}")61return None6263# Kullanım örneği64if __name__ == "__main__":65# Yeni oyuncu oluştur66oyuncu = Player("Kahraman", level=5, health=80, gold=250)67oyuncu.inventory = ["kılıç", "kalkan", "iksir"]6869# Kaydet70save_game(oyuncu)7172# Yükle73yüklenen = load_game()74if yüklenen:75print(f"Seviye: {yüklenen.level}, Altın: {yüklenen.gold}")76print(f"Envanter: {yüklenen.inventory}")Beklenen çıktı:
Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası
1Oyun kaydedildi: save.json2Oyun yüklendi: Kahraman3Seviye: 5, Altın: 2504Envanter: ['kılıç', 'kalkan', 'iksir']Oluşan save.json dosyası şöyle görünür:
1{2"name": "Kahraman",3"level": 5,4"health": 80,5"gold": 250,6"inventory": [7"kılıç",8"kalkan",9"iksir"10],11"last_save": "2024-01-15T14:30:45.123456"12}Sık yapılan hata: JSON dosyasını elle düzenledikten sonra format bozulabilir. Virgül eksikliği ya da tırnak hatası yüklemeyi kırar. Dosyayı kontrol etmek için json.tool kullan: python -m json.tool save.json
0 yorum