在Java游戏项目中查找和销毁相同颜色的瓷砖

在Java游戏项目中查找和销毁相同颜色的瓷砖,java,arrays,Java,Arrays,我希望你能帮助我,因为我是一名学生,我的项目一直有困难。该项目是一个名为“砖块破碎机”的游戏 在游戏中,我必须创建一个基本上是jButtons的砖块面板,单击该面板时,将检查相邻的相同颜色的按钮,如果有2个或更多的按钮具有相同的颜色JT,则它们将被销毁,然后其他砖块将必须折叠并就位,因为行是空的,或者如果列是空的,则靠近它们空的 到目前为止,我所做的是用彩色砖块在2d阵列中创建框架和面板,但我尝试在按钮上使用动作侦听器,但失败了 此外,我无法找到所有相邻的按钮具有相同的颜色。 我无法上传图片,因

我希望你能帮助我,因为我是一名学生,我的项目一直有困难。该项目是一个名为“砖块破碎机”的游戏

在游戏中,我必须创建一个基本上是jButtons的砖块面板,单击该面板时,将检查相邻的相同颜色的按钮,如果有2个或更多的按钮具有相同的颜色JT,则它们将被销毁,然后其他砖块将必须折叠并就位,因为行是空的,或者如果列是空的,则靠近它们空的

到目前为止,我所做的是用彩色砖块在2d阵列中创建框架和面板,但我尝试在按钮上使用动作侦听器,但失败了

此外,我无法找到所有相邻的按钮具有相同的颜色。 我无法上传图片,因为我是新到论坛的任何帮助将不胜感激

这是我试图用java制作的游戏的链接

很抱歉我发了这么长的邮件

我按要求添加了代码。 注意:我没有Java编程经验,我知道我可以改进代码,但我缺乏刚刚开始的经验

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将断开到下一行。但很难知道哪些按钮在您的下方/上方。。。