我正在开发一个roguelike游戏,作为一个编程/数据库的选秀和一个爱好(因为我想有我自己的“矮人堡垒”项目,以主宰我喜欢)。我很早就陷入困境,当时我正试图编写一个足够强大的系统来生成游戏中的各种生物。我一开始很简单,我想让游戏在某个地方吐出一只狼(FXML,所以控制器):
public class Controller {
Creature pooch = new Creature(Species.WOLF);
}现在,我想通过指定它们的种类来繁衍这些普通的动物,所以这就是枚举的意义,不是吗?我想明确指出,狼只吃肉,它们可能的体型(毕竟它们不是克隆人,还有什么地方可以指定大小?),以及它们的体型:
public enum Species {
// Canines
WOLF(Diet.CARNIVORE, 1050, 1325, 1600, CANINE.BodyPattern);
// Canine constructor
Species(Diet diet, double bodySizeMultiplierMin, double bodySizeMultiplierAvg, double bodySizeMultiplierMax,
BodyPattern bodyPattern) {
this.diet = diet;
this.bodySizeMultiplierMin = bodySizeMultiplierMin;
this.bodySizeMultiplierAvg = bodySizeMultiplierAvg;
this.bodySizeMultiplierMax = bodySizeMultiplierMax;
}我想对狗、狗等重复使用相同的模式,所以我只传递身体类型,在另一个枚举中定义。
enum BodyPattern {
CANINE(furryUpperBody, furryLowerBody, canineHead, canineMaw, canineLegs, furryTail);
LinkedList<BodyPart> bodyPartsList;
BodyPattern(BodyPart... args) {
for (BodyPart part : args) {
bodyPartsList.add(part);
}
}
}这就是我真正迷失方向的地方(我并没有真正定义这些身体的任何部分,因为我不知道该如何进行)。到目前为止,我对BodyPart的了解如下:
public class BodyPart {
public String name;
private TissueLayer[] tissueLayersUp;
private TissueLayer[] tissueLayersDown;
private TissueLayer[] tissueLayersFront;
private TissueLayer[] tissueLayersBack;
private TissueLayer[] tissueLayersLeft;
private TissueLayer[] tissueLayersRight;
public BodyPart(String name, BodyPart[] appendages, int height, int width, int length, TissueLayer[] tissueLayersUp,
TissueLayer[] tissueLayersDown, TissueLayer[] tissueLayersFront, TissueLayer[] tissueLayersBack,
TissueLayer[] tissueLayersLeft, TissueLayer[] tissueLayersRight) {
this.name = name;
this.appendages = appendages;
this.height = height;
this.width = width;
this.length = length;
this.tissueLayersUp = tissueLayersUp;
this.tissueLayersDown = tissueLayersDown;
this.tissueLayersFront = tissueLayersFront;
this.tissueLayersBack = tissueLayersBack;
this.tissueLayersLeft = tissueLayersLeft;
this.tissueLayersRight = tissueLayersRight;
}
}组织层是构成身体各部分的物质,并分别为每个方向指定,例如,对头部前部的攻击会损坏面部,而背部的攻击首先会对颈部/上脊柱造成损害。我只想用相对的术语来定义它们的厚度,把它们的大小乘以生物的大小来生成实际的尺寸,但是正如我所说的,我有点迷失了,那么我该从这里走到哪里呢?我应该把BodyPart重新分配为enum吗?我应该完全再做一次吗?我是否完全偏离了轨道,是否应该使用不同的工具?
发布于 2015-12-15 22:55:39
现在,我想通过指定它们的种类来繁衍这些普通的动物,所以这就是枚举的意义,不是吗?
恐怕不行,不。
枚举的最佳用例是枚举一组对象,这些对象是常量,所有这些对象的标识在编译时都是已知的。一个数据的例子,其中枚举是理想的是扑克牌或太阳系行星。扑克牌套装和号码是固定的,不变的,而且事先就知道了。同样,太阳系中的行星也不会(经常)改变。
因为您希望能够动态地创建需要的对象,所以您需要在程序需要时使用带有构造函数的普通类来创建新的对象(例如动物)。很难想象会有一个游戏预先知道它所需要的所有动物(以及它们的所有属性)。
https://stackoverflow.com/questions/34298362
复制相似问题