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 json
2import os
3from datetime import datetime
4
5class Player:
6def __init__(self, name, level=1, health=100, gold=0, inventory=None):
7self.name = name
8self.level = level
9self.health = health
10self.gold = gold
11self.inventory = inventory or []
12self.last_save = None
13
14def 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}
24
25@staticmethod
26def 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 player
37
38def 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}")
46
47def 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 None
52
53try:
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 player
59except (json.JSONDecodeError, KeyError) as e:
60print(f"Yükleme hatası: {e}")
61return None
62
63# Kullanım örneği
64if __name__ == "__main__":
65# Yeni oyuncu oluştur
66oyuncu = Player("Kahraman", level=5, health=80, gold=250)
67oyuncu.inventory = ["kılıç", "kalkan", "iksir"]
68
69# Kaydet
70save_game(oyuncu)
71
72# Yükle
73yü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.json
2Oyun yüklendi: Kahraman
3Seviye: 5, Altın: 250
4Envanter: ['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

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz