我正在开发一个2D java游戏,其中使用必须将某些对象(例如盒子,容器等)放置在适当的位置。
但问题是,当存在多个相同类型的对象时,应该由玩家决定他想要放置它的位置(而不是猜测)
现在我想知道如何创建正确的逻辑来处理这个问题,我正在从XML文件加载所有级别的数据,我的想法是:
虽然我仍然不确定,但有些帮助会很有用。
编辑:根据@EZSlaver的回答,我来到了这个:
private HashMap<ObjectType, ArrayList<GameObject>> map = new HashMap<ObjectType, ArrayList<GameObject>>();
public void addObjekt(GameObject objekt)
{
if (map.containsKey(objekt.getType()))
{
map.get(ObjectType.TYPE_BOX).add(objekt);
}
else
{
ArrayList<GameObject> arrayOfObjects = new ArrayList<GameObject>();
arrayOfObjects.add(objekt);
map.put(objekt.getType(), arrayOfObjects);
}
}
public static void main(String[] args)
{
new Test();
}
private enum ObjectType
{
TYPE_BOX,
TYPE_CONTAINER
}
/**
* Subclass of GameObject, box (name of game object) representation
*/
public class Box extends GameObject
{
public Box(float destX, float destY)
{
super(ObjectType.TYPE_BOX, destX, destY);
}
}
/**
* Subclass of GameObject, Container (name of game object) representation
*/
public class Container extends GameObject
{
public Container(float destX, float destY)
{
super(ObjectType.TYPE_CONTAINER, destX, destY);
}
}
/**
* Base type class, any object representation
*/
public class GameObject
{
private ObjectType Type;
private float destX;
private float destY;
public GameObject(ObjectType type, float destX, float destY)
{
super();
Type = type;
this.destX = destX;
this.destY = destY;
}
public ObjectType getType()
{
return Type;
}
public float getDestX()
{
return destX;
}
public float getDestY()
{
return destY;
}
}
答案 0 :(得分:1)
您可能希望从相同类型的所有对象的相同“可能位置”列表开始,然后当对象放置在[X,Y]时 - 从列表中删除[X,Y]剩下的“未放置”物品。
答案 1 :(得分:1)
我建议使用以下数据结构(我来自C#,因此请注意语法更改):
public enum GameObjectType { Vehicle, Brick, ... };
public class GameObject
{
GameObjectType Type;
string Name;
long ID; // I don't know if you need one
Point Location;
...
}
public GameObject[,] Board;
Dictionary<GameObjectType, List<GameObject>> GameObjectsByType; // A mapping of all game objects by their type.
您可以将Board
的类型替换为代表电路板中常规插槽的其他内容,并包含对插槽上对象的引用。
从这里开始,在加载棋盘时,将所有项目添加到地图对象GameObjectsByType
,并在将来管理它。