gpt4 book ai didi

python - 这个实体定义模型是否太冗长了?

转载 作者:太空宇宙 更新时间:2023-11-03 19:27:55 24 4
gpt4 key购买 nike

我正在开发视频游戏,我希望它具有高度的可修改性。目前,我所有的游戏逻辑都是用 Python 定义的,我的引擎逻辑用 C++ 定义,我的数据用 XML 定义。我想向您解释一下我的游戏中实体是如何定义的,并听听您的想法;例如,它是否太冗长?

首先,一些背景知识:

  • 实体由组件组成(基于组件的实体模型)。
  • 组件可以有两种类型:属性和行为。
  • 属性只是“哑”数据。它们是健康、速度等。
  • 行为定义实体如何与其属性、世界和其他实体交互。

定义属性

我会一点一点地讨论这个问题。首先我将解释如何定义属性。在 Python 中,属性可能看起来像这样:

class Life(Attribute):
def __init__(self):
# Default values
self.health = 100
self.toxicity = 0

非常基本。现在,在 XML 文件中,可以为我们定义的每个实体赋予属性中的每个字段不同的值:

<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 — 此字段的值。

定义行为

正如我之前所说,行为与实体的属性相互作用。例如,下面的伤害行为需要了解生命属性。

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 标记中的值之一。

最佳答案

您是否考虑过使用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)

关于python - 这个实体定义模型是否太冗长了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7374995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com