gpt4 book ai didi

java - 为游戏设计元素库存系统并遇到问题

转载 作者:行者123 更新时间:2023-12-02 06:42:36 25 4
gpt4 key购买 nike

我一直在开发一个小型库存系统,只是为了练习我的面向对象编程。我在 Netbeans 中使用 Java 7。

玩家将拥有一个库存(基本项目类的 ArrayList),创建的所有项目都将是该基本项目类的子项。

任何项目都不应属于 BaseItem 类型,它们都会从中扩展,所以据我了解,BaseItem 类应该是抽象的?

public abstract class BaseItem {
protected GoldValue itemValue;
protected String itemName;

//accessors and mutators down here
}

子项类型也将具有不同的属性,我将其实现为接口(interface),例如 Stackable、Consumable 等。

界面看起来像这样

public interface Stackable {   

public void stack (StackableItem bi1);

}

正如您所看到的,我在这里引用了 StackableItem,它是 BaseItem 的子项之一,它也是抽象的,并且将构建特定的项目。

public abstract class StackableItem extends BaseItem implements Stackable{

protected int quantity;
protected int maxStacks;

@Override
public void stack (StackableItem si)
{
if(this.getQuantity() + si.getQuantity() < maxStacks){
this.setQuantity(this.getQuantity()+si.getQuantity());
si.setQuantity(0);
}
else if(this.getQuantity() + si.getQuantity() > maxStacks){
int diff = maxStacks - this.getQuantity();
this.setQuantity(this.getQuantity() + diff);
si.setQuantity(si.getQuantity() - diff);
}
}
}

这是特定项目的示例:

public class StackableItemExample extends StackableItem{

public StackableItemExample ()throws GoldException
{
this(new GoldValue(0,0,0), "unnamed", 1);
}
public StackableItemExample(GoldValue gv, String name, int quan) throws GoldException
{
this.itemValue = gv;
this.itemName = name;
this.quantity = quan;
this.maxStacks = 10;
this.itemValue.setGoldValue(gv.getGold()*quan, gv.getSilver()*quan, gv.getCopper()*quan);
}


}

我的 InventoryBaseItem 对象的 ArrayList,允许将 StackableItemExample 对象插入到没问题。问题是,我的库存系统不能说 BaseItem.stack() 因为父级不知道此方法。

我想制作一个非常容易扩展的项目系统,通过实现和扩展预先创建的类和接口(interface),可以极其简单地创建新项目,但这妨碍了我。

最佳答案

任何项目都不应属于 BaseItem 类型,它们都会从中扩展,所以据我了解,BaseItem 类应该是抽象的?

我觉得不错

<小时/>

如果你想让BaseItem.stack()工作,你至少可以做两件事:

  • stack() 移至您的基类中,并为其指定不执行任何操作的默认实现。然后在您的 StackableItem 类中覆盖它,或者
  • 使用 instanceof 查看 BaseItem 是否是 StackableItem,然后将其转换为 StackableItem 并从那里开始。

第二种方法如下:

BaseItem item = YourList.get(i);
if(item instanceof StackableItem){
StackableItem stackable = (StackableItem)item;
stackable.stack() /* Now works without issue */
}

关于java - 为游戏设计元素库存系统并遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18990154/

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