Самый простой вариант: изначально карту заполняем строкой, в ней условно разными символами обозначаем разные объекты. Например, пусть точка - это пустое место (можно пробел, но пробелы сложнее считать), !
- дерево, #
- река. Потом разбиваем текст на отдельные строки, получаем список.
game_map = """
...#......
...#......
...##.....
....##....
.....#####
..........
..!!!.....
!!!!!.....
!!!!!.....
!!!!!!....
""".strip().splitlines()
Проверка:
coords = (0, 0)
current_area = game_map[coords[0]][coords[1]]
if current_area == ".":
print("Вы в поле")
elif current_area == "!":
print("Вы в лесу")
elif current_area == "#":
print("Вы возле реки")
Если нужна какая-то более сложная логика, и объекты карты должны быть настоящими объектами, а не просто символами, то саму карту (например, в файле) можно хранить точно так же, но при старте превращать каждый символ в настоящий объект, проверять текущую местность уже проверять через isinstance
:
game_map = """
...#......
...#......
...##.....
....##....
.....#####
..........
..!!!.....
!!!!!.....
!!!!!.....
!!!!!!....
""".strip().splitlines()
class Field:
...
class River:
...
class Forest:
...
def convert(c):
if c == ".":
return Field()
elif c == "#":
return River()
elif c == "!":
return Forest()
object_map = [
[convert(item) for item in row]
for row in game_map
]
coords = (0, 0)
current_area = object_map[coords[0]][coords[1]]
if isinstance(current_area, Field):
print("Вы в поле")
elif isinstance(current_area, Forest):
print("Вы в лесу")
elif isinstance(current_area, River):
print("Вы возле реки")
По поводу отдельного модуля для хранения карты: если у вас карта не гигантская (не 10 на 10, а допустим 100к на 100к), то не вижу особого смысла заморачиваться, достаточно просто списка.
Если гигантская - то возможно придется уплотняться, например хранить каждую ячейку карты в одном байте.
Если гигантская еще и пустая в основном - можно использовать какие-нибудь изощренные структуры данных, типа деревьев квадрантов (quadtree см. Дерево квадрантов), чтобы не хранить пустоту, а хранить только те куски карты, где что-то есть. Например такое имеет смысл для игры "Жизнь" на очень больших полях, чтобы не обсчитывать пустые пространства.