如何在OO设计中跟踪许多对象?

时间:2013-11-30 19:29:00

标签: oop

我正在努力解决有关基本面向对象设计的问题,我实际上并没有用词汇来描述。我是一名计算机系统专业的一年级学生,所以到目前为止我的软件开发教育主要集中在基础知识上。

在大型OO项目中,例如角色扮演游戏,您最终可能会遇到许多在编译时名称未知的对象。在游戏示例中,您可能有一个包含不同敌人遭遇细节的数据库文件。特定的遭遇可能让玩家面对三个妖精战士和一个巨魔狂战士。这些不同的敌人可能都是战斗类的实例,不同的创造参数指定了它们的力量和装备。

但是,在实例化这些对象时,我们给它们起了什么名字?换句话说:我使用Python,当你实例化一个对象时,你需要给它一个识别名称,以便以后引用它;但是如果变量名本身没有按字面输入到我的代码中,我如何命名?

next_combatant = load_from_file()

??? = Combatant(next_combatant)

换句话说,我应该代替什么?以上?

我目前使用的解决方案是使用列表(数组),将每个新对象附加到列表中。这样每个对象在'goblin_003'意义上都没有严格的名称,但是我可以通过使用列表的索引来引用对象,我也可以做其他很好的事情,例如计算有多少敌人等等。 / p>

我的问题是:这是如何在行业中处理的?程序员通常使用数组来保持所有对象的有序性吗?或者是否有一些巧妙的技巧允许我从文件中检索变量名称?

(我意识到这个问题的措辞很差,所以如果有人需要澄清,那就问问。)

编辑:是否有以这种方式使用馆藏的名称?

2 个答案:

答案 0 :(得分:1)

当然。收藏品很好地达到了这个目的。对于许多集合,您不需要指定存储项的标识符。但是,如果您愿意,字典是一种方法。我不太了解python,但是应该有一些集合,你可以在其中为要存储的项目指定键和值。

想象一下,你将在一场比赛中创造数百万的战士。拥有warrior_999999和warrior_1000000是没有意义的。

答案 1 :(得分:1)

这是正确的,您没有游戏中或您需要动态内容的其他软件中的所有怪物和对象的变量名称。而且你真的不需要任何变量名。

但是,存储这些对象的正确方法取决于您的需求,您想要对它们做什么以及对象的目的是什么。你可以使用Arrays,Lists,Trees以及在你的用例中有用的东西。

如果您需要在游戏/软件中识别特定的动态对象/怪物,请将标识符变量添加到您的对象中。


对象中的标识符变量只能是整数值。但是你必须保留它,以便你没有两个具有相同值的对象。

例如,如果数组中有3个怪物对象且怪物对象有int id;个变量。

  • Monster1,id = 1
  • Monster2,id = 2
  • Monster3,id = 3 ......等等。

在OpenGL中,如果使用拣选,则良好的标识符为RGBA值:

  • Monster1,id = RGBA(0,0,0,1);
  • Monster2,id = RGBA(0,0,0,2);
  • Monster256,id = RGBA(0,0,1,0);等等。

什么是正确的标识符,取决于您的需求。