Все вопросы, которые я недавно задавал о Python, были для этого проекта. Я понял, что причина, по которой я задаю так много вопросов, может быть не в том, что я новичок в Python (но я немного знаю PHP), и, вероятно, не потому, что у Python есть свойственный недостаток.
Таким образом, я сейчас скажу, что это за проект и какова моя текущая идея, и вы можете либо сказать мне, что я все делаю неправильно, что есть некоторые вещи, которые мне нужно изучить, или что Python просто не подходит для решения с этим типом проекта и языком XYZ будет лучше в этом случае, или даже если есть какой-то проект с открытым исходным кодом, в который я мог бы захотеть принять участие.
Проект
Я запускаю бесплатную пошаговую стратегическую игру (подумайте о режиме кампании из серии полных войн, но с еще большей сложностью и глубиной) и создаю для нее боевой симулятор (опять же, думаю, что тотальная война - это идея того, как она будет работать) , Я ни в коем случае не заблуждаюсь настолько, чтобы думать, что когда-нибудь сделаю что-то столь же хорошее, как только игры Total war, но я думаю, что смогу автоматизировать процесс, который я сейчас выполняю вручную.
Что это будет делать
Он должен будет учитывать широкий диапазон переменных для юнитов, оборудования, обучения, погоды, местности и т. Д. И т. Д. Я знаю, что это большая задача, и я планирую делать это по частям в свободное время. У меня нулевой бюджет, но это хобби, в которое я готов потратить время (и уже успел).
Мой нынешний камень преткновения
В PHP все может получить доступ ко всему остальному, «неправильно», хотя некоторые могут подумать, что это действительно очень удобно для этого. Если у меня есть массив оборудования для использования юнитами, я могу получить этот массив из любой точки мира. В Python мне приходится переделывать этот массив каждый раз, когда я импортирую соответствующий файл данных, и это кажется довольно глупым решением для языка, который по моему опыту хорошо продуман. Я включил систему регистрации вызовов функций и создания классов (потому что я знаю из очень простой версии этого, которую я сделал в PHP однажды, что это очень поможет в дальнейшем) и способ, которым я продолжал данные в одном месте должны передать каждый из моих классов по одному экземпляру в мой список журналов, пахнет для меня как хак, но это единственный способ, которым я заставил его работать.
Таким образом, я пришел к выводу, что что-то упустил и был бы очень признателен за понимание каждого, кто готов это дать. Спасибо.
Примеры кода
Это создает список образований, так что пока есть только одно значение (помимо имени), но я ожидаю добавить больше, поэтому они представляют собой список классов, а не просто стандартный список. Это найдено в data.py
formations = []
formationsHash = []
def createFormations(logger):
"""This creates all the formations that will be used"""
# Standard close quarter formation, maximum number of people per square metre
formationsHash.append('Tight')
formations.append(Formation(logger, 'Tight', tightness = 1))
# Standard ranged combat formation, good people per square metre but not too cramped
formationsHash.append('Loose')
formations.append(Formation(logger, 'Loose', tightness = 0.5))
# Standard skirmishing formation, very good for moving around terrain and avoiding missile fire
formationsHash.append('Skirmish')
formations.append(Formation(logger, 'Skirmish', tightness = 0.1))
# Very unflexible but good for charges
formationsHash.append('Arrowhead')
formations.append(Formation(logger, 'Arrowhead', tightness = 1))
def getFormation(searchFor):
"""Returns the fomation object with this name"""
indexValue = formationsHash.index(searchFor)
return formations[indexValue]
У меня нет примера кода, когда мне нужно было бы получить к нему доступ, потому что я не успел сделать это, но я ожидаю, что код будет выглядеть примерно так:
Python
tempFormation = data.getFormation(unit.formationType)
tempTerrain = data.getTerrain(unit.currentTerrain)
unit.attackDamage = unit.attackDamage * tempTerrain.tighnessBonus(tempFormation.tightness)
Блок содержит целое число, которое ссылается на индекс / ключ соответствующей местности, формации и еще много чего в основном списке. Временные переменные используются для того, чтобы сделать третью строку короче, но в долгосрочной перспективе, возможно, возникнут проблемы, если я забуду получить такую, и она использует значение, которое было ранее, а затем неверно (вот где регистрация полезна).
PHP
$unit->attackDamage *= $terrain[$unit->currentTerrain]->tighnessBonus($unit->currentTerrain)
Класс юнитов содержит индекс (вероятно, строку) соответствующей местности, на которой он находится, и формацию, в которой он находится.
Может быть, это покажет некоторые серьезные недостатки в моем понимании Python (6 месяцев против 3 лет PHP).