Я довольно новичок в кодировании в python (3) как хобби, но с удовольствием играю с некоторыми игровыми механиками, не беспокоясь о графическом интерфейсе. В настоящее время я работаю над основанной на цивилизации текстовой игрой, основы которой лежат в старом документе excel. Это довольно сосредоточено на математике и логике, которые, как я думаю, сделаны для довольно легкого, но всестороннего набора механиков.Текстовая механика в Python: класс, словарь или список?
В любом случае, игра позволяет исследовать технологии, создавать здания, выращивать граждан, собирать культуру и т. Д. Одна вещь, с которой я борюсь, - это военная система.
У меня есть несколько разных единиц для воспроизведения игроком. Скажем, каждая единица имеет имя, силу и устойчивость (например, «Арчер», «10», «80»). Войны основаны на общей силе игрока (я могу рассчитать это). После каждой войны сила подразделения уменьшается благодаря его устойчивости, т.е. этот лучник уменьшился бы до 80% от его первоначальной силы после войны до силы 8.
Однако у меня возникли проблемы с разработкой того, как пользователь может создавать единицы таким образом, чтобы этот механик. Первоначально я использовал класс Unit() (с разными единицами, например archer, spearman as objects) с аргументом «количество» наряду с именем/силой/сопротивляемостью для количества построенных единиц, но каждый раз, когда я запускал функцию для вычисления эффекта я понял, что влияю не только на произведенные в настоящее время единицы, но и на все будущие версии этого устройства. Я бегу что-то вроде следующего:
class Unit():
def __init__(self, name, quantity, strength, resilience)
self.name = name
self.quantity = quantity
self.strength = strength
self.resilience = resilience
archer = Unit('archer', 0, 10, 80)
и т.д ...
Каждый раз, когда пользователь построили блок, «количество» будет увеличиваться. Однако я понял, что, вероятно, этот метод кодирования, вероятно, ограничивает меня. Чтение других потоков говорит мне, что я должен стремиться не хранить данные объекта таким образом, не так ли?
Я играл и исследовал, и, похоже, я не могу найти решение (что, я уверен, есть). У меня возникли проблемы с поиском правильного способа хранения основных данных каждого элемента (имя, сила, устойчивость), позволяя пользователю создавать несколько уникальных копий каждого устройства. Каждое подразделение должно быть классом? Подкласс? Он должен храниться в словаре? Список?
Я извиняюсь за недостаток кода в этом сообщении, но у меня точно нет ошибочного кода - мне просто не хватает знаний логики и питона, чтобы найти правильные системы для правильной работы. Играл со словарями, списками, циклами, унаследованными классами, но я просто не могу понять это правильно.
Как создать нескольких лучников, каждый из которых наносит урон, не влияя на будущих лучников, которые могут быть произведены?
Спасибо, если кто-нибудь может что-то предложить. Помимо этого, у меня много интересного кодирования на питоне!
Вы должны показать больше кода. Определение силы и т. Д., Как вы это делали, означает, что они будут применяться только к этой конкретной единице и * не * ко всем единицам этого типа; обычная ошибка, которую люди делают, определяет эти значения на уровне класса, но вы этого не сделали. –
Спасибо за отзыв. Я не был уверен, какой код действительно будет иметь значение, потому что это не так, у меня есть ошибочный код, просто я играю с логикой питона и не могу понять правильную структуру. Ответ Rawing ниже близок, у меня есть дополнительные проблемы, создающие уникальные идентификаторы для объектов, когда пользователь решает их создать. – Jammydude44