Java游戏逻辑,检查对象是否位于可能的位置之一

时间:2013-08-13 12:47:27

标签: java algorithm logic

我正在开发一个2D java游戏,其中使用必须将某些对象(例如盒子,容器等)放置在适当的位置。

  • 每个对象,得到目的地[X,Y],玩家应放置它们。

但问题是,当存在多个相同类型的对象时,应该由玩家决定他想要放置它的位置(而不是猜测)

现在我想知道如何创建正确的逻辑来处理这个问题,我正在从XML文件加载所有级别的数据,我的想法是:

  • 从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;
    }
}

2 个答案:

答案 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,并在将来管理它。