轰炸机比赛爆炸爆炸

时间:2013-10-15 11:42:17

标签: java

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

我有一个Map类,其中包含Tiles的二维数组,其中可以包含Player s,BlockBomb s。 Player对象的方法dropBombreceiveBomb对象调用方法Map(每个Player都有Map对象的引用)与炸弹和炸弹的位置。调用Map方法receiveBomb后,地图会将炸弹放入正确的Tile。 我的问题在于炸弹的爆炸。谁应该关心它?炸弹本身?如果是,炸弹是否应该包含它的Tile的参考?到目前为止,我的磁贴不需要Map引用。

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

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

地图类:

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

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

3 个答案:

答案 0 :(得分:2)

我一直都在学习,并遵守“桌子自我画”的规则。画家可以选择颜色并调用方法,地板可以决定泄漏和飞溅的显示方式,但表格会自行绘制。

回到你的问题:炸弹爆炸。这样你可以有不同炸弹的不同效果。炸弹对瓷砖有影响,瓷砖对此作出反应。

示例:炸弹有一种力和一种爆炸。炸弹,(我认为只占用一个和一个瓷砖?)将“给它”效果给瓷砖。

现在是处理分配此力量的牌。让我们说你有几种炸弹,一种力量(比如1到10之间的数字)和两种类型(比如说正常,燃烧,冻结)。

现在你的炸弹爆炸了,因为你的化身是一个5级火焰法师,你的炸弹是4级并且有类型的燃烧弹。所以你对你的瓷砖说:我用力量4爆炸,我让你着火了!

现在,瓷砖开始播放。任何被爆炸力“触及”的瓷砖都需要将其称为“爆炸”功能才能完成任务。如果它也着火了,那么“onFire”功能还有更多工作要做。

哪些瓷砖'爆炸'来自力量。具有力4的普通瓦片将对4范围内的所有正方形进行表示,但如果它是一个特殊的瓦片(它自己知道),就像山瓦片一样,它可能无法用该力推进。

瓷砖1用4爆炸并用力3将它交给相邻的瓷砖。其中一块瓷砖可能是墙,所以不做任何进一步的操作。另一个是普通的瓷砖,然后爆炸,并继续用力2等向前推进。如果它是“水”瓷砖,爆炸被推向前,但火不是,等等

这样:

  • 炸弹爆炸自己并给出了瓦片爆炸功能的调用
  • 瓷砖爆炸并按照瓷砖类型向前推爆炸。
  • 后续的瓷砖因此而爆炸。

最后看起来大多数工作都是由瓷砖完成的,甚至可能就是这种情况。但是第一步:计算力,类型和第一次来自炸弹。炸弹爆炸了。然后爆炸对瓷砖有影响。磁贴处理该磁带,并在需要时传播它。

答案 1 :(得分:0)

你的地图应该对爆炸负责,因为它适用于地图上的每一块瓷砖。毕竟,如果没有另一种瓦片类型在几秒钟后消失,那么爆炸是什么?

当您的游戏循环调用Map对象上的update方法时,您的地图应该知道:

  • 上的炸弹是什么瓷砖
  • 询问炸弹到达的距离
  • 弄清楚炸弹可以到达的相邻瓷砖中的内容

将您的设计视为一系列事件,在最终绘制之前在游戏循环中逐一处理。当您的炸弹被丢弃时,它会以recieveBomb()的形式向地图发出一个事件,其中地图是事件控制器。

我认为这个问题更适合讨论格式,而不是Q&amp; A格式。如果不了解整体架构,很难告诉你什么是“正确的设计”。

答案 2 :(得分:0)

地图应该是处理炸弹爆炸的负责人。

我建议在地图中有一个队列,其中包含所有存在的炸弹。此外,你的炸弹应该有一个计时器(即CreationTime),这样当炸弹被推入队列时,你会检查队列中的每个炸弹,看看它们在那里已经存在了多长时间,如果适用的话“爆炸”它们。

在地图中添加ExplodeBomb功能,检查所有4个方向并相应处理切片。