0

我正在开发一个 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;
    }
}
4

2 回答 2

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代表板上通用插槽的其他类型,并包含对插槽上对象的引用。

从这里开始,在加载板后,将所有项目添加到 map-object GameObjectsByType,并在将来对其进行管理。

于 2013-08-13T13:05:33.493 回答
1

您可能希望从相同类型的所有对象的相同“可能位置”列表开始,然后在将对象放置在 [X,Y] 时 - 从剩余的“未放置位置”列表中删除该 [X,Y] “对象。

于 2013-08-13T13:01:59.263 回答