- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一款 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/
如何修复 Hero.h 中的错误? GCC C++ compiler flags : -c -fmessage-length=0 -std=gnu++11 ; 我将 g++ 更新到 4.8.1 /
使用 conda 在 Snakemake 包装器中指定包的最佳 environment.yml 做法是什么?我了解 channel 应该是: channels: - conda-forge
这里所有与模式识别相关的帖子都涉及面部、手部、字符识别。我想知道,是否有人成功地使用 OpenCV 识别显微镜图片上的细胞。我目前能够做的是使用阈值和形状检测(更改阈值、计数形状、丢弃具有无效大小的形
我是一名优秀的程序员,十分优秀!