Чтобы попрактиковаться в объектном программировании, я решил написать небольшую игру cRPG и столкнулся с проблемой оптимизации движения.
Создана область, в которой вы можете перемещаться между комнатами, например, из комнаты 3 вы можете перейти только в комнату 2, 4, 6, 8 или из комнаты 10 только в комнату 9.
То, как я это сделал, работает и, возможно, подходит для нескольких комнат, но если я захочу расширить его в будущем, это будет просто уродливо и долго:
self.territory.region1()
path = int(input("Which path you want to pick? "))
region = (2) # Numbers of regions you are able to go from current one
while path != 0:
if region == 1:
self.territory.region1()
path = int(input("Which path you want to pick? "))
if path == 1:
region = 2
(...)
elif region == 3:
self.territory.region3()
path = int(input("Which path you want to pick? "))
if path == 1:
region = 8
elif path == 2:
region = 4
elif path == 3:
region = 6
elif path == 4:
region = 2
(...)
elif region == 9:
self.territory.region9()
path = int(input("Which path you want to pick? "))
if path == 1:
region = 10
elif path == 4:
region = 8
elif region == 10:
self.territory.region10()
path = int(input("Which path you want to pick? "))
if path == 4:
region = 9
Есть ли простой способ сделать его короче и лучше настроить для добавления регионов?
Вы можете использовать dict
, чтобы сделать это более расширяемым. Простая иллюстрация того, как вы можете использовать это:
regions = {
1: {
1: 2,
},
2: {
1: 8,
2: 4,
3: 6,
4: 2,
},
# ...
9: {
1: 10,
4: 8,
},
# ...
}
region = 1
while True:
print(f"You're in region {region}")
path = int(input("What path? "))
region = regions[region][path]
это именно то решение, которое я искал, спасибо :)
Рад, что это помогло! Вы можете принять решение, чтобы отметить этот вопрос как решенный (и дать мне милую, милую репутацию;)).
Решение принято :) и пытался "поставить вам палец вверх" еще раньше, но для этого нужно 15 повторений
При этом не обрабатывается вызов self.territory.region#()
, но это можно исправить, избавившись от нумерованных методов в пользу передачи номера региона в качестве аргумента простому методу с именем region()
, например. self.territory.region(region)
.
Используйте json/dict для настройки вашего региона и пути, а также используйте функцию для его анализа и обработки. Кроме того, нет понятия о других функциях, которые вы вызываете