作者:手机用户2602917255 | 来源:互联网 | 2023-10-12 12:54
JButton[][] buttOns= new JButton[ROW][COL];
int[][] counts = new int[ROW][COL];
final int LCODE = 11; //雷的编码
Container cOntainer= new Container();
public Saolei() {
init();
private void init() {
JButton restBtn = new JButton("重来");
restBtn.setOpaque(true);
restBtn.setBackground(Color.PINK);
restBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
for(int i=0;i i++) {
for(int j=0;j j++) {
buttons[i][j].setText("");
buttons[i][j].setEnabled(true);
buttons[i][j].setBackground(Color.YELLOW);
counts[i][j] = 0;
}
}
mailei();
jslsl();
}
setLayout(new BorderLayout());
add(restBtn,BorderLayout.NORTH);
add(container,BorderLayout.CENTER);
container.setLayout(new GridLayout(ROW,COL));
for(int i=0;i i++) {
for(int j=0;j j++) {
JButton button = new JButton();
button.setMargin(new Insets(0, 0, 0, 0));
button.setBackground(Color.YELLOW);
button.setOpaque(true);
buttons[i][j] = button;
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JButton button = (JButton) e.getSource();
if(button.equals(restBtn)) {
}else {
int count = 0;
for(int i=0;i i++) {
for(int j=0;j j++) {
if(button.equals(buttons[i][j])) {
count = counts[i][j];
//踩到雷了
if(count == LEI) {
clcl();
}else {
openCell(i,j);
checkWin();
}
return;
}
}
}
}
private void checkWin() {
for(int i=0;i i++) {
for(int j=0;j j++) {
//说明还没有赢
if(buttons[i][j].isEnabled() == true counts[i][j] != LEI) {
return;
}
}
JOptionPane.showMessageDialog(container, "恭喜您赢了...");
private void openCell(int i,int j ) {
//如果格子已经打开,直接返回
if(buttons[i][j].isEnabled() == false) {
return ;
buttons[i][j].setText(counts[i][j]+"");
buttons[i][j].setEnabled(false);
buttons[i][j].setBackground(Color.CYAN);
if(counts[i][j] == 0) {
//左上角
if(i 0 j 0 counts[i-1][j-1] != LEI) {
openCell(i-1, j-1);
if(i 0 j 0 counts[i-1][j] != LEI) {
openCell(i-1, j);
if(i 0 j 19 counts[i-1][j+1] != LEI) {
openCell(i-1, j+1);
if(i 0 j 0 counts[i][j-1] != LEI) {
openCell(i, j-1);
if(i 0 j 19 counts[i][j+1] != LEI) {
openCell(i, j+1);
if(i 19 j 0 counts[i+1][j-1] != LEI) {
openCell(i+1, j-1);
if(i 19 j 0 counts[i+1][j] != LEI) {
openCell(i+1, j);
if(i 19 j 19 counts[i+1][j+1] != LEI) {
openCell(i+1, j+1);
}
}else {
buttons[i][j].setText(counts[i][j]+"");
}
});
container.add(button);
}
}
mailei();
//计算周边的雷的数量
jslsl();
setVisible(true);
setTitle("扫雷游戏");
setResizable(false);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(600,700);
private void jslsl() {
for(int i=0;i i++) {
for(int j=0;j j++) {
int count = 0;
if(counts[i][j] == LEI) {
continue;
//左上角
if(i 0 j 0 counts[i-1][j-1] == LEI) {
count++;
if(i 0 j 0 counts[i-1][j] == LEI) {
count++;
if(i 0 j 19 counts[i-1][j+1] == LEI) {
count++;
if(i 0 j 0 counts[i][j-1] == LEI) {
count++;
if(i 0 j 19 counts[i][j+1] == LEI) {
count++;
if(i 19 j 0 counts[i+1][j-1] == LEI) {
count++;
if(i 19 j 0 counts[i+1][j] == LEI) {
count++;
if(i 19 j 19 counts[i+1][j+1] == LEI) {
count++;
counts[i][j] = count;
// buttons[i][j].setText(counts[i][j]+" ");
}
}
private void clcl() {
for(int i=0;i i++) {
for(int j=0;j j++) {
int c = counts[i][j];
if(c == LEI) {
buttons[i][j].setText("X");
buttons[i][j].setBackground(Color.RED);
buttons[i][j].setEnabled(false);
}else {
buttons[i][j].setText(c+"");
buttons[i][j].setEnabled(false);
}
}
}
private void mailei() {
Random random = new Random();
int randRow,randCol;
for(int i=0;i i++) {
randRow = random.nextInt(ROW);
randCol = random.nextInt(COL);
if(counts[randRow][randCol] == LEI) {
i--;
}else {
counts[randRow][randCol] = LEI;
// buttons[randRow][randCol].setText(LEI+"");
}
}
public static void main(String[] args) {
new Saolei();
}
以上代码纯属练习用,没有经过任何的封装,有兴趣的小伙伴可以自行封装一下哦。