Java—随机向下移动类层次结构

Java—随机向下移动类层次结构,java,hierarchy,Java,Hierarchy,我目前正在开发一个“物品投放”系统,在这个系统中,物品(及其属性)是在杀死敌人时随机生成的。我当前的系统是一个类的层次结构,Item是根超类。每个类都有所有子类通用的特定属性 理想情况下,在删除一个项目时,程序将随机选择该项目的一个属性,并相应地向下移动层次结构树。例如,流程如下所示: 类|随机选择的属性确定树中的路径: 项目|项目类型->装备|装备类型->武器|武器类型->等 示例代码: abstract class Item { private Type itemType;

我目前正在开发一个“物品投放”系统,在这个系统中,物品(及其属性)是在杀死敌人时随机生成的。我当前的系统是一个类的层次结构,Item是根超类。每个类都有所有子类通用的特定属性

理想情况下,在删除一个项目时,程序将随机选择该项目的一个属性,并相应地向下移动层次结构树。例如,流程如下所示:

类|随机选择的属性确定树中的路径:

项目|项目类型->装备|装备类型->武器|武器类型->等

示例代码:

abstract class Item 
{   
    private Type itemType;
    private String itemName;
    private int itemLevel;
    private Rarity itemRarity;
    private boolean questItem;
    private int itemPrice;

    public Item(String name)
    {
        itemType = Type.randomize();
        itemName = name;
        itemLevel = randomizeLevel(pLvl, eLvl);
        itemRarity = Rarity.randomize(bonus, pLvl, eLvl, iLvl);
        questItem = false;
        itemPrice = determinePrice();
    }
}
类型是决定层次结构中下一级别的枚举。有了这个系统,我不知道如何让程序确定下一个级别,然后继续进行

我遇到的问题是,我意识到,为了让它发挥作用,我必须从层次结构的底部开始,向上。有没有一种方法可以让我自上而下地工作,这意味着我可以从一个基本的项开始类,然后按程序向下工作(使用我创建的方法随机选择属性)


如果没有,我有没有具体的方法来实现这个系统?

您可以从enum类中获得所有枚举的列表-顺序是它们声明的顺序,因此如果您按层次结构顺序声明它们,您可以随意遍历列表。相关的oracle文档如下所示:


如果您想自上而下地工作,特别是如果子类的选择取决于构造超类时所做的选择,那么最好是组合而不是继承。因此,如果对于
Item
您具有
Type
特定信息,则可以使
Type
包含您可能需要的所有属性,包括对该(概念)层次结构下后续对象的引用


当然,在任何时候,只要您在创建对象之前知道它应该是特定的子类,您还可以从
类型
,等等中创建一个小类层次结构。否则,组合将是以您描述的方式创建项目的唯一方法。

您可以在每个类中使用一个静态方法来确定“下一个转换”(将“项目”包看作一个树)

所以

然后可以使用反射来实例化最后一个类


这可能是一个坏主意。但如果我理解你的目标,并尝试重新表述以下内容,它将“行走”一棵结构良好的类树

  • 您有一个顶级类型:Item

  • 通过添加一些属性,您拥有(或者现在创建,或者进一步创建?)Item的子类:Equipmable,然后是武器,等等

  • 从顶部(项目)随机选择一个子类(装备?是/否?如果是=>装备类型等)

我的建议是:

  • 不要打破子类的概念:父母不需要提前让孩子知道

  • 然后取一个类(第1个:item,等等),通过反射搜索子类

  • 在子项之间选择:此时必须定义如何在子项之间进行分类:任何新变量,或以前缀开头的任何变量。例如,可以定义最终静态int category_=1;(或true、false,…)

  • 然后进行迭代,从顶部开始,获取子项,获取这些静态变量和值,然后在这些子项之间随机选择,然后再次执行

特征化的另一种方法:使用接口(武器、装备等):好处是您可以应用预定义的方法(用于武器等)

更便宜:不要使用任何变量,只需使用children类的名称来选择下一个

一个好的选择方法:精确地定义您将对这些对象执行的操作


希望有帮助。

为什么你认为你必须从层次结构的底部向上工作?当然可以。问题是什么?@DavidK我遇到的问题是,决定层次结构中下一层的属性是由类本身的构造函数决定的。因此,现在,我不知道如何在层次结构中向下移动一旦确定了下一条路径。我将更新问题选择随机子类的代码可以在调用要创建的对象的构造函数之前执行。当您随机选择了一个类,然后您就可以构建它。至少有两个答案是基于此的。我知道这是如何有用的,但您能否详细说明如何使用我会在我的例子中使用它?@GBoggs调用会按层次结构顺序为您提供整个层次结构。因此,在列表中找到您的项目。要向上移动吗?从该索引向上移动列表。要向下移动吗?在列表中选择更进一步的内容。这样您就可以获得保留层次结构的随机化。那么,您是否只是暗示我有一个方法可以随机选择第一个属性(类型),然后有一个switch语句,它将相应地沿层次结构向下移动并随机选择下一个,依此类推,直到我到达底部的一个节点?然后在这一点上,我简单地创建该对象?这是一种有效的方法,还是唯一的方法?由于反射,它肯定不是最有效的方法(但是你的程序可以做一次,并缓存信息),而且这不是唯一的方法。主要的好处是类之间的独立性:当你在武器下面创建匕首或刀的那一天,就完成了!你不必维护两个平行的结构(一天,它不会连贯)。两件事。1)你所说的类之间的独立性是什么意思?2)你所说的在下面创建匕首或刀子是什么意思?假设你的应用程序使用了武器。下个月你想用一个新的子类:刀子来完善它。然后只有子类:无需做更多的事情来随机选择它。下个月:其他
// untested code

String nextClass = "Item";

// define a helper method

Class x = getClass(nextClass);

while( x.hasMore() == true )
{
    nextClass = x.getNextClass();
    x = getClass(nextClass);

} 
// reflection here on Class 'x' (whatever that is...)