我正在尝试存储不同敌人的列表。每个敌人都有一个起源,只能在其原籍地产卵。每个敌人也有困难,应该与同样难度的敌人一起存放。
我把它想象成像这样的敌人的静态3D阵列:
Enemy[mountain][2][5] = new Enemy("troll")
字段是(从左到右)位置,难度,索引。
玩家输入的每个位置都会从此静态数组中填充一个敌人的ArrayList。
在这种情况下是否有更高效的数据结构?
(此列表将是硬编码的,在程序过程中不应更改)
编辑 -
我希望优化访问时间。这个游戏将生成许多位置,每个位置都需要根据其来源和难度从列表中随机抽取敌人。
根据要求,我会更多地考虑这个程序的用例。一旦我有一个适当的解决方案,我会更新。 (感谢)
答案 0 :(得分:4)
概念上明智不是一个好主意。
此时你真的不担心性能。您担心创建一个有用的,有用的对象模型,它允许您编写优雅,易于阅读和易于增强的代码。
使用3D阵列实现了这些目标的 none 。
换句话说:你退后一步;并仔细思考需要访问你的敌人对象的“用例”。从那里来,你决定是否应该使用不同的地图;或不同的集合,...而不是使用3D作为中央“存储点”。
编辑,鉴于您的评论:这里有两个方面:
除此之外:是的,在“游戏世界”中,应该有一个组件,负责跟踪游戏中的所有元素。但是:这个组件内部组织的东西更像是一个实现细节。你应该专注于首先在GameWorld上放置“有用”的方法;或者像我之前说的那样:了解你的代码访问/迭代/搜索敌人以执行游戏本身的方式。然后,您将研究支持这些“用例”的数据结构。
最后:假设这是一个学习练习 - 你仍然可以从一个3d数组开始。它会教你很多;我只是指出:你不会在更“真实世界”的应用程序中这样做;如果你选择这个选项,你很快就会遇到某些限制/障碍;只是根据你的解决方案的性质。
答案 1 :(得分:0)
我想到的是地图。位置是关键,值将是表示敌人及其位置的对象列表 - 让我们将其称为包含敌人及其位置的EnemyLocation对象(或者您可以更改Enemy以包含其位置,似乎是一个好主意,但我不知道你的代码)。所以,当玩家进入"山"你可以做一些像enemies.get(" mountain")这样的东西,然后你会找回一个敌人对象列表(或者EnemyLocation对象)