位置を持つすべてのゲーム オブジェクト (プレイヤー、敵など) は、その位置への内部参照を持つ必要があります。
class Position {
int x;
int y;
}
interface Positionable {
Position getPosition();
void setPosition(int x, int y, GameArea area);
}
class Player implements Positionable {
//stuff
}
class Enemy implements Positionable {
//stuff
}
次に、ゲーム領域を表すクラスを作成できます。
class GameArea {
Positionable[][] grid;
List<Positionable> gameObjects;
public Positionable getByLocation(int x, int y) {
return grid[x][y];
}
public void setAtLocation(int x, int y, Positionable p) {
grid[x][y] = p;
}
public List<Positionable> getAll() {
return gameObjects;
}
}
これにより、位置によってアクセスし、すべてのオブジェクトを反復処理できます。GameArea
以下の実装例に示すように、ゲーム オブジェクトが移動すると、その位置を内部的に更新し、明示的に を更新する必要がありますsetPosition()
。
void setPosition(int x, int y, GameArea area) {
area.setAtLocation(this.x, this.y, null);
area.setAtLocation(x, y, this);
this.x = x;
this.y = y;
}