使用ChatGPT实现可视化操作扫雷小游戏 【java代码实现】

简介: 这篇文章介绍了使用Java语言和Swing框架实现的扫雷小游戏的详细代码和实现过程。

代码

package com.atguigu.java4;

/**
 * @author zyz
 * @version 1.0
 * @data 2023/2/20 14:55
 * @Description:
 */

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;

class MineSweeper extends JFrame { private JButton[][] buttons; private int[][] mines; private int[][] counts; private int row; private int col; private int mineNum; private int count; private boolean isGameOver;

    public MineSweeper(int row, int col, int mineNum) {
        this.row = row;
        this.col = col;
        this.mineNum = mineNum;
        this.count = 0;
        this.isGameOver = false;
        this.buttons = new JButton[row][col];
        this.mines = new int[row][col];
        this.counts = new int[row][col];
        initMines();
        initCounts();
        initFrame();
    }

    private void initMines() {
        Random random = new Random();
        int num = 0;
        while (num < mineNum) {
            int x = random.nextInt(row);
            int y = random.nextInt(col);
            if (mines[x][y] == 0) {
                mines[x][y] = 1;
                num++;
            }
        }
    }

    private void initCounts() {
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if (mines[i][j] == 1) {
                    counts[i][j] = -1;
                } else {
                    int count = 0;
                    if (i > 0 && j > 0 && mines[i - 1][j - 1] == 1) {
                        count++;
                    }
                    if (i > 0 && mines[i - 1][j] == 1) {
                        count++;
                    }
                    if (i > 0 && j < col - 1 && mines[i - 1][j + 1] == 1) {
                        count++;
                    }
                    if (j > 0 && mines[i][j - 1] == 1) {
                        count++;
                    }
                    if (j < col - 1 && mines[i][j + 1] == 1) {
                        count++;
                    }
                    if (i < row - 1 && j > 0 && mines[i + 1][j - 1] == 1) {
                        count++;
                    }
                    if (i < row - 1 && mines[i + 1][j] == 1) {
                        count++;
                    }
                    if (i < row - 1 && j < col - 1 && mines[i + 1][j + 1] == 1) {
                        count++;
                    }
                    counts[i][j] = count;
                }
            }
        }
    }

    private void initFrame() {
        this.setTitle("扫雷");
        this.setSize(col * 50, row * 50);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLayout(new GridLayout(row, col));
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                buttons[i][j] = new JButton();
                buttons[i][j].setBackground(Color.GRAY);
                buttons[i][j].addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        JButton button = (JButton) e.getSource();
                        int x = 0;
                        int y = 0;
                        for (int i = 0; i < row; i++) {
                            for (int j = 0; j < col; j++) {
                                if (buttons[i][j] == button) {
                                    x = i;
                                    y = j;
                                    break;
                                }
                            }
                        }
                        if (mines[x][y] == 1) {
                            button.setBackground(Color.RED);
                            isGameOver = true;
                        } else {
                            button.setText(String.valueOf(counts[x][y]));
                            button.setEnabled(false);
                            count++;
                        }
                        if (count == row * col - mineNum) {
                            JOptionPane.showMessageDialog(null, "恭喜你,你赢了!");
                            isGameOver = true;
                        }
                        if (isGameOver) {
                            for (int i = 0; i < row; i++) {
                                for (int j = 0; j < col; j++) {
                                    if (mines[i][j] == 1) {
                                        buttons[i][j].setBackground(Color.RED);
                                    }
                                    buttons[i][j].setEnabled(false);
                                }
                            }
                        }
                    }
                });
                this.add(buttons[i][j]);
            }
        }
        this.setVisible(true);
    }

    public static void main(String[] args) {
        new MineSweeper(10, 10, 10);
    }
}

测试

踩到雷会爆红

在这里插入图片描述

相关文章
|
25天前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
48 1
|
2月前
|
存储 安全 Java
Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
【10月更文挑战第17天】Java Map新玩法:探索HashMap和TreeMap的高级特性,让你的代码更强大!
73 2
|
15天前
|
Java
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
java小工具util系列4:基础工具代码(Msg、PageResult、Response、常量、枚举)
43 24
|
11天前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
41 5
|
11天前
|
存储 算法 Java
Java 内存管理与优化:掌控堆与栈,雕琢高效代码
Java内存管理与优化是提升程序性能的关键。掌握堆与栈的运作机制,学习如何有效管理内存资源,雕琢出更加高效的代码,是每个Java开发者必备的技能。
40 5
|
13天前
|
Java API 开发者
Java中的Lambda表达式:简洁代码的利器####
本文探讨了Java中Lambda表达式的概念、用途及其在简化代码和提高开发效率方面的显著作用。通过具体实例,展示了Lambda表达式如何在Java 8及更高版本中替代传统的匿名内部类,使代码更加简洁易读。文章还简要介绍了Lambda表达式的语法和常见用法,帮助开发者更好地理解和应用这一强大的工具。 ####
|
17天前
|
Java API Maven
商汤人像如何对接?Java代码如何写?
商汤人像如何对接?Java代码如何写?
29 5
|
1月前
|
XML 安全 Java
Java反射机制:解锁代码的无限可能
Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性、方法和构造函数。 反射机制能够使程序具备更大的灵活性和扩展性
43 5
Java反射机制:解锁代码的无限可能
|
18天前
|
Java
在Java中实现接口的具体代码示例
可以根据具体的需求,创建更多的类来实现这个接口,以满足不同形状的计算需求。希望这个示例对你理解在 Java 中如何实现接口有所帮助。
32 1
|
10天前
|
安全 Java API
Java中的Lambda表达式:简化代码的现代魔法
在Java 8的发布中,Lambda表达式的引入无疑是一场编程范式的革命。它不仅让代码变得更加简洁,还使得函数式编程在Java中成为可能。本文将深入探讨Lambda表达式如何改变我们编写和维护Java代码的方式,以及它是如何提升我们编码效率的。