Проблемы с загрузкой файла JSON в код ООП в приключении Python Text [закрыто]Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Проблемы с загрузкой файла JSON в код ООП в приключении Python Text [закрыто]

Сообщение Anonymous »

Я пишу текстовое приключение на Python, используя объектно-ориентированные функции, такие как классы и наследование. Текущее состояние кода работает, но когда я сохраняю игру в формате JSON, а затем загружаю ее обратно в классы, получаю неожиданные результаты. В частности, ObjectDoor загружается как Object базового класса. Это одна конкретная дверь, другая дверь работает нормально, когда я манипулирую ею из загруженной игры, но я не могу понять, где я ошибся.
Я использовал json библиотека для преобразования классов в словари. вот пример моего кода.

Код: Выделить всё

def save_game(self, filename="savegame.json"):
"""Save the game state to a JSON file."""
game_state = {
"player": self.player.to_dict(),
"locations": {name: loc.to_dict() for name, loc in self.locations.items()},
"objects": {name: obj.to_dict() for name, obj in self.allobjects.items()},
"current_location": self.current_location.name
}
with open(filename, "w") as file:
json.dump(game_state, file, indent=4)

print(self.wrap_text(f"{Color.OKGREEN}Game saved successfully!{Color.ENDC}"))

def load_game(self, filename="savegame.json"):
"""Load the game state from a JSON file."""
try:
with open(filename, "r") as file:
game_state = json.load(file)
self.player = Player.from_dict(game_state["player"])
self.locations = {name: Location.from_dict(loc) for name, loc in game_state["locations"].items()}
self.allobjects = {name: Object.from_dict(obj) for name, obj in game_state["objects"].items()}
self.current_location = self.locations[game_state["current_location"]]

# Ensure other_side attribute is correctly set for ObjectDoor objects
for obj in self.allobjects.values():
if isinstance(obj, ObjectDoor):
obj.other_side = self.allobjects.get(obj.other_side)

print(self.wrap_text(f"{Color.OKGREEN}Game loaded successfully!{Color.ENDC}"))
self.do_short_look("")

except (FileNotFoundError, json.JSONDecodeError):
print(self.wrap_text(f"{Color.FAIL}Failed to load the game. Save file may not exist or be corrupted.{Color.ENDC}"))
Вероятно, вам придется просмотреть код на https://github.com/bjmcgill/Quest-of-the-Mysteries, чтобы увидеть код более подробно. Я загрузил самые последние изменения в главную ветку. По какой-то причине мне не удалось удалить более раннюю основную ветку.
Чтобы воспроизвести ошибку: возьмите ключ, пройдите дважды на юг, разблокируйте и откройте входную_дверь_усадьбу. иди вход_дверь_манор. сохранять. нагрузка. попробуйте разблокировать exit_backdoor_manor, и он подумает, что это базовый класс Object.
Думаю, вам, вероятно, придется скачать код и запустить его шаг за шагом, как это сделал я. Но я просто не смог найти, где ошибка.
Думаю, я допустил ошибку, пытаясь использовать методы ООП в своем коде. Было бы намного проще, если бы я сохранил свои структуры данных в виде словарей, а не классов.
Пожалуйста, скажите мне, что вы думаете о моем коде и о том, как его можно улучшить. Я использовал copilot для многих функций, но обнаружил, что он допускает ошибки, похожие на человеческие, поэтому мне пришлось отлаживать его более или менее вручную.
Спасибо
P.S. Если никто не обнаружит, где я ошибся, я перепишу код, используя словари, а не классы

Подробнее здесь: https://stackoverflow.com/questions/793 ... -adventure
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»