我正在用Java编写一个轰炸机游戏,并且已经为游戏 map (包含图块),玩家(及其在 map 上的移动)编写了代码,现在我陷入了炸弹爆炸的代码中。
我有一个Map
类,其中包含二维Tiles
数组,其中可以包含Player
,Block
和Bomb
。Player
对象具有一个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/