繁体   English   中英

如何随机化二维按钮数组的顺序并让各个按钮做不同的事情

[英]How to randomize the order of a 2d Array of buttons and have indevidual buttons do different things

我正在尝试使用将按顺序随机生成的二维按钮数组,但是,它们做不同的事情。 单击同一二维数组的不同按钮时,有什么方法可以使用动作侦听器来执行不同的操作? 我想保留 1 个数组,因为按钮在网格中,如果我可以使用按钮的坐标来根据当前按下的按钮更改其颜色,那么以后做我需要做的事情会简单得多。 也许有一个网格布局的解决方案,我可以使用那个或什么的坐标? 这样我可以使用多个 2d arrays 但我需要将不同的 arrays 随机分布到网格中。

public class MyFrame extends JFrame implements ActionListener 
    {
        JFrame mainWindow;
        JLabel label = new JLabel();
        private JButton[][] board = new JButton[8][8];
        
        MyFrame()
            {   
                int[] piece = {1,1,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6};
                this.setSize(520,540);//setting main frame attributes
                this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                this.setResizable(false);
                this.setLayout(new GridLayout(8,8));                
                this.setPreferredSize(new Dimension(500,500));
                this.setLayout(new GridLayout(8,8));
                
                int a = 0;
                
                  for(int r = 0; r < 8; r++)
                    {
                        for(int c = 0; c < 8; c++)
                            {
                                board[r][c] = new JButton();
                                
                                board[r][c].addActionListener(this);
                                
                                board[r][c].putClientProperty("Type",1);
                                
                                this.add(board[r][c]);  
                            }
                    }                 
                 setColor();
                 setVisible(true);
            }
        public void setColor() 
            {
                int a = 0;
                for(int r = 0; r < 8; r++)
                    {
                        for(int c = 0; c < 8; c++)
                            {
                                if(a % 2 == 0)
                                    {
                                        board[r][c].setBackground(Color.BLACK);
                                    }      
                                a++;    
                                
                                if(c == 7) 
                                    {
                                        a++;
                                    }  
                            }
                    }
            }
        @Override
        public void actionPerformed(ActionEvent e) 
            {
            if(e.getSource() == board.getClientProperty("Type",1)) 
                {//if button pressed create instance
                
                    peicePopup newWindow = new peicePopup(); 
                
                }
            
            }
    }

这是我的指示

使用好的OOP和基于GUI的开发,创建棋盘。 显示了一个示例棋盘。

每个玩家有两个车,两个骑士,两个主教,一个国王,一个皇后和八个棋子。 玩家一有白色棋子,而玩家二有黑色棋子。 要显示棋子,您可以使用图标(您可以在网络上研究棋子图像)或使用字母。 对于后者,您可以将 K 用于 King,Q 用于 Queen,R 用于 Rook,B 用于 Bishop,KN 用于 Knight,P 用于 Pawns。

最初,在整个棋盘上,使用随机化放置所有棋子,即黑白棋子。 也就是说,当程序运行时,所有棋子都以随机顺序放置在棋盘上。 程序的每次运行都会随机化棋子的初始位置。

棋盘的每个方格都应该是一个可操作的按钮。 当点击任何空白方块时,第二个 window 应该打开,其中包含有关国际象棋游戏所有棋子移动的文本说明。 用户应该能够关闭第二个 window 而无需关闭第一个 window,即显示棋盘的一个。

对于任何棋子,当单击其正方形(按钮)时,突出显示该棋子可以合法移动到的可能位置。 根据游戏规则,一块只能移动到一个空方格。 在突出显示棋子可以移动到的可能位置时,为不同的棋子使用不同的颜色。 当点击另一个棋子的方块时,之前点击的棋子可能的移动位置不会突出显示,而新点击的棋子的可能位置会被突出显示。 也就是说,程序在棋盘上一次仅突出显示一个棋子(单击时)的可能位置。

nvm,我明白了,我刚刚创建了一个单独的数组,其中的值可以区分按钮 bc 它们的顺序相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM