0

特定のオブジェクト (ボックス、コンテナーなど) を適切な場所に配置する必要がある 2D Java ゲームを開発しています。

  • 各オブジェクトは、プレイヤーが配置すべき目的地 [X,Y] を取得しました。

しかし問題は、同じタイプのオブジェクトが複数ある場合、それをどの位置に配置するかを (推測するのではなく) プレーヤーが決定する必要があることです。

今、この問題を処理するための適切なロジックを作成する方法を考えています。XML ファイルからすべてのレベル データをロードしています。私の考えは次のとおりです。

  • XML からレベルをロードする際に、すべてのオブジェクトを配列リストに追加します。
  • すべてのオブジェクトをロードした後、このリストを繰り返し処理し、すべてのオブジェクトを新しい配列リストに並べ替えます。オブジェクトの種類 (ボックス、コンテナーなど) ごとに 1 つずつです。後で、これらのリストを繰り返し処理し、オブジェクトが現在可能な位置に配置されていることを確認できます。

まだよくわかりませんが、助けていただければ幸いです。

編集:@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

同じタイプのすべてのオブジェクトに対して同じ「可能な場所」のリストから始めたい場合があります。次に、オブジェクトが [X,Y] に配置されたら、残りの「未配置」のリストからその [X,Y] を削除します。 " オブジェクト。

于 2013-08-13T13:01:59.263 に答える
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 に答える