#python #python-3.x #class #dictionary #pygame
#python #python-3.x #класс #словарь #pygame
Вопрос:
Я пытаюсь выполнить поиск в файле экземпляра #, M,K, O, D и для каждого экземпляра возвращаю {позиция (кортеж), тип экземпляра (#, M,K, O, D)} в словаре. Я написал функцию для поиска координат экземпляра в файле, однако я не уверен, как добавить и обновить весь словарь с помощью этой информации. Это то, что у меня есть до сих пор:
def init_game_information(dungeon_name="game1.txt"):
self._dungeon=load_game(dungeon_name)
game_dict={}
with open("game1.txt", "r") as file:
for line in file:
for row, line in enumerate(self._dungeon):
for col, char in enumerate(line):
if WALL in line:
x=WALL
y=get_positions(self, WALL)
dict_WALL={y,x}
game_dict.update(dict_WALL)
if KEY in line:
x=KEY
y=get_positions(self, KEY)
KEY={y,x}
game_dict.update(dict_KEY)
if DOOR in line:
x=DOOR
y=get_positions(self, DOOR)
dict_DOOR={y,x}
game_dict.update(dict_DOOR)
if MOVE_INCREASE in line:
x=MOVE_INCREASE
y=get_positions(self, MOVE_INCREASE)
dict_MOVE={y,x}
game_dict.update(dict_MOVE)
def get_positions(self, entity):
""" Returns a list of tuples containing all positions of a given Entity
type.
Parameters:
entity (str): the id of an entity.
Returns:
)list<tuple<int, int>>): Returns a list of tuples representing the
positions of a given entity id.
"""
positions = []
for row, line in enumerate(self._dungeon):
for col, char in enumerate(line):
if char == entity:
positions.append((row,col))
return positions
и это пример файла игры / что должно быть возвращено:
Комментарии:
1. У вас есть классы для
Wal
,Door
, …?
Ответ №1:
Вы можете задать значение для ключа в словаре с помощью dictionary[key] = value
. Определите ключ с помощью row
и col
и свяжите его со словарем:
keys = [WALL, KEY, DOOR, MOVE_INCREASE]
game_dict = {}
with open("game1.txt", "r") as file:
for row, line in enumerate(file):
for col, char in enumerate(line):
if char in keys:
game_dict[(row, col)] = char
Если у вас есть классы для объекта ( Wall
, Key
, …), то вы можете сделать что-то вроде:
class_dict = { WALL : Wall, KEY : Key, DOOR : Door, MOVE_INCREASE: MoveIncrease}
game_dict = {}
with open("game1.txt", "r") as file:
for row, line in enumerate(file):
for col, char in enumerate(line):
if char in class_dict:
game_dict[(row, col)] = class_dict[char](char)
print(game_dict)
Комментарии:
1. Спасибо! Есть ли в любом случае возможность для функции пропустить экземпляр, в котором есть пустое пространство / ничего, и ничего не добавлять в словарь, поскольку ошибка, с которой я сталкиваюсь, — «AssertionError: None не является экземпляром <class’dict’>»
2. @kit01 я в замешательстве. Откуда вы получаете эту ошибку. В общем, вам нужно просто протестировать
if key != None:
. Но я не знаю, откуда вы получаете эту ошибку и что на самом деле является вашим ключом.