轰炸机比赛爆炸爆炸

Art*_*pen 9 java

我正在用Java写一个炸弹人游戏,我已经为游戏地图(包含瓷砖),玩家(以及他们在地图中的移动)编写了代码,现在我被困在炸弹爆炸的代码中.

我有一个Map包含2d数组的类Tiles,它可以包含Players,Blocks和Bombs.该Player对象有一个方法dropBomb,它receiveBombMap对象(每个Player都有对象的引用Map)调用方法与炸弹和炸弹的位置.当调用该Map方法时receiveBomb,地图将炸弹放入正确的位置Tile.我的问题在于炸弹的爆炸.谁应该关心它?炸弹本身?如果是的话,炸弹是否应该Tile包含它的参考?直到现在我的瓷砖都不需要Map参考.

我认为有一种可能性是TileBomb对象内部有引用,因此,当炸弹爆炸时(并且炸弹知道它应该爆炸的时候)它会在tile对象中调用爆炸的方法,并且tile会在地图中调用一个方法.顺便说一句,我不知道这是个好主意.我该怎么办?

public class Tile {

private boolean available; //if the tile is not occupied by a indestructible block or bomb
private List<Entity> entities; //you can have more than one player at a tile
public boolean receiveEntity(Entity entity) {
    boolean received = false;
    if (available) {
        this.entities.add(entity);
        received = true;
        if (entity instanceof Block || entity instanceof Bomb) {
            available = false;
        }
    }
    return received;        
}

public boolean removePlayer(Player player) {
    return entities.remove(player);
}
}
Run Code Online (Sandbox Code Playgroud)

玩家类:

public class Player implements Entity {

private Map gameMap;
private int posX;
private int posY;
private int explosionRange; //the explosion range for bombs
public Player(int posX, int posY, Map gameMap) {
    this.gameMap = gameMap;
    this.posX = posX;
    this.posY = posY;
    this.explosionRange = 1;
}

public void dropBomb() {
    gameMap.receiveBomb(new Bomb(explosionRange), posX, posY);
}
}
Run Code Online (Sandbox Code Playgroud)

地图类:

public class Map {

private Grid<Tile> tileGrid;
private int width;
private int height;

public Map(int width, int height, BuildingStrategy buildingStrategy) {
    this.width = width;
    this.height = height;
    this.tileGrid = new Grid<Tile>(width, height);  
    buildingStrategy.buildMap(this);
}   
public void receiveBomb(Bomb bomb, int posX, int posY) {
    tileGrid.get(posX, posY).receiveEntity(bomb);
}
}
Run Code Online (Sandbox Code Playgroud)

我省略了移动方法,因为移动已经很好了.

Nan*_*nne 2

我一直学习并遵循“桌子自行绘制”的规则。油漆工可能会选择颜色并调用方法,地板可能会决定如何显示泄漏和飞溅,但桌子会自行油漆。

回到你的问题:炸弹自己爆炸。这样你就可以让不同的炸弹产生不同的效果。炸弹会对瓷砖产生影响,瓷砖也会对此做出反应。

示例:炸弹具有威力和爆炸类型。炸弹(我认为只占据一格和一格?)会将其效果“赋予”一格。

现在是负责分配这种力量的图块。假设你有几种炸弹,一种威力(假设为 1 到 10 之间的数字)和两种类型(假设为普通、燃烧、冻结)。

现在你的炸弹爆炸了,因为你的化身是 5 级火法师,所以你的炸弹威力为 4,燃烧类型。所以你对你的方块说:我用能量 4 爆炸,我要点燃你!

现在瓷砖开始发挥作用了。任何被爆炸力“触及”的图块都需要调用它的“Exploded”函数来执行操作。如果也着火了,“onFire”函数里还有更多的事情要做

瓦片被‘爆炸’的,是来自于力量。力量为 4 的普通瓷砖将向 4 范围内的所有方格提供解释,但如果它是特殊瓷砖(它自己知道这一点),例如山瓷砖,它可能无法以该力量前进。

方块 1 爆炸为 4,并将其以力量 3 传递给相邻的方块。其中一个方块可能是墙,因此无需执行任何进一步操作。另一个是普通瓷砖,会爆炸,并继续以力 2 向前推进,依此类推。如果是“水”瓷砖,爆炸会被向前推,但火不会,等等

所以:

  • 炸弹会自行爆炸并调用瓷砖爆炸功能
  • 瓦片被爆炸并根据瓦片类型推动爆炸。
  • 随后的瓷砖因此而爆炸。

最后,看起来大部分工作都是由瓷砖完成的,而且情况可能确实如此。但第一步是:计算力量、类型,并且第一次调用来自炸弹。炸弹爆炸了。然后爆炸会对瓷砖产生影响。该图块会处理该问题,并在需要时传播它。