当前位置: 首页 > 知识库问答 >
问题:

Java多按钮游戏

燕照
2023-03-14

编辑:解决了,多亏了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个答案

景令秋
2023-03-14

这似乎很复杂。

从所列代码中我不确定您是否已经是,但是如果您还没有,您应该记住currX和currY字段中的当前位置。然后要移动,您需要做的就是空白当前位置,适当地更改变量,然后设置新位置。

使您的button对象成为您自己的button子类,并在button内部存储一个x,y坐标。然后您就可以立即知道按钮点击的坐标,而不必扫描数组。

 类似资料:
  • 我在Java中创建了一个小TicTacToe游戏,我想编写更有效的代码,我会制作一个for循环来创建9个按钮。 我现在面临的问题是如何测试按下哪个按钮以确定胜利者。我已经注释掉了我的旧测试代码,因为它不再工作。

  • 我的游戏重启按钮不起作用,点击后会成倍增加。我并不完全理解Java,我认为自己很好。

  • 问题内容: 在我的React组件中,我有一个按钮,当单击该按钮时,它会通过AJAX发送一些数据。我只需要第一次发生,即在首次使用后禁用该按钮。 我如何尝试做到这一点: 我认为发生的事情是状态变量没有立即更新,这是React文档所说的预期。 我如何强制按钮被禁用或在单击按钮时立即消失? 问题答案: 您可以做的是单击该按钮后将其禁用,然后将其保留在页面中(不可单击的元素)。 为此,您必须向按钮元素添加

  • 在React组件中,我有一个按钮,用于在单击时通过AJAX发送一些数据。我只需要第一次使用,即在第一次使用后禁用按钮。 我是如何做到这一点的: 我认为发生的是状态变量没有立即更新,React文档说这是预期的。 我如何强制按钮在被点击的瞬间被禁用或完全消失?

  • 我使用Arduino Uno通过USB或蓝牙将(正版)SNES控制器连接到计算机上。 Arduino使用snespad库捕获控制器的按钮按下和释放。它将按钮按下和释放作为字符进行通信(例如按下A的“a”,释放“A”的“A”)。接下来,一个Java程序使用rxtx库监听串行输出。最后,一个Java机器人使用keyPress和keyRelise模拟按键。 不幸的是,这种方法有一些缺点。主要问题是密钥映

  • 问题内容: 我创建了一个按钮,我想要这些: 当用户单击按钮时,它将保持按下状态约3秒钟。3秒钟后,按钮应再次看起来可按下。因此,用户必须等待3秒钟才能再次单击该按钮。我尝试了这些: 你有什么建议吗? 问题答案: 可能对您有帮助