在Java游戏项目中查找和销毁相同颜色的瓷砖
我希望你能帮助我,因为我是一名学生,我的项目一直有困难。该项目是一个名为“砖块破碎机”的游戏 在游戏中,我必须创建一个基本上是jButtons的砖块面板,单击该面板时,将检查相邻的相同颜色的按钮,如果有2个或更多的按钮具有相同的颜色JT,则它们将被销毁,然后其他砖块将必须折叠并就位,因为行是空的,或者如果列是空的,则靠近它们空的 到目前为止,我所做的是用彩色砖块在2d阵列中创建框架和面板,但我尝试在按钮上使用动作侦听器,但失败了 此外,我无法找到所有相邻的按钮具有相同的颜色。 我无法上传图片,因为我是新到论坛的任何帮助将不胜感激 这是我试图用java制作的游戏的链接 很抱歉我发了这么长的邮件 我按要求添加了代码。 注意:我没有Java编程经验,我知道我可以改进代码,但我缺乏刚刚开始的经验在Java游戏项目中查找和销毁相同颜色的瓷砖,java,arrays,Java,Arrays,我希望你能帮助我,因为我是一名学生,我的项目一直有困难。该项目是一个名为“砖块破碎机”的游戏 在游戏中,我必须创建一个基本上是jButtons的砖块面板,单击该面板时,将检查相邻的相同颜色的按钮,如果有2个或更多的按钮具有相同的颜色JT,则它们将被销毁,然后其他砖块将必须折叠并就位,因为行是空的,或者如果列是空的,则靠近它们空的 到目前为止,我所做的是用彩色砖块在2d阵列中创建框架和面板,但我尝试在按钮上使用动作侦听器,但失败了 此外,我无法找到所有相邻的按钮具有相同的颜色。 我无法上传图片,因
public class BB {
public static void main(String[] args) {
int size=14;
BB neighbours = new BB();
JButton button[][]=new JButton[size][size];
ActionListener listener=(ActionEvent ae) -> {
for(int i=0;i<size;i++){ //creating an array holding buttons and randomly coloring them
for(int j=0;j<size;j++){
if (ae.getSource()==button[i][j]){
neighbours.checkup(button,i,j);
neighbours.checkdown(button,i,j);
neighbours.checkleft(button,i,j);
neighbours.checkright(button,i,j);
break;}
}
}
};
Random rand = new Random();
JFrame frame =new JFrame("BrickBreaker");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel= new JPanel();
panel.setLayout(new GridLayout(size,size));
for(int i=0;i<size;i++){ //creating an array holding buttons and randomly coloring them
for(int j=0;j<size;j++){
button[i][j]= new JButton();
button[i][j].addActionListener(listener);
int x=rand.nextInt(4);
switch (x) {
case 0:
button[i][j].setBackground(Color.BLUE);
break;
case 1:
button[i][j].setBackground(Color.MAGENTA);
break;
case 2:
button[i][j].setBackground(Color.GREEN);
break;
case 3:
button[i][j].setBackground(Color.YELLOW);
break;
default:
button[i][j].setBackground(Color.MAGENTA);
break;
}
panel.add(button[i][j]);
}}
frame.add(panel);
frame.pack();
frame.setSize(900,900);
frame.setVisible(true);
}
public void checkup(JButton[][] button,int i, int j){
if(button[i][j].getBackground()==button[i][j-1].getBackground() && j-1>0){
if(button[i][j]!=null)
button[i][j]=null;
checkleft(button,i,j-1);
checkright(button,i,j-1);
checkup(button,i,j-1);}
}
public void checkdown(JButton[][] button, int i, int j){
if(button[i][j].getBackground()==button[i][j+1].getBackground() && j+1<14){
if(button[i][j]!=null)
button[i][j]=null;
checkleft(button,i,j+1);
checkright(button,i,j+1);
checkdown(button,i,j+1);}
}
public void checkleft(JButton[][] button, int i, int j){
if(button[i][j].getBackground()==button[i-1][j].getBackground() && i-1>0){
if(button[i][j]!=null)
button[i][j]=null;
checkup(button,i-1,j);
checkdown(button,i-1,j);
checkleft(button,i-1,j);}
}
public void checkright(JButton[][] button, int i, int j){
if(button[i][j].getBackground()==button[i+1][j].getBackground() && i+1<14){
if(button[i][j]!=null)
button[i][j]=null;
checkup(button,i+1,j);
checkdown(button,i+1,j);
checkright(button,i+1,j);}
}
}
公共类BB{
公共静态void main(字符串[]args){
int size=14;
BB=新BB();
JButton button[][]=新JButton[size][size];
ActionListener侦听器=(ActionEvent ae)->{
对于(In i=0;我们是你失败的代码,我们不打算为你编写程序。考虑使用包含你的按钮的堆叠的布局。通过删除一个按钮,布局将负责将剩余的按钮拼在一起。你为每一行使用1个流布局,水平地叠加它们,向流布局添加按钮。u make it vash layout将完成大部分工作。不要重新发明轮子-除非你需要一个9面轮子。@Treytencary我已经上传了代码。任何更改或建议,甚至新代码都将非常感谢。@PatrickArtner你的想法真的很聪明。这会影响按钮的大小吗?当我删除gr时,按钮会垂直下降吗如果我的问题听起来笨拙的话,很抱歉。这听起来不愚蠢。你可以使用一个单一的流布局。如果当前行溢出,如果你会断开下一行。很难知道哪些按钮在你的上面/下面……告诉我们你失败的代码,我们不会为你编写程序。考虑使用ST。包含按钮的已确认流程布局。删除一个按钮后,布局将负责将其余按钮挤压在一起。每行使用一个流程布局,将它们水平堆叠,然后将按钮添加到流程布局中。如果使其消失,则布局将完成大部分工作。不要重新发明轮子-除非需要9面。@TreytenC我是否已经上传了代码?如果有任何更改或建议,甚至是新的代码,我们将不胜感激。@PatrickArtner您的想法真的很聪明。这会影响按钮的大小吗?当我删除一组相同颜色的砖块时,按钮会垂直下降吗?如果我的问题听起来很愚蠢,请原谅。听起来并不愚蠢-您可以使用一个单流布局。如果当前行溢出,if将断开到下一行。但很难知道哪些按钮在您的下方/上方。。。