Tôi đang viết trò chơi bomberman bằng Java và tôi đã viết mã cho bản đồ trò chơi (có chứa ô xếp), người chơi (và chuyển động của họ trên bản đồ) và bây giờ tôi bị kẹt trong mã cho vụ nổ bom.Vụ nổ bom trên trò chơi Bomberman
Tôi có một lớp Map
chứa một mảng 2ngày của , có thể chứa Player
s, Block
s và Bomb
s. Đối tượng Player
có phương thức dropBomb
gọi phương thức receiveBomb
từ đối tượng Map
(mỗi Player
có tham chiếu đối tượng Map
) với vị trí của bom và bom. Khi gọi phương thức Map
receiveBomb
, bản đồ đặt quả bom vào đúng Tile
. Vấn đề của tôi là trong vụ nổ bom. Ai nên quan tâm đến nó? Bản thân quả bom? Nếu có, liệu quả bom có tham chiếu cho Tile
có chứa nó không? Cho đến bây giờ ngói của tôi không cần tham chiếu Map
. Một trong những khả năng mà tôi nghĩ là có tham chiếu Tile
bên trong đối tượng Bomb
, vì vậy, khi quả bom phát nổ (và quả bom biết khi nào nên phát nổ), nó gọi phương thức trong đối tượng ngói cho vụ nổ và ô xếp gọi một phương thức trên bản đồ. Nhân tiện, tôi không biết đây là một ý hay. Tôi nên làm gì?
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);
}
}
lớp 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);
}
}
Bản đồ lớp:
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);
}
}
tôi đã bỏ qua những phương pháp phong trào, bởi vì phong trào là đã tốt.
Nếu bom có tham chiếu cho ô xếp? Ngoài ra, tôi nên xem xét để sử dụng tham chiếu của gạch liền kề cho mỗi ngói thay vì một mảng 2d? –
Một quả bom được đặt trên một viên gạch và nên biết nó nằm trên gạch, vì vậy có, nó có một tham chiếu dạng gạch. Một gạch nên được biết bằng cách liên kết (không chắc chắn bạn cần nó) hoặc bằng cách 'tính toán' những gì gạch liền kề – Nanne