Code Issues Releases
state.py
1569 bytes | ef40951
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
"""
Player and Game State for Dungeon Descent
"""

import json
from pathlib import Path

class Player:
    def __init__(self, name="Adventurer"):
        self.name = name
        self.hp = 20
        self.max_hp = 20
        self.inventory = []
        self.floor = 1
        self.pos = (0, 0) # (x, y)

    def to_dict(self):
        return {
            "name": self.name,
            "hp": self.hp,
            "max_hp": self.max_hp,
            "inventory": self.inventory,
            "floor": self.floor,
            "pos": self.pos
        }

    @classmethod
    def from_dict(cls, data):
        player = cls(data["name"])
        player.hp = data["hp"]
        player.max_hp = data["max_hp"]
        player.inventory = data["inventory"]
        player.floor = data["floor"]
        player.pos = tuple(data["pos"])
        return player

class GameState:
    SAVE_FILE = Path("game_save.json")

    def __init__(self):
        self.player = Player()
        self.current_map = [] # List of strings or chars

    def save(self):
        data = {
            "player": self.player.to_dict(),
            "map": self.current_map
        }
        self.SAVE_FILE.write_text(json.dumps(data, indent=2))

    def load(self):
        if self.SAVE_FILE.exists():
            data = json.loads(self.SAVE_FILE.read_text())
            self.player = Player.from_dict(data["player"])
            self.current_map = data["map"]
            return True
        return False

    def delete_save(self):
        if self.SAVE_FILE.exists():
            self.SAVE_FILE.unlink()