Java扫雷全代码

Java极致还原XP系统经典扫雷

前言

  最近疫情在家,没有工作上的996压迫着,使我倍感无聊,不知这满头秀发该如何消耗。
  闲逛着游戏社区,常常回想起和朋友一起通宵玩游戏的那种快感。
  一款扫雷游戏使我眼前一亮,他用了关卡的模式,使我为了通关不断的尝试。
  不出意外,以我的脑力和运气,成功卡在了最后一关,无力感涌上心头,气不过,那就自己做一个扫雷玩玩吧。
  

实现功能

  鼠标左键单击,翻开方格;中键点击,标记问号;右键单击,标记旗子(旗子只能插和雷相同的数量)
  翻开非雷,连锁翻开周围非雷方格
  翻开为雷,游戏失败
  翻开雷周围方块,显示该方块周围雷的数量
  不能翻开标记了问号和旗子的方格
  游戏界面显示雷的数量、剩余时间和经典小黄脸(时间默认为无限)
  点击小黄脸可重新开始游戏
  

实战演示

  本来想从网上找点素材的,但是懒得找了,自己用PS随便画了几个图,感觉还行,勉强能看,需要的话,直接私聊我加Q就行。
在这里插入图片描述

失败

在这里插入图片描述

赢了

在这里插入图片描述

插旗

在这里插入图片描述

标记问号

在这里插入图片描述

  

下面是所有的代码

Test类

public class Test {public static void main(String[] args) {MyJFrame mj = new MyJFrame();mj.myJFrame();}
}

MyJFrame类

import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Random;public class MyJFrame extends JFrame implements MouseListener {int window_width = 560, window_height = 640;//初始化游戏窗口大小static int mine_crosswise = 10, mine_vertical = 10;//初始化雷区为10*10static int mine_mun = 10;//初始化雷的数量static int sign_mun = 0;//初始化旗子的数量static int[][] mine = new int[mine_crosswise][mine_vertical];//保存每个雷的位置static int[][] mine1 = new int[mine_crosswise][mine_vertical];//给用户展示的数据int[][] sign = new int[mine_crosswise][mine_vertical];//保存每个旗子的位置int[][] uncertainty = new int[mine_crosswise][mine_vertical];//保存每个?的位置static BufferedImage image = null;//获取图片路径static int judge = 0;//判断游戏状态 0游戏中,1赢了,2输了static boolean mine_place = false;//绘制雷的开关,判断雷是否以放置,防止多次放置//---------------------------------------------------------------------------------------------------------------------//窗体public void myJFrame() {this.setTitle("扫雷"); //标题this.setSize(window_width, window_height); //窗口大小this.setResizable(false); //窗口是否可以改变大小=否this.setDefaultCloseOperation(MyJFrame.EXIT_ON_CLOSE);//窗口关闭方式为关闭窗口同时结束程序int width = Toolkit.getDefaultToolkit().getScreenSize().width;//获取屏幕宽度int height = Toolkit.getDefaultToolkit().getScreenSize().height;//获取屏幕高度this.setLocation((width - window_width) / 2, (height - window_height) / 2); //设置窗口默认位置以屏幕居中this.addMouseListener(this);this.setVisible(true); //窗口是否显示=是}//---------------------------------------------------------------------------------------------------------------------//覆写paint方法,绘制界面public void paint(Graphics g) {//双缓冲技术防止屏幕闪烁BufferedImage bi = new BufferedImage(window_width, window_height, BufferedImage.TYPE_INT_ARGB);Graphics g2 = bi.createGraphics();//剩余雷的数量g2.setColor(Color.red);//设置画笔颜色g2.setFont(new Font("微软雅黑", 10, 30));//设置字体g2.drawString("雷数:" + mine_mun, 50, 80);//绘制字符//剩余时间g2.setColor(Color.red);//设置画笔颜色g2.setFont(new Font("微软雅黑", 10, 30));//设置字体g2.drawString("时间:无限", window_width - 200, 80);//绘制字符//调用放置小黄脸的方法again();//笑脸位置居中g2.drawImage(image, (window_width - 50) / 2, 45, this);/** 绘制雷区* 根据初始化的雷区数值,循环生成雷区* 0、9::没有掀开,1-8:显示周围雷数、-1掀开*/for (int i = 0; i < mine_crosswise; i++) {for (int j = 0; j < mine_vertical; j++) {if (mine1[i][j] == -1) {try {image = ImageIO.read(new File("D:\\#Java\\个人项目\\MineSweeper\\img\\1.png"));} catch (IOException e) {e.printStackTrace();}g2.drawImage(image, 30 + i * 50, 110 + j * 50, this);continue;}if (mine1[i][j] == 1) {try {image = ImageIO.read(new File("D:\\#Java\\个人项目\\MineSweeper\\img\\01.png"));} catch (IOException e) {e.printStackTrace();}g2.drawImage(image, 30 + i * 50, 110 + j * 50, this);continue;}if (mine1[i][j] == 2) {try {image = ImageIO.read(new File("D:\\#Java\\个人项目\\MineSweeper\\img\\02.png"));} catch (IOException e) {e.printStackTrace();}g2.drawImage(image, 30 + i * 50, 110 + j * 50, this);continue;}if (mine1[i][j] == 3) {try {image = ImageIO.read(new File("D:\\#Java\\个人项目\\MineSweeper\\img\\03.png"));} catch (IOException e) {e.printStackTrace();}g2.drawImage(image, 30 + i * 50, 110 + j * 50, this);continue;}if (mine1[i][j] == 4) {try {image = ImageIO.read(new File("D:\\#Java\\个人项目\\MineSweeper\\img\\04.png"));} catch (IOException e) {e.printStackTrace();}g2.drawImage(image, 30 + i * 50, 110 + j * 50, this);continue;}if (mine1[i][j] == 5) {try {image = ImageIO.read(new File("D:\\#Java\\个人项目\\MineSweeper\\img\\05.png"));} catch (IOException e) {e.printStackTrace();}g2.drawImage(image, 30 + i * 50, 110 + j * 50, this);continue;}if (mine1[i][j] == 6) {try {image = ImageIO.read(new File("D:\\#Java\\个人项目\\MineSweeper\\img\\06.png"));} catch (IOException e) {e.printStackTrace();}g2.drawImage(image, 30 + i * 50, 110 + j * 50, this);continue;}if (mine1[i][j] == 7) {try {image = ImageIO.read(new File("D:\\#Java\\个人项目\\MineSweeper\\img\\07.png"));} catch (IOException e) {e.printStackTrace();}g2.drawImage(image, 30 + i * 50, 110 + j * 50, this);continue;}if (mine1[i][j] == 8) {try {image = ImageIO.read(new File("D:\\#Java\\个人项目\\MineSweeper\\img\\08.png"));} catch (IOException e) {e.printStackTrace();}g2.drawImage(image, 30 + i * 50, 110 + j * 50, this);continue;}if (sign[i][j] == 1) {try {image = ImageIO.read(new File("D:\\#Java\\个人项目\\MineSweeper\\img\\sign.png"));} catch (IOException e) {e.printStackTrace();}g2.drawImage(image, 30 + i * 50, 110 + j * 50, this);continue;}if (uncertainty[i][j] == 1) {try {image = ImageIO.read(new File("D:\\#Java\\个人项目\\MineSweeper\\img\\uncertainty.png"));} catch (IOException e) {e.printStackTrace();}g2.drawImage(image, 30 + i * 50, 110 + j * 50, this);continue;}try {image = ImageIO.read(new File("D:\\#Java\\个人项目\\MineSweeper\\img\\0.png"));} catch (IOException e) {e.printStackTrace();}g2.drawImage(image, 30 + i * 50, 110 + j * 50, this);}}/** 绘制游戏结束后显示的雷* 根据初始化的雷区数值,循环生成雷区* 游戏结束后可显示所有雷位置*/if (judge == 1 || judge == 2) {for (int i = 0; i < mine_crosswise; i++) {for (int j = 0; j < mine_vertical; j++) {if (mine[i][j] == 9) {try {image = ImageIO.read(new File("D:\\#Java\\个人项目\\MineSweeper\\img\\mine.png"));} catch (IOException e) {e.printStackTrace();}g2.drawImage(image, 30 + i * 50, 110 + j * 50, this);}}}}//调用放置地雷的方法place();//将以上所述全部绘制在画布上g.drawImage(bi, 0, 0, this);}/*** 通过递归算法实现连锁* 判断四个边、四个角、和其余的中间部分,如果为零则将其改为-1,代表已翻开* 否则将数字显示出来*/public static void scan(int x, int y) {//上if (x - 1 >= 0 && x + 1 <= mine_crosswise - 1 && y - 1 < 0) {if (mine[x - 1][y] == 0) {mine1[x - 1][y] = mine[x - 1][y] = -1;scan(x - 1, y);} else {mine1[x - 1][y] = mine[x - 1][y];}if (mine[x - 1][y + 1] == 0) {mine1[x - 1][y + 1] = mine[x - 1][y + 1] = -1;scan(x - 1, y + 1);} else {mine1[x - 1][y + 1] = mine[x - 1][y + 1];}if (mine[x][y + 1] == 0) {mine1[x][y + 1] = mine[x][y + 1] = -1;scan(x, y + 1);} else {mine1[x][y + 1] = mine[x][y + 1];}if (mine[x + 1][y + 1] == 0) {mine1[x + 1][y + 1] = mine[x + 1][y + 1] = -1;scan(x + 1, y + 1);} else {mine1[x + 1][y + 1] = mine[x + 1][y + 1];}if (mine[x + 1][y] == 0) {mine1[x + 1][y] = mine[x + 1][y] = -1;scan(x + 1, y);} else {mine1[x + 1][y] = mine[x + 1][y];}}//下if (x - 1 >= 0 && x + 1 <= mine_crosswise - 1 && y + 1 > mine_vertical - 1) {if (mine[x - 1][y] == 0) {mine1[x - 1][y] = mine[x - 1][y] = -1;scan(x - 1, y);} else {mine1[x - 1][y] = mine[x - 1][y];}if (mine[x - 1][y - 1] == 0) {mine1[x - 1][y - 1] = mine[x - 1][y - 1] = -1;scan(x - 1, y - 1);} else {mine1[x - 1][y - 1] = mine[x - 1][y - 1];}if (mine[x][y - 1] == 0) {mine1[x][y - 1] = mine[x][y - 1] = -1;scan(x, y - 1);} else {mine1[x][y - 1] = mine[x][y - 1];}if (mine[x + 1][y - 1] == 0) {mine1[x + 1][y - 1] = mine[x + 1][y - 1] = -1;scan(x + 1, y - 1);} else {mine1[x + 1][y - 1] = mine[x + 1][y - 1];}if (mine[x + 1][y] == 0) {mine1[x + 1][y] = mine[x + 1][y] = -1;scan(x + 1, y);} else {mine1[x + 1][y] = mine[x + 1][y];}}//左if (y - 1 >= 0 && y + 1 <= mine_crosswise - 1 && x - 1 < 0) {if (mine[x][y - 1] == 0) {mine1[x][y - 1] = mine[x][y - 1] = -1;scan(x, y - 1);} else {mine1[x][y - 1] = mine[x][y - 1];}if (mine[x + 1][y - 1] == 0) {mine1[x + 1][y - 1] = mine[x + 1][y - 1] = -1;scan(x + 1, y - 1);} else {mine1[x + 1][y - 1] = mine[x + 1][y - 1];}if (mine[x + 1][y] == 0) {mine1[x + 1][y] = mine[x + 1][y] = -1;scan(x + 1, y);} else {mine1[x + 1][y] = mine[x + 1][y];}if (mine[x + 1][y + 1] == 0) {mine1[x + 1][y + 1] = mine[x + 1][y + 1] = -1;scan(x + 1, y + 1);} else {mine1[x + 1][y + 1] = mine[x + 1][y + 1];}if (mine[x][y + 1] == 0) {mine1[x][y + 1] = mine[x][y + 1] = -1;scan(x, y + 1);} else {mine1[x][y + 1] = mine[x][y + 1];}}//右if (y - 1 >= 0 && y + 1 <= mine_vertical - 1 && x + 1 > mine_crosswise - 1) {if (mine[x][y - 1] == 0) {mine1[x][y - 1] = mine[x][y - 1] = -1;scan(x, y - 1);} else {mine1[x][y - 1] = mine[x][y - 1];}if (mine[x - 1][y - 1] == 0) {mine1[x - 1][y - 1] = mine[x - 1][y - 1] = -1;scan(x - 1, y - 1);} else {mine1[x - 1][y - 1] = mine[x - 1][y - 1];}if (mine[x - 1][y] == 0) {mine1[x - 1][y] = mine[x - 1][y] = -1;scan(x - 1, y);} else {mine1[x - 1][y] = mine[x - 1][y];}if (mine[x - 1][y + 1] == 0) {mine1[x - 1][y + 1] = mine[x - 1][y + 1] = -1;scan(x - 1, y + 1);} else {mine1[x - 1][y + 1] = mine[x - 1][y + 1];}if (mine[x][y + 1] == 0) {mine1[x][y + 1] = mine[x][y + 1] = -1;scan(x, y + 1);} else {mine1[x][y + 1] = mine[x][y + 1];}}//左上角if (x - 1 < 0 && y - 1 < 0) {if (mine[x + 1][y] == 0) {mine1[x + 1][y] = mine[x + 1][y] = -1;scan(x + 1, y);} else {mine1[x + 1][y] = mine[x + 1][y];}if (mine[x][y + 1] == 0) {mine1[x][y + 1] = mine[x][y + 1] = -1;scan(x, y + 1);} else {mine1[x][y + 1] = mine[x][y + 1];}if (mine[x + 1][y + 1] == 0) {mine1[x + 1][y + 1] = mine[x + 1][y + 1] = -1;scan(x + 1, y + 1);} else {mine1[x + 1][y + 1] = mine[x + 1][y + 1];}}//右上角if (x + 1 >= mine_crosswise && y - 1 < 0) {if (mine[x - 1][y] == 0) {mine1[x - 1][y] = mine[x - 1][y] = -1;scan(x - 1, y);} else {mine1[x - 1][y] = mine[x - 1][y];}if (mine[x][y + 1] == 0) {mine1[x][y + 1] = mine[x][y + 1] = -1;scan(x, y + 1);} else {mine1[x][y + 1] = mine[x][y + 1];}if (mine[x - 1][y + 1] == 0) {mine1[x - 1][y + 1] = mine[x - 1][y + 1] = -1;scan(x - 1, y + 1);} else {mine1[x - 1][y + 1] = mine[x - 1][y + 1];}}//左下角if (x - 1 < 0 && y + 1 >= mine_vertical) {if (mine[x + 1][y] == 0) {mine1[x + 1][y] = mine[x + 1][y] = -1;scan(x + 1, y);} else {mine1[x + 1][y] = mine[x + 1][y];}if (mine[x][y - 1] == 0) {mine1[x][y - 1] = mine[x][y - 1] = -1;scan(x, y - 1);} else {mine1[x][y - 1] = mine[x][y - 1];}if (mine[x + 1][y - 1] == 0) {mine1[x + 1][y - 1] = mine[x + 1][y - 1] = -1;scan(x + 1, y - 1);} else {mine1[x + 1][y - 1] = mine[x + 1][y - 1];}}//右下角if (x + 1 >= mine_crosswise && y + 1 >= mine_vertical) {if (mine[x - 1][y] == 0) {mine1[x - 1][y] = mine[x - 1][y] = -1;scan(x - 1, y);} else {mine1[x - 1][y] = mine[x - 1][y];}if (mine[x][y - 1] == 0) {mine1[x][y - 1] = mine[x][y - 1] = -1;scan(x, y - 1);} else {mine1[x][y - 1] = mine[x][y - 1];}if (mine[x - 1][y - 1] == 0) {mine1[x - 1][y - 1] = mine[x - 1][y - 1] = -1;scan(x - 1, y - 1);} else {mine1[x - 1][y - 1] = mine[x - 1][y - 1];}}//中间部分if (x - 1 >= 0 && y - 1 >= 0 && x + 1 < mine_crosswise && y + 1 < mine_vertical) {if (mine[x - 1][y - 1] == 0) {mine1[x - 1][y - 1] = mine[x - 1][y - 1] = -1;scan(x - 1, y - 1);} else {mine1[x - 1][y - 1] = mine[x - 1][y - 1];}if (mine[x - 1][y] == 0) {mine1[x - 1][y] = mine[x - 1][y] = -1;scan(x - 1, y);} else {mine1[x - 1][y] = mine[x - 1][y];}if (mine[x - 1][y + 1] == 0) {mine1[x][y - 1] = mine[x][y - 1] = -1;scan(x - 1, y + 1);} else {mine1[x][y - 1] = mine[x][y - 1];}if (mine[x][y - 1] == 0) {mine1[x][y - 1] = mine[x][y - 1] = -1;scan(x, y - 1);} else {mine1[x][y - 1] = mine[x][y - 1];}if (mine[x][y + 1] == 0) {mine1[x][y + 1] = mine[x][y + 1] = -1;scan(x, y + 1);} else {mine1[x][y + 1] = mine[x][y + 1];}if (mine[x + 1][y - 1] == 0) {mine1[x + 1][y - 1] = mine[x + 1][y - 1] = -1;scan(x + 1, y - 1);} else {mine1[x + 1][y - 1] = mine[x + 1][y - 1];}if (mine[x + 1][y] == 0) {mine1[x + 1][y] = mine[x + 1][y] = -1;scan(x + 1, y);} else {mine1[x + 1][y] = mine[x + 1][y];}if (mine[x + 1][y + 1] == 0) {mine1[x + 1][y + 1] = mine[x + 1][y + 1] = -1;scan(x + 1, y + 1);} else {mine1[x + 1][y + 1] = mine[x + 1][y + 1];}}}/*** 小黄脸——重新开始按钮* 判断游戏当前状态,改变小黄脸的表情*/public static void again() {if (judge == 0) {try {image = ImageIO.read(new File("D:\\#Java\\个人项目\\MineSweeper\\img\\playing.png"));} catch (IOException e) {e.printStackTrace();}} else if (judge == 1) {try {image = ImageIO.read(new File("D:\\#Java\\个人项目\\MineSweeper\\img\\win.png"));} catch (IOException e) {e.printStackTrace();}} else if (judge == 2) {try {image = ImageIO.read(new File("D:\\#Java\\个人项目\\MineSweeper\\img\\lose.png"));} catch (IOException e) {e.printStackTrace();}}}/*** 放置地雷* 利用当前时间为随机数种子* 随机二位数组的位置,赋值为1,代表此处有雷* 如果随机到已经有雷的区域,则跳出循环,重新随机* 放置雷后将周围数值加1*/public static void place() {if (mine_place == false) {Random r = new Random();int x, y;for (int i = 0; i < mine_mun; i++) {x = r.nextInt(mine_mun);y = r.nextInt(mine_mun);if (mine[x][y] == 9) {i--;continue;}mine1[x][y] = mine[x][y] = 9;//上if (x - 1 >= 0 && x + 1 <= mine_crosswise - 1 && y - 1 < 0) {if (mine[x - 1][y] != 9) {mine[x - 1][y]++;}if (mine[x - 1][y + 1] != 9) {mine[x - 1][y + 1]++;}if (mine[x][y + 1] != 9) {mine[x][y + 1]++;}if (mine[x + 1][y + 1] != 9) {mine[x + 1][y + 1]++;}if (mine[x + 1][y] != 9) {mine[x + 1][y]++;}}//下if (x - 1 >= 0 && x + 1 <= mine_crosswise - 1 && y + 1 > mine_vertical - 1) {if (mine[x - 1][y] != 9) {mine[x - 1][y]++;}if (mine[x - 1][y - 1] != 9) {mine[x - 1][y - 1]++;}if (mine[x][y - 1] != 9) {mine[x][y - 1]++;}if (mine[x + 1][y - 1] != 9) {mine[x + 1][y - 1]++;}if (mine[x + 1][y] != 9) {mine[x + 1][y]++;}}//左if (y - 1 >= 0 && y + 1 <= mine_crosswise - 1 && x - 1 < 0) {if (mine[x][y - 1] != 9) {mine[x][y - 1]++;}if (mine[x + 1][y - 1] != 9) {mine[x + 1][y - 1]++;}if (mine[x + 1][y] != 9) {mine[x + 1][y]++;}if (mine[x + 1][y + 1] != 9) {mine[x + 1][y + 1]++;}if (mine[x][y + 1] != 9) {mine[x][y + 1]++;}}//右if (y - 1 >= 0 && y + 1 <= mine_vertical - 1 && x + 1 > mine_crosswise - 1) {if (mine[x][y - 1] != 9) {mine[x][y - 1]++;}if (mine[x - 1][y - 1] != 9) {mine[x - 1][y - 1]++;}if (mine[x - 1][y] != 9) {mine[x - 1][y]++;}if (mine[x - 1][y + 1] != 9) {mine[x - 1][y + 1]++;}if (mine[x][y + 1] != 9) {mine[x][y + 1]++;}}//左上角if (x - 1 < 0 && y - 1 < 0) {if (mine[x + 1][y] != 9) {mine[x + 1][y]++;}if (mine[x][y + 1] != 9) {mine[x][y + 1]++;}if (mine[x + 1][y + 1] != 9) {mine[x + 1][y + 1]++;}}//右上角if (x + 1 >= mine_crosswise && y - 1 < 0) {if (mine[x - 1][y] != 9) {mine[x - 1][y]++;}if (mine[x][y + 1] != 9) {mine[x][y + 1]++;}if (mine[x - 1][y + 1] != 9) {mine[x - 1][y + 1]++;}}//左下角if (x - 1 < 0 && y + 1 >= mine_vertical) {if (mine[x + 1][y] != 9) {mine[x + 1][y]++;}if (mine[x][y - 1] != 9) {mine[x][y - 1]++;}if (mine[x + 1][y - 1] != 9) {mine[x + 1][y - 1]++;}}//右下角if (x + 1 >= mine_crosswise && y + 1 >= mine_vertical) {if (mine[x - 1][y] != 9) {mine[x - 1][y]++;}if (mine[x][y - 1] != 9) {mine[x][y - 1]++;}if (mine[x - 1][y - 1] != 9) {mine[x - 1][y - 1]++;}}//中间部分if (x - 1 >= 0 && y - 1 >= 0 && x + 1 < mine_crosswise && y + 1 < mine_vertical) {if (mine[x - 1][y - 1] != 9) {mine[x - 1][y - 1]++;}if (mine[x - 1][y] != 9) {mine[x - 1][y]++;}if (mine[x - 1][y + 1] != 9) {mine[x - 1][y + 1]++;}if (mine[x][y - 1] != 9) {mine[x][y - 1]++;}if (mine[x][y + 1] != 9) {mine[x][y + 1]++;}if (mine[x + 1][y - 1] != 9) {mine[x + 1][y - 1]++;}if (mine[x + 1][y] != 9) {mine[x + 1][y]++;}if (mine[x + 1][y + 1] != 9) {mine[x + 1][y + 1]++;}}}mine_place = true;}}//---------------------------------------------------------------------------------------------------------------------@Override//鼠标点击public void mouseClicked(MouseEvent e) {//获取鼠标点击位置int x = e.getX();int y = e.getY();//判断是否开始了游戏if (judge == 0) {//判断点击位置是否在雷区内if (x > 30 && x < 30 + mine_crosswise * 50 && y > 110 && y < 110 + mine_vertical * 50) {x = (x - 30) / 50;y = (y - 110) / 50;//判断鼠标点击方式BUTTON1:左键、BUTTON2:中键、BUTTON3:右键if (e.getButton() == MouseEvent.BUTTON1) {//左键代表翻开//判断点击位置是否合法if (sign[x][y] == 0 && uncertainty[x][y] == 0) {//判断点击区域有没有雷if (mine[x][y] != 9) {//调用递归scan(x, y);mine1[x][y] = mine[x][y];this.repaint();} else if (mine[x][y] == 9) {judge = 2;this.repaint();JOptionPane.showMessageDialog(this, "你被雷炸了个粉碎!");}int mun = 0;//计算还有多少个方块没有翻开for (int i = 0; i < mine_crosswise; i++) {for (int j = 0; j < mine_vertical; j++) {if (mine1[i][j] == 0) {++mun;}}}//如果全翻开了,那就赢了if (mun == 0) {judge = 1;this.repaint();JOptionPane.showMessageDialog(this, "你完整的活了下来!");}}} else if (e.getButton() == MouseEvent.BUTTON2) {//中键代表问号if (uncertainty[x][y] == 0 && sign[x][y] == 0) {uncertainty[x][y] = 1;} else if (uncertainty[x][y] == 1) {uncertainty[x][y] = 0;}this.repaint();} else if (e.getButton() == MouseEvent.BUTTON3) {//右键代表插旗if (sign[x][y] == 0 && sign_mun < mine_mun && uncertainty[x][y] == 0) {sign[x][y] = 1;sign_mun++;} else if (sign[x][y] == 1) {sign[x][y] = 0;sign_mun--;}this.repaint();}}//重新开始按钮——小黄脸if (x >= (window_width - 50) / 2 && y >= 45 && x <= (window_width - 50) / 2 + 50 && y <= 45 + 50) {//重置所有数据mine_mun = 10;//初始化雷的数量//初始化二维数组for (int i = 0; i < mine_crosswise; i++) {for (int j = 0; j < mine_vertical; j++) {mine[i][j] = 0;mine1[i][j] = 0;sign[i][j] = 0;uncertainty[i][j] = 0;}}mine_place = false;//绘制雷的开关//生成新的数据again();//小黄脸的新状态place();//雷的新位置judge = 0;//恢复游戏状态this.repaint();}}}@Override//鼠标按下public void mousePressed(MouseEvent e) {}@Override//鼠标抬起public void mouseReleased(MouseEvent e) {}@Override//鼠标进入public void mouseEntered(MouseEvent e) {}@Override//鼠标离开public void mouseExited(MouseEvent e) {}}

结束语

  实现的功能比较简单,有时间的话可以再升级一下,比如调难度啥的,我也整个闯关,哈哈。
  BUG不可避免,我自己玩了几遍,暂时还没发现什么严重的问题,如果有问题,欢迎私信或到评论区指正。

  往期Java小游戏还有:
  五子棋全代码
  贪吃蛇全代码

  我一直坚持“分享知识”的原则,免费透明的将代码公开展示,如果帮到了你,请顺手点个赞吧(#.#)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/25105.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编写代码实现简单的扫雷游戏

扫雷 菜单 比较简单&#xff0c;代码如下 void menu() {printf("*******************\n");printf("**** 1. play ****\n");printf("**** 0. exit ****\n");printf("*******************\n"); }效果如图 然后就是根据不同的输入…

【C语言】扫雷游戏详解及完整代码

文章目录 前言一、程序环境配置二、各种功能的实现以及逻辑关系的整理2.1 创建游戏初始界面&#xff08;进入\退出 游戏&#xff09;2.2 创建并初始化二维数组board[][] mine[][] (board存放棋盘的信息 mine存放雷的信息)2.3 初始化棋盘2.4 打印棋盘2.5 设置雷区2.6 扫雷 三、完…

互联网最值得加入的 173 家国企名单

大家好&#xff01;我是韩老师。 今年的就业相比以往是难了不少&#xff0c;感受到的人都懂。有一位学妹毕业后在互联网公司工作了两年多&#xff0c;受到的业绩考核压力越来越大&#xff0c;萌发了跳去国企的念头&#xff0c;和她通话聊了挺久。 就是这次的起因&#xff0c;给…

苹果,王炸产品来了!下一个 iPhone 诞生了?

推荐阅读&#xff1a; 《实名举报&#xff01;》 《简单&#xff0c;聊两句。》 1 科技界春晚 知道为什么&#xff0c;总称苹果发布会为科技界的春晚吗&#xff1f; 因为苹果总是可以结合最新工艺、制造、科技&#xff0c;打造出一个跨越时代的产品&#xff0c;或者说可以称之为…

30岁硕士拿100万在云南开启“吃利息躺平式养老” 现在年轻人在怎样规划养老?...

上一篇&#xff1a;阿里巴巴裁员19576人&#xff01; 你考虑过养老吗&#xff1f;你觉得积攒多少钱&#xff0c;可提前退休过上安详的退休生活&#xff1f;在网上&#xff0c;一位30岁的年轻硕士拿着100万元的本金&#xff0c;在云南过上了吃利息的“躺平式养老”生活&#xff…

朋友,承认吧,你可能根本不懂 ChatGPT

© 2023 Conmajia 人工智能在各个行业的采用率都在上升&#xff0c;强大的语言模型 ChatGPT 似乎成为了一种特别受欢迎的业务开发工具。Chat 表示这是一个聊天机器人&#xff0c;GPT 是“Generative Pre-Training”预训练的缩写。然而&#xff0c;似乎多数使用者因为对方可…

2023-H1--CSDN-文库研发团队总结

目录 前言 整体数据 业务功能的迭代 1、创作者分层 2、专题上新 3、新文库-AIGC内容 4、ChatDoc 团队技术输出 多篇技术博客 技术分享直播 前言 晃眼之间&#xff0c;2023年已经过半&#xff0c;那么今天就总结一下我们团队在2023年上半年度所做的工作。2023年上半年…

windows中CMake的安装与配置

本文提供两种方法安装CMake命令&#xff0c;不知道自己电脑有没有CMake命令行的同学可以输入 cmake -version 查看。 如果出现类似于下图所示&#xff0c;则电脑中已经安装有CMake命令&#xff0c;安装本文方法安装后也可用该方法检查是否成功安装CMake. 如果没有出现cmake …

Electron客户端的自动升级方案-2022版

基于Electron开发了桌面应用程序&#xff0c;最后免不了要做安装包&#xff0c;还少不了“在线升级”功能。Electron号称支持自动升级&#xff0c;但真到动手做的时候&#xff0c;才发现并没有官方文档上说得那么简单。最近在网上看了不少文章&#xff0c;反复尝试&#xff0c;…

ControlNet 和 T2I-Adapter,控制Stable Diffusion的不受控制的力量,AI 图像生成精确控制的破冰解决方案(教程含免安装使用方式)

控制Stable Diffusion的不受控制的力量 人工智能艺术社区的兴奋在最近几天达到顶峰,让我想起了去年 Stable Diffusion 的首次发布。本次重点介绍基于Stable Diffusion 1.5的轻量级预训练模型ControlNet,可以检测输入图像中的边缘、深度图或姿态骨架,结合文字提示,精准指导…

chatgpt赋能python:Python免安装怎么用?

Python免安装怎么用&#xff1f; 什么是Python&#xff1f; Python是一种高级、解释型、交互式、面向对象的编程语言。它被广泛应用于Web开发、数据科学、人工智能、网络爬虫、游戏开发等领域。Python拥有简洁明了的语法&#xff0c;使得它易于上手&#xff0c;同时也具有强大…

如何用TL084制作低音炮电路

本低音电路具有适应面广、可调性强、选择性好、失真度低的特点&#xff0c;并可进行特性设置&#xff0c;与合适的扬声器 系统配有源箱&#xff0c;适用于重低音重放。 图1所示的是低音处理电路。4个运算放大器IClB、IClA、IClC和IClD分别承担输入放大、窄频带滤波调节、宽…

干货·Doherty功放设计

当今世界&#xff0c;通信技术的发展可谓日新月异&#xff08;准确来说是人类的欲望日新月异...&#xff09;&#xff0c;然而当前人类所依赖的无线通信完全借由无线电&#xff0c;频段还大都集中在C频段以下&#xff0c;相当拥挤。那么&#xff0c;为了在有限的频谱资源内增加…

IU8689+IU5706 单声道100W/立体声60W同步升压+功放IC大功率拉杆音箱应用组合方案

引言 目前中大功率拉杆音箱主要采用12V铅酸电池为供电电源&#xff0c;在电源直供的时候&#xff0c;一般的功放芯片输出功率在20W左右&#xff08;喇叭为4欧、THD10%&#xff09;。超过50W的功率现阶段市场上主要采用升压芯片TPA3116的组合解决方案。 随着竞争的加剧&#x…

华为Push用户增长服务:精准触达,加速增长

速戳了解华为Push用户增长服务&#xff1a;通过精细化运营&#xff0c;助力开发者高效实现用户增长&#xff0c;提升用户活跃度和粘性&#xff01; 合作咨询请点此链接 了解更多详情>> 访问华为开发者联盟官网 获取开发指导文档 华为移动服务开源仓库地址&#xff1a;G…

华为Vo5G技术EPSFB

EPS FB EPS FB即 EPS Fallback&#xff0c;5G NR 初期不提供语音业务&#xff0c;当 gNB 在 NR 上建立 IMS话音 通道时触发切换&#xff0c;此时 gNB 向 5GC 发起重定向或者 inter-RAT切换请求&#xff0c;回落到 LTE 网络&#xff0c;由 VoLTE提供服务&#xff0c;如下&#…

OpenAI最新官方ChatGPT聊天插件接口《插件示例demo》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(四)(附源码)

Example plugins 插件示例demo 前言Introduction 导言Learn how to build a simple todo list plugin with no auth 了解如何构建一个简单的待办事项列表插件&#xff0c;无需授权Learn how to build a simple todo list plugin with service level auth 了解如何构建一个简单的…

一个简单的星座运势查询APP

先看效果图如下&#xff1a; 这是一个简单的星座运势查看的APP。 先来看欢迎界面&#xff0c;欢迎界面很简单&#xff0c;只要是一个简单的动画播放效果&#xff0c;然后对动画播放设置监听&#xff0c;当动画播放结束后自动跳转到主界面。欢迎界面主要代码如下&#xff1a; p…

运气指数测试软件,测一测最近的运势如何,有什么测试运势的软件

说到测一测最近的运势如何&#xff0c;大家都了解&#xff0c;有人问求测算运程&#xff0c;最近不太顺利&#xff0c;另外&#xff0c;还有人想问最近运势不太好&#xff0c;帮帮测里的大师能化解吗&#xff0c;这是怎么回事&#xff1f;其实有好家伙测试运势的软件吗&#xf…

chatgpt赋能python:Python排队:提高效率、优化流程的神器

Python排队&#xff1a;提高效率、优化流程的神器 随着科技的不断进步&#xff0c;排队已经成为了现代生活中不可避免的一部分。在各个行业中&#xff0c;排队都是必须考虑的问题&#xff0c;包括餐馆、医院、机场和银行等等。针对排队问题&#xff0c;我们可以使用Python编程…