在Java中使用多个按钮的游戏

时间:2013-12-20 23:58:12

标签: java swing button

编辑:解决了,感谢MGorgon。

我正在创建一个简单的游戏(暂时)允许您通过鼠标点击在当前位置的每个方向上移动一个点1步。但是这只适用于电路板是方形的(您可以选择电路板的尺寸)。 该板由具有图像和2D阵列的按钮表示,以跟踪“1”是点的位置的位置,“0”是自由空间。 actionlistener中的Pos1和Pos2打印出单击按钮的位置。 所以,当游戏板是一个正方形时,这很有用,但是当我将棋盘改成矩形时,我得到的pos1和pos2值不正确,我用来移动这个点。

    //creates the array and sets dot start position.
    for(int i=0;i<xAxis;i++)
    {
        for(int j=0;j<yAxis;j++)
        {           
            board[i][j]=0;
        }               
    }
    board[(xAxis/2)][(yAxis/2)]=1;

    //Creates buttons and adds actionslistener and images to the buttons.
    for(int i=0;i<xAxis;i++)
    {                   
        for(int j=0;j<yAxis;j++)
        {
            buttons[i][j] = new JButton();
            buttons[i][j].setIcon(circleIMG);
            buttons[i][j].setBorderPainted(false);
            buttons[i][j].addActionListener(GBC);
            buttons[i][j].setPreferredSize(new Dimension(52,52));  
            buttons[i][j].setRolloverIcon(circleDotIMG);
            buttons[i][j].setRolloverEnabled(true);

            GameBoardPanel.add(buttons[i][j]);  
        }       
    }

    buttons[(xAxis/2)][(yAxis/2)].setIcon(circleDotIMG);

    //implements the actionlistener
    public class GridButtonClick implements ActionListener
    {   
    //int xControl=0;       
    int pos1=0;
    int pos2=0;
    boolean Move = false;

    public void actionPerformed(ActionEvent e) 
    {   
        int posx=FindXpos(board);
        int posy=FindYpos(board);           

        for(int i=0;i<xAxis;i++)
        {
            for(int j=0;j<yAxis;j++)
            {
                if(buttons[i][j] == e.getSource())
                {                       
                    pos1=i;
                    pos2=j;
                    //System.out.println("posx: "+posx);
                    //System.out.println("posy: "+posy);
                    System.out.println("pos1: "+pos1);
                    System.out.println("pos2: "+pos2);
                    System.out.println("\n");


                        if((pos1 == posx+1 && pos2 == posy+1) || (pos1 == posx-1 && pos2 == posy-1))
                            Move=true;                                                              
                        if((pos1 == posx+1 && pos2 == posy-1) || (pos1 == posx-1 && pos2 == posy+1))
                            Move=true;                                      
                        if((pos1 == posx+1 && pos2 == posy) || (pos1 == posx-1 && pos2 == posy))
                            Move=true;                                  
                        if((pos2 == posy+1 && pos1 == posx) || (pos2 == posy-1 && pos1 == posx))
                            Move=true;                      



                    if(Move)
                    {
                        if(yAxis>xAxis)
                        buttons[(xAxis/2)][(yAxis/2)-1].setIcon(circleIMG);

                        else if((xAxis>yAxis) || (xAxis==yAxis))
                        buttons[(xAxis/2)][(yAxis/2)].setIcon(circleIMG);


                        RemovePreviousMark(board);
                        board[i][j] = 1;
                        buttons[i][j].setIcon(circleDotIMG);
                        System.out.println("Button press: "+"["+i+"]"+"["+j+"]");
                        //System.out.println("x: "+i+" "+"y "+j);
                        Move=false;
                    }
                }
            }
        }   
    }       
}

1 个答案:

答案 0 :(得分:1)

这看起来很复杂。

我不确定列出的代码是否已经存在,但如果不是,则应记住currX和currY字段中的当前位置。然后移动您需要做的就是将当前位置删空,适当更改变量,然后设置新位置。

使您的按钮对象成为您自己的按钮子类,并在按钮内存储x,y坐标。然后,您可以立即知道按钮单击的坐标,而无需扫描阵列。