我最近问过的关于Python的所有问题都是针对这个项目的.我已经意识到我问这么多问题的原因可能不是因为我对Python这么新(但我知道很多PHP)并且可能不是因为Python有一些固有的缺陷.
因此,我现在将说明项目是什么以及我目前的想法是什么,你可以告诉我,我做错了,我需要学习一些东西,或者Python根本不适合处理这种类型在这种情况下,项目和语言XYZ会更好,甚至可能还有一些我想参与的开源项目.
该项目
我运行了一个基于免费转弯的策略游戏(从整个战争系列中考虑战役模式,但具有更多的复杂性和深度)并且正在为它创建一个战斗模拟器(再次,认为全面战争是一个如何它的想法工作).我完全不会因为认为我会做出与单纯的战争游戏一样好的东西,但我确实认为我可以自动化我目前手工制作的流程.
它将做什么
它必须考虑到单位,设备,训练,天气,地形等的大量变量等等.我知道这是一项艰巨的任务,我打算在空闲时间一次做一件事.我没有预算,但是我已经准备好把时间投入(并且已经)了.
我当前的绊脚石
在PHP中,一切都可以访问其他所有内容,"错误的"虽然有些人可能会认为这对它来说非常方便.如果我有一系列设备供单位使用,我可以从任何地方获取该阵列.使用Python我每次导入相关数据文件时都必须重新制作该数组,对于一种经验深思熟虑的语言来说,这似乎是一个非常愚蠢的解决方案.我已经建立了一个记录函数调用和类创建的系统(因为我从PHP的一个非常基本的版本知道,我曾经在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)
该单元包含一个整数,该整数链接到主列表中相关地形,形成和诸如此类的索引/键.临时变量用于使第3行更短但是从长远来看可能会导致问题,如果我忘记得到一个并且它使用之前的值然后是不正确的(这是日志记录派上用场的地方).
PHP $unit->attackDamage *= $terrain[$unit->currentTerrain]->tighnessBonus($unit->currentTerrain)
单元类包含它所在的相关地形的索引(可能是一个字符串)以及它所在的地层.
也许这会在我对Python的理解中显示出一些巨大的缺陷(6个月与3年的PHP相比).
使用Python,每次导入相关数据文件时都必须重新创建该数组
你在这里错过了Python语义的微妙之处.第二次导入模块时,不会重新执行该模块中的代码.该名称位于导入的所有模块的列表中,并返回相同的模块.因此,第二次导入模块时,您将获得对同一列表的引用(在Python中,不要说数组,比如列表).
您可能需要发布特定的代码示例以获得更多帮助,似乎有一些Python误解混入其中,一旦这些被清除,您将有一个更简单的时间.