首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >枚举是在roguelike游戏中生成生物的正确工具吗?

枚举是在roguelike游戏中生成生物的正确工具吗?
EN

Stack Overflow用户
提问于 2015-12-15 20:03:36
回答 1查看 127关注 0票数 0

我正在开发一个roguelike游戏,作为一个编程/数据库的选秀和一个爱好(因为我想有我自己的“矮人堡垒”项目,以主宰我喜欢)。我很早就陷入困境,当时我正试图编写一个足够强大的系统来生成游戏中的各种生物。我一开始很简单,我想让游戏在某个地方吐出一只狼(FXML,所以控制器):

代码语言:javascript
复制
public class Controller {
    Creature pooch = new Creature(Species.WOLF);
}

现在,我想通过指定它们的种类来繁衍这些普通的动物,所以这就是枚举的意义,不是吗?我想明确指出,狼只吃肉,它们可能的体型(毕竟它们不是克隆人,还有什么地方可以指定大小?),以及它们的体型:

代码语言:javascript
复制
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;

    }

我想对狗、狗等重复使用相同的模式,所以我只传递身体类型,在另一个枚举中定义。

代码语言:javascript
复制
enum BodyPattern {

    CANINE(furryUpperBody, furryLowerBody, canineHead, canineMaw, canineLegs, furryTail);

    LinkedList<BodyPart> bodyPartsList;

    BodyPattern(BodyPart... args) {
        for (BodyPart  part : args) {
            bodyPartsList.add(part);
        }
    }
}

这就是我真正迷失方向的地方(我并没有真正定义这些身体的任何部分,因为我不知道该如何进行)。到目前为止,我对BodyPart的了解如下:

代码语言:javascript
复制
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吗?我应该完全再做一次吗?我是否完全偏离了轨道,是否应该使用不同的工具?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-15 22:55:39

现在,我想通过指定它们的种类来繁衍这些普通的动物,所以这就是枚举的意义,不是吗?

恐怕不行,不。

枚举的最佳用例是枚举一组对象,这些对象是常量,所有这些对象的标识在编译时都是已知的。一个数据的例子,其中枚举是理想的是扑克牌或太阳系行星。扑克牌套装和号码是固定的,不变的,而且事先就知道了。同样,太阳系中的行星也不会(经常)改变。

因为您希望能够动态地创建需要的对象,所以您需要在程序需要时使用带有构造函数的普通类来创建新的对象(例如动物)。很难想象会有一个游戏预先知道它所需要的所有动物(以及它们的所有属性)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34298362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档