我正在尝试使用java将棋盘游戏变成多人游戏,但我对如何实现我想要的东西有一些疑问。
在游戏中,有一个包含生物,建筑物和魔法的包。每个玩家从这个包中抽出来获得他们的游戏棋子。然后他们要么将这些碎片放在他们自己拥有的游戏板上的瓷砖上,要么他们抓住这些碎片并在以后播放它们。瓷砖可以容纳生物,魔法,建筑物,堡垒。
现在我有一个包含所有生物的ArrayList,每个tile都有一个可以容纳生物的ArrayList。
看起来像ArrayList不是我想要使用的,因为我必须让ArrayList属于Object类型(这很糟糕)。关于如何设计程序的任何想法,所以我不必转换为Object?我不确定我是否需要一个包装类,或者只需要多个数组列表,但令人困惑的是当玩家从包含许多不同内容的包中绘制时。我应该能够轻松地区分电路板周围的情况。
有什么建议吗?
答案 0 :(得分:10)
生物,建筑物和魔法可以实现相同的界面还是扩展同一个类?然后你可以有一个包含该接口或类的ArrayList。或者,只需要一个包含三个ArrayLists的数据结构,并编写可在它们之间进行公平选择的代码。
答案 1 :(得分:2)
我建议每个对象实现一个接口:
interface Bagable {
public String getType();
}
然后每个对象都可以这种方式完成:
class Creature implements Bagable {
public String getType() {
return "Creature";
}
// Normal Creature Class methods...
}
class Building implements Bagable {
public String getType() {
return "Buidling";
}
// Normal Building Class methods...
}
class Magic implements Bagable {
public String getType() {
return "Magic";
}
// Normal Magic Class methods...
}
public static void main(String args[]) {
ArrayList<Bagable> bag = new ArrayList<Bagable>();
bag.add(new Creature());
bag.add(new Building());
bag.add(new Magic());
for (int i = 0; i < bag.size(); i++ ) {
System.out.println(bag.get(i).getType());
}
}
或者您可以将类型作为内置值
int ITEM_TYPE_MAGIC = 0;
int ITEM_TYPE_CREATURE = 1;
int ITEM_TYPE_BUILDING = 2;
并根据这些内置值检查它们
答案 2 :(得分:1)
一种解决方案是创建一个界面,例如BagItem
(可以定义包中的项目预期要做的任何常见行为),并拥有生物,建筑,魔法等等。 ,实现这个接口。这意味着您可以拥有ArrayList<BagItem>
(或其他集合)。
在我看来,对此的真正好处是可以在界面级别定义常见行为,而不仅仅是能够将随机内容填充到包中。如果将物品放入给定的包/收藏品之间没有任何共同的功能,那么如果可以选择,可以考虑让一个以上的包(或者包里的“口袋”?)。