Я делаю простую игру, где пользователь нажимает на цветные блоки и все соседние блоки одного цвета исчезают вместе. Когда блок исчезает, все блоки поверх него должны упасть и заполнить пустое пространство. Как я мог бы реализовать такие действия? Я мог проверить все блоки в сетке, но это огромная трата. Я мог бы также отслеживать, сколько пустых пространств находится в данном столбце, но я думаю, что должен быть лучший способ его реализовать. Вот код, показывающий, как я сделал сетку и каждую клетку:Качели для качания
public class GridPanel extends JPanel{
private GridCell[][] grid;
private static final int DEFAULT_SIZE = 25;
private static final Color[] COLORS = {Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW};
private Random random;
public GridPanel(int x, int y){
random = new Random();
grid = new GridCell[x][y];
GridBagConstraints gbc = new GridBagConstraints();
setLayout(new GridBagLayout());
for(int i = 0; i < grid.length; i++){
for(int j = 0; j < grid[i].length; j++){
GridCell gc = new GridCell(i, j, DEFAULT_SIZE);
Border border = new MatteBorder(1, 1, 1, 1, Color.GRAY);
gc.setBorder(border);
gc.setBackground(COLORS[random.nextInt(COLORS.length)]);
gbc.gridx = i;
gbc.gridy = j;
add(gc, gbc);
grid[i][j] = gc;
}
}
}
}
public class GridCell extends JPanel{
private int x;
private int y;
private int size;
public GridCell(int x, int y, int size){
this.x = x;
this.y = y;
this.size = size;
}
@Override
public Dimension getPreferredSize() {
return new Dimension(size, size);
}
public GridCoordinate getCoordinates(){
return new GridCoordinate(x, y);
}
public int getCellSize(){
return this.size;
}
}
Я бы не подумал, что ваш лучший выбор будет колебаться. Макеты свинг уже сложны. Сделать так, чтобы они работали, это будет тяжелая битва. Возможно, вам стоит подумать об использовании lwgl http://lwjgl.org/, или вы можете сделать рисунок самостоятельно с помощью библиотек 2D-чертежей в JRE. –
@MarkW спасибо, что я проверил это – nh0815
@MarkW На самом деле, относительно легко, даже с 'GridBagLayout', но' GridLayout' будет намного проще – MadProgrammer