【发布时间】:2022-01-20 15:06:44
【问题描述】:
我正在创建一个简单的 RPG 主机游戏,我正处于创建库存和战利品系统的阶段。在程序中,class Player和class Monster都有arrayList Backpack属性,当程序创建怪物类的对象时,怪物背包里的物品也会自动创建,杀死怪物后可以拿走到你的背包,这就是我的问题开始的地方,如何优雅地防止背包中的物品重复,@ 987654324@,现在这个功能通过一个一个地检查每个项目的嵌套循环来查看它是否已经在背包中如果不是再次添加它,它会增加它的数量属性,如果我的背包中没有这个项目,它只是添加到列表中,解决方案有效,但绝对不是正确的解决方案,因为许多项目这种检查机制会增长很多,如果有人有任何宝贵的提示,我将不胜感激。
我还有第二个想法是创建一个boolean Is_it_in_Backpack 变量,并以某种方式将其与战利品收集机制联系起来
下面是一些代码示例
public class Player {
public static ArrayList<Item> Backpack = new ArrayList<>()
}
还有Skieleton类:
public class Skieleton extends Monsters {
public static ArrayList<Item> Backpack;
public Skieleton() {
Backpack = new ArrayList<>();
Backpack.add(new Weapon("Rusty sword", "Just a rusty sword", 3, 2 ));
Backpack.add(new Armor("Leather Armor", "Old leather armor", 6, 3));
}
类项目:
public class Item {
public String ItemName;
public String Description;
public int ItemSize;
public int ItemWeight;
public int Amount;
public Item(String ItemName, String Description, int ItemSize, int ItemWeight)
{
this.ItemName = ItemName;
this.Description = Description;
this.ItemSize = ItemSize;
this.ItemWeight = ItemWeight;
}
public Item() {
}
}
【问题讨论】:
-
嗯,你能给我一些简单的例子吗?
-
我收回我说的话。 Set 不会帮助您合并项目。它将取代它们
-
正如其中一个答案所说,您可以使用地图。最好把amount从Item中取出,只保留在地图中
Map<Item, Integer> -
@user7 怪物和玩家有关系吗?怪物算玩家吗?由于怪物和玩家都携带背包并且具有相似的属性,因此您可能希望将两者扩展为一个通用类。
标签: java arrays duplicates