我正在开发视频游戏,我希望它是高度可修改的。目前,我的所有游戏逻辑都是用Python定义的,我的引擎逻辑是用C ++定义的,我的数据是用XML定义的。我想向您解释如何在我的游戏中定义一个实体并听取您的想法;例如,它是否过于冗长?
首先,一些背景知识:
定义属性
我会逐一讨论这件事。首先,我将解释如何定义属性。在Python中,Attribute可能看起来像这样:
class Life(Attribute):
def __init__(self):
# Default values
self.health = 100
self.toxicity = 0
非常基本。现在,在XML文件中,可以为我们定义的每个实体赋予Attribute中的每个字段不同的值:
<Attribute>
<Name>life</Name>
<Class>hero.attributes.Life</Class>
<Field>
<Name>health</Name>
<Value>100</Value>
</Field>
<Field>
<Name>toxicity</Name>
<Value>78</Value>
</Field>
</Attribute>
Name
- 属性的标识符(有点像Python中的对象)。在我们定义行为时会很有用。Class
- 此属性的Python类。Field
- 属性的字段。Field.Name
- 必须与Python字段相同('self.health'→'health')。Field.Value
- 此字段的值。定义行为
正如我之前所说,行为与实体的属性相互作用。例如,下面的 Damage 行为需要了解生活属性。
class Damage(Behavior):
def __init__(self):
self.life = None
用于设置行为的XML代码类似于属性,但不相同:
<Behavior>
<Class>hero.behaviors.Damage</Class>
<Attribute>
<Field>life</Field>
<Link>life</Link>
</Attribute>
</Behavior>
Class
- 行为的Python类; Attribute.Field
- 要放置对属性的引用的行为字段Attribute.Link
- 要链接的属性。必须是上面定义的属性的 Name 标记中的值之一。答案 0 :(得分:1)
您是否考虑使用json而不是XML?它更简洁,更易读,并且可以转换为现成的Python数据结构:
例如:
import json
x='''{"Field": [{"Name": "health", "Value": 100}, {"Name": "toxicity", "Value": 78}],
"Name": "life",
"Class": "hero.attributes.Life"}'''
attribute=json.loads(x)
# {u'Class': u'hero.attributes.Life',
# u'Field': [{u'Name': u'health', u'Value': 100},
# {u'Name': u'toxicity', u'Value': 78}],
# u'Name': u'life'}
将dict转换回json,
attr=json.dumps(attribute)