Java 打鼹鼠游戏

Java 打鼹鼠游戏,java,Java,我是java新手,我正在使用JFrame和JButtons制作一个打鼹鼠游戏。目前,我有一个5x5网格的按钮,这是我得到的。我有3个按钮是X(代表摩尔)和22个是O(代表一个空洞)。我想对按钮值进行随机排列,以便每2秒对值进行随机排列。我该怎么做呢?很抱歉我是一个新手,我几周前就开始使用java了,JFrames仍然让我困惑,哈哈 import javax.swing.*; import java.awt.*; public class Whack_A_Mole extends JFrame {

我是java新手,我正在使用JFrame和JButtons制作一个打鼹鼠游戏。目前,我有一个5x5网格的按钮,这是我得到的。我有3个按钮是X(代表摩尔)和22个是O(代表一个空洞)。我想对按钮值进行随机排列,以便每2秒对值进行随机排列。我该怎么做呢?很抱歉我是一个新手,我几周前就开始使用java了,JFrames仍然让我困惑,哈哈

import javax.swing.*;
import java.awt.*;
public class Whack_A_Mole extends JFrame {
JButton[][] square = new JButton[5][5];
JButton button1, button2;
static JLabel label = new JLabel();


Whack_A_Mole() {
 super("Whack a Mole");
    JPanel p = new JPanel(new GridLayout(5,5));
    for(int i = 0; i < 5; i++) {
        for(int j = 0; j < 5; j++) {
            square[i][j] = new JButton();
            p.add(square[i][j]);
        }
    }    
    add(p, BorderLayout.CENTER);      
    p = new JPanel(new GridLayout(1,2));              
    setSize(600, 600);
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    setVisible(true);        
    setLocationRelativeTo(null);

}

public static void main(String[] args) {
    new Whack_A_Mole();
}

}
import javax.swing.*;
导入java.awt.*;
公共类重击A_Mole扩展JFrame{
JButton[][]方形=新JButton[5][5];
b按钮1、按钮2;
静态JLabel标签=新JLabel();
打鼹鼠{
超级(“打鼹鼠”);
JPanel p=新JPanel(新网格布局(5,5));
对于(int i=0;i<5;i++){
对于(int j=0;j<5;j++){
正方形[i][j]=新的JButton();
p、 加(平方[i][j]);
}
}    
添加(p,BorderLayout.CENTER);
p=新JPanel(新网格布局(1,2));
设置大小(600600);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(真);
setLocationRelativeTo(空);
}
公共静态void main(字符串[]args){
新打鼹鼠;
}
}

如果将对象放在ArrayList中,可以使用shuffle()方法对其顺序进行无序排列。至于计时,可以使用Thread.sleep(毫秒SAMT)或计时器。我更喜欢util.Timer,尤其是当动作无限重复或多次重复时

创建一个线程,该线程将每隔2秒向队列中添加更新功能

import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowEvent;
import java.util.Random;

public class Wack_A_Mole extends JFrame {
    JButton[][] square = new JButton[5][5];
    JButton button1, button2;
    static JLabel label = new JLabel();
    private Thread updateWoker;

    Whack_A_Mole() {

     super("Whack a Mole");
        JPanel p = new JPanel(new GridLayout(5,5));
        for(int i = 0; i < 5; i++) {
            for(int j = 0; j < 5; j++) {
                square[i][j] = new JButton();
                p.add(square[i][j]);
            }
        }    
        add(p, BorderLayout.CENTER);      
        p = new JPanel(new GridLayout(1,2));              
        setSize(600, 600);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setVisible(true);        
        setLocationRelativeTo(null);


    }
     void start(){
           updateWoker=new Thread(new Runnable(){
                            public void run(){
                                Runnable r=new Runnable(){                
                                    public void run() {
                                            buttonUpdate();  // call buttonUpdate every two seconds
                                    }
                                };
                                while (true){
                                        javax.swing.SwingUtilities.invokeLater(r);
                                        try{Thread.sleep(2000);} catch (InterruptedException ex) {  
                                        return;
                                    }
                                }   
                            }
                    }
            );
           updateWoker.start();     
     }
    public void buttonUpdate(){ // random update can be done in this function
        Random r=new Random();
            for(int i=0;i<square.length;i++){
                    for(int j=0;j<square[i].length;j++){
                        if(r.nextInt() %2==0)
                            square[i][j].setText("O");
                        else
                            square[i][j].setText("X");                         
                    }
            }
    }
    public void processWindowEvent(WindowEvent e) { 
        if (e.getID() == WindowEvent.WINDOW_CLOSING) { // making sure to stop the thread after gui closes
            if(updateWoker.isAlive()){
                updateWoker.interrupt();
            }
            dispose();
        }
    }
    public static void main(String[] args) throws InterruptedException {
            final Whack_A_Mole theTest=new Whack_A_Mole();
            theTest.start();
    }

}
import javax.swing.*;
导入java.awt.*;
导入java.awt.event.WindowEvent;
导入java.util.Random;
公共类Wack_A_Mole扩展JFrame{
JButton[][]方形=新JButton[5][5];
b按钮1、按钮2;
静态JLabel标签=新JLabel();
私有线程更新器;
打鼹鼠{
超级(“打鼹鼠”);
JPanel p=新JPanel(新网格布局(5,5));
对于(int i=0;i<5;i++){
对于(int j=0;j<5;j++){
正方形[i][j]=新的JButton();
p、 加(平方[i][j]);
}
}    
添加(p,BorderLayout.CENTER);
p=新JPanel(新网格布局(1,2));
设置大小(600600);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setVisible(真);
setLocationRelativeTo(空);
}
void start(){
updatewker=新线程(newrunnable()){
公开募捐{
Runnable r=新的Runnable(){
公开募捐{
buttonUpdate();//每两秒钟调用buttonUpdate
}
};
while(true){
swing.SwingUtilities.invokeLater(r);
试试{Thread.sleep(2000);}catch(InterruptedException ex){
返回;
}
}   
}
}
);
updatewker.start();
}
public void buttonUpdate(){//可以在此函数中进行随机更新
随机r=新随机();
对于(int i=0;i