我正在用Java编写一个轰炸机游戏,并且已经为游戏 map (包含图块),玩家(及其在 map 上的移动)编写了代码,现在我陷入了炸弹爆炸的代码中。

我有一个Map类,其中包含二维Tiles数组,其中可以包含PlayerBlockBombPlayer对象具有一个dropBomb方法,该方法会根据炸弹和炸弹的位置从receiveBomb对象(每个Map都具有Player对象的引用)调用Map方法。调用Map方法receiveBomb时, map 会将炸弹放入正确的Tile中。
我的问题是炸弹爆炸。谁应该关心它?炸弹本身?如果是,炸弹是否应具有包含该炸弹的Tile的引用?到目前为止,我的图块还不需要Map引用。

我认为一种可能性是在Tile对象中包含Bomb引用,因此,当炸弹爆炸时(炸弹知道应何时爆炸),它会在tile对象中调用用于爆炸的方法,而tile会在中调用方法 map 。顺便说一句,我不知道这是一个好主意。我应该怎么办?

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);
}
}

玩家等级:
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);
}
}

map 类:
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);
}
}

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

最佳答案

我一直都在学习,并且始终遵循“ table 在描绘自己”的原则。画家可以选择颜色并调用方法,地板可以决定如何显示泄漏和飞溅,但是 table 可以自己绘画。

回到您的问题:炸弹会自行爆炸。这样,您可以对不同的炸弹产生不同的影响。炸弹对瓷砖产生影响,瓷砖对此使用react。

示例:炸弹具有作用力和爆炸类型。炸弹(我想只占据一个和一个瓷砖?)将“赋予”瓷砖效果。

现在是处理这种力量的瓷砖。假设您有几种炸弹,一种炸弹(让您说出一个介于1到10之间的数字)和两种炸弹(让您说出正常,燃烧和卡住)。

现在您的炸弹爆炸了,并且因为您的化身是5级火法师,所以您的炸弹的威力为4级,并且是燃烧弹。所以你对你的瓷砖说:我以4的力量爆炸了,我正向​​你纵火!

现在,该图块开始播放了。任何被爆炸力“触摸”的瓷砖都需要调用它的“爆炸”功能来做事。如果它也着火了,那么“onFire”功能还有很多事情要做

“爆炸”的瓷砖来自力量。力为4的普通瓷砖会在4的范围内使所有正方形的爆炸消失,但是如果它是特殊的瓷砖(它自己知道),就像山峰的瓷砖,则可能无法使用该力前进。

瓦1爆炸时会爆炸4,并用力3将其分配给相邻的瓦。这些瓦之一可能是墙,因此不再做任何其他事情。另一个是普通的瓷砖,然后爆炸,并继续以力2向前推进,以此类推。如果是“水”瓷砖,则将爆炸推向上方,而不会向火上推,依此类推。

所以:

  • 炸弹自行爆炸,并调用瓷砖爆炸功能
  • 磁贴爆炸,并根据磁贴类型向前插入爆炸。
  • 因此,
  • 随后的图块爆炸。

  • 最后,看起来大部分工作都是由图块完成的,甚至可能是这种情况。但第一步:力的计算,类型和最初的调用来自炸弹。炸弹爆炸了。然后爆炸会对瓷砖产生影响。磁贴将处理此问题,并在需要时进行传播。

    关于java - 炸弹人游戏上的炸弹爆炸,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19380364/

    10-11 00:10