gpt4 book ai didi

java - Swing 跌落 block

转载 作者:行者123 更新时间:2023-12-01 23:15:22 25 4
gpt4 key购买 nike

我正在制作一个简单的游戏,用户单击彩色 block ,所有相同颜色的相邻 block 都会一起消失。当一个方 block 消失时,它上面的所有方 block 都会掉落并填充空白区域。我将如何实现这种行动?我可以检查网格中的所有 block ,但这是一种巨大的浪费。我还可以跟踪给定列中有多少空白,但我认为应该有更好的方法来实现它。下面是一些代码,显示了我如何制作网格和每个单元格:

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

}

最佳答案

您将面临的最大障碍是处理“空” block 。大多数布局不会“保留”屏幕未使用部分的空间。

GridBagLayout 提供了获取用于布局原始组件的 GridBagConstraints 的方法。

GridBagLayout gbl = new GridBagLayout();
//...
GridBagConstarints gbc = gbl.getConstraints(comp);

这为您提供了调整组件约束的方法,只是不要忘记重新应用它们......

gbl.setConstraints(comp, gbc);

我要做的是创建一个“空白”GridCell 的概念。这是一个无法单击的单元格,并且被涂成中性颜色(或者根据您的需要是透明的)。当您“删除” Activity 的 GridCell 时,您会将其替换为“空白”单元格。

然后,您需要计算空白单元格的位置并调整它们周围所有单元格的位置。

这最好通过使用“虚拟”模型来实现。您只需在此模型中维护游戏的状态(例如 int 数组),并且在更新时,只需更新实际 View 以匹配模型即可。

这将使确定单个单元格需要排列的位置变得更加简单。

但这只是我......

已更新

您还可以考虑使用 GridLayout 并更改组件的 Z 顺序,例如...

关于java - Swing 跌落 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21295247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com