gpt4 book ai didi

java - 枚举是 Roguelike 游戏中生成生物的正确工具吗?

转载 作者:行者123 更新时间:2023-12-01 21:55:51 25 4
gpt4 key购买 nike

我正在开发一款 Roguelike 游戏,作为编程/数据库练习和爱好(因为我想拥有自己的“矮人堡垒”项目来随心所欲地称霸)。当我试图编写一个足够强大的系统来生成游戏中的各种生物时,我很早就陷入了困境。我一开始很简单;假设我希望游戏在某个地方吐出一只狼(FXML,所以 Controller ):

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;

}

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

enum BodyPattern {

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

LinkedList<BodyPart> bodyPartsList;

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

这就是我真正迷失的地方(我实际上没有定义任何这些 body 部位,因为我不确定如何继续)。这是迄今为止我对 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;
}
}

组织层是构成 body 部位的物质,并分别为每个方向指定,例如,对头部前部的攻击会损害面部,而来自后部的攻击会损害颈部/上半身首先是脊椎。我希望它们的厚度仅以相对方式定义,在生成时乘以生物的大小以生成实际大小,但正如我所说,我有点迷失了,那么我该去哪里呢?我应该将 BodyPart 重新分配为枚举吗?我应该完全创建另一个枚举吗?我是否完全偏离了轨道,我应该使用一些不同的工具吗?

最佳答案

Now, I'd like to be able to spawn these ordinary animals by only specifying their species, so that's what enumerations are for, no?

恐怕不是,不是。

枚举的最佳用例是枚举一组常量对象,并且所有对象的标识在编译时都是已知的。枚举最理想的数据示例是扑克牌或太阳系的行星。扑克牌的花色和数字是固定的、恒定的并且是预先已知的。同样,太阳系中的行星也不会(经常)发生变化。

由于您希望能够根据需要动态创建对象,因此您需要使用带有构造函数的普通类来在程序需要时创建新对象(例如动物)。很难想象一个游戏能够提前知道它需要的所有动物(及其所有属性)。

关于java - 枚举是 Roguelike 游戏中生成生物的正确工具吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34298362/

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