返回顶部
首页 > 资讯 > 后端开发 > Python >Java实现扫雷游戏详细代码讲解
  • 201
分享到

Java实现扫雷游戏详细代码讲解

2024-04-02 19:04:59 201人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录效果展示难度选择展示游戏界面展示代码展示主类:GameWin类底层地图MapBottom类顶层地图MapTop类底层数字BottomNum类初始化地雷BottomRay类工具Ga

大家好!上一期我们使用GUI技术写了一个简单的扫雷小游戏,今天对这个Java应用程序更新迭代,增加了难度选择等功能,修复了已知的几个问题。成为初学者学习的好项目!Java实现扫雷小游戏【完整版】

效果展示

难度选择展示

游戏界面展示

代码展示

主类:GameWin类

//主类
package com.sxt;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
public class GameWin extends JFrame {
    int width = 2 * GameUtil.OFFSET + GameUtil.MAP_W * GameUtil.SQUARE_LENGTH;
    int height = 4 * GameUtil.OFFSET + GameUtil.MAP_H * GameUtil.SQUARE_LENGTH;
    Image offScreenImage = null;
    MapBottom mapBottom = new MapBottom();
    MapTop mapTop = new MapTop();
    GameSelect gameSelect = new GameSelect();
    //是否开始,false未开始,true开始
    boolean begin=false;
    void launch(){
        GameUtil.START_TIME=System.currentTimeMillis();
        this.setVisible(true);
        if(GameUtil.state==3){
            this.setSize(500,500);
        }else {
            this.setSize(width,height);
        }
        this.setLocationRelativeTo(null);
        this.setTitle("Java扫雷小游戏");
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        //鼠标事件
        this.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                super.mouseClicked(e);
                switch (GameUtil.state){
                    case 0 :
                        if(e.getButton()==1){
                            GameUtil.MOUSE_X = e.getX();
                            GameUtil.MOUSE_Y = e.getY();
                            GameUtil.LEFT = true;
                        }
                        if(e.getButton()==3) {
                            GameUtil.MOUSE_X = e.getX();
                            GameUtil.MOUSE_Y = e.getY();
                            GameUtil.RIGHT = true;
                        }
                    case 1 :
                    case 2 :
                        if(e.getButton()==1){
                            if(e.getX()>GameUtil.OFFSET + GameUtil.SQUARE_LENGTH*(GameUtil.MAP_W/2)
                                    && e.getX()<GameUtil.OFFSET + GameUtil.SQUARE_LENGTH*(GameUtil.MAP_W/2) + GameUtil.SQUARE_LENGTH
                                    && e.getY()>GameUtil.OFFSET
                                    && e.getY()<GameUtil.OFFSET+GameUtil.SQUARE_LENGTH){
                                mapBottom.reGame();
                                mapTop.reGame();
                                GameUtil.FLAG_NUM=0;
                                GameUtil.START_TIME=System.currentTimeMillis();
                                GameUtil.state=0;
                            }
                        }
                        if(e.getButton()==2){
                            GameUtil.state=3;
                            begin=true;
                        }
                        break;
                    case 3:
                        if(e.getButton()==1){
                            GameUtil.MOUSE_X = e.getX();
                            GameUtil.MOUSE_Y = e.getY();
                            begin = gameSelect.hard();
                        }
                        break;
                    default:
                }
            }
        });
        while (true){
            repaint();
            begin();
            try {
                Thread.sleep(40);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    void begin(){
        if(begin){
            begin=false;
            gameSelect.hard(GameUtil.level);
            dispose();
            GameWin gameWin = new GameWin();
            GameUtil.START_TIME = System.currentTimeMillis();
            GameUtil.FLAG_NUM=0;
            mapBottom.reGame();
            mapTop.reGame();
            gameWin.launch();
        }
    }
    @Override
    public void paint(Graphics g) {
        if(GameUtil.state==3){
            g.setColor(Color.lightGray);
            g.fillRect(0,0,500,500);
            gameSelect.paintSelf(g);
        }else {
            offScreenImage = this.createImage(width, height);
            Graphics gImage = offScreenImage.getGraphics();
            //设置背景颜色
            gImage.setColor(Color.lightGray);
            gImage.fillRect(0, 0, width, height);
            mapBottom.paintSelf(gImage);
            mapTop.paintSelf(gImage);
            g.drawImage(offScreenImage, 0, 0, null);
        }
    }
    public static void main(String[] args) {
        GameWin gameWin = new GameWin();
        gameWin.launch();
    }
}

底层地图MapBottom类

//底层地图类
package com.sxt;
import java.awt.*;
public class MapBottom {
    BottomRay bottomRay = new BottomRay();
    BottomNum bottomNum = new BottomNum();
    {
        bottomRay.newRay();
        bottomNum.newNum();
    }
    //重置游戏
    void reGame(){
        for (int i = 1; i <=GameUtil.MAP_W ; i++) {
            for (int j = 1; j <=GameUtil.MAP_H ; j++) {
                GameUtil.DATA_BOTTOM[i][j]=0;
            }
        }
        bottomRay.newRay();
        bottomNum.newNum();
    }
    //绘制方法
    void paintSelf(Graphics g){
        g.setColor(Color.red);
        //画竖线
        for (int i = 0; i <= GameUtil.MAP_W; i++) {
            g.drawLine(GameUtil.OFFSET + i * GameUtil.SQUARE_LENGTH,
                    3*GameUtil.OFFSET,
                    GameUtil.OFFSET+i*GameUtil.SQUARE_LENGTH,
                    3*GameUtil.OFFSET+GameUtil.MAP_H*GameUtil.SQUARE_LENGTH);
        }
        //画横线
        for (int i = 0; i <=GameUtil.MAP_H; i++){
            g.drawLine(GameUtil.OFFSET,
                    3*GameUtil.OFFSET+i*GameUtil.SQUARE_LENGTH,
                    GameUtil.OFFSET+GameUtil.MAP_W*GameUtil.SQUARE_LENGTH,
                    3*GameUtil.OFFSET+i*GameUtil.SQUARE_LENGTH);
        }
        for (int i = 1; i <= GameUtil.MAP_W ; i++) {
            for (int j = 1; j <= GameUtil.MAP_H; j++) {
                //雷
                if (GameUtil.DATA_BOTTOM[i][j] == -1) {
                    g.drawImage(GameUtil.lei,
                            GameUtil.OFFSET + (i - 1) * GameUtil.SQUARE_LENGTH + 1,
                            GameUtil.OFFSET * 3 + (j - 1) * GameUtil.SQUARE_LENGTH + 1,
                            GameUtil.SQUARE_LENGTH - 2,
                            GameUtil.SQUARE_LENGTH - 2,
                            null);
                }
                //数字
                if (GameUtil.DATA_BOTTOM[i][j] >=0) {
                    g.drawImage(GameUtil.images[GameUtil.DATA_BOTTOM[i][j]],
                            GameUtil.OFFSET + (i - 1) * GameUtil.SQUARE_LENGTH + 15,
                            GameUtil.OFFSET * 3 + (j - 1) * GameUtil.SQUARE_LENGTH + 5,
                            null);
                }
            }
        }
        //绘制数字 剩余雷数,倒计时
        GameUtil.drawWord(g,""+(GameUtil.RAY_MAX-GameUtil.FLAG_NUM),
                GameUtil.OFFSET,
                2*GameUtil.OFFSET,30,Color.red);
        GameUtil.drawWord(g,""+(GameUtil.END_TIME-GameUtil.START_TIME)/1000,
                GameUtil.OFFSET + GameUtil.SQUARE_LENGTH*(GameUtil.MAP_W-1),
                2*GameUtil.OFFSET,30,Color.red);
        switch (GameUtil.state){
            case 0:
                GameUtil.END_TIME=System.currentTimeMillis();
                g.drawImage(GameUtil.face,
                        GameUtil.OFFSET + GameUtil.SQUARE_LENGTH * (GameUtil.MAP_W/2),
                        GameUtil.OFFSET,
                        null);
                break;
            case 1:
                g.drawImage(GameUtil.win,
                        GameUtil.OFFSET + GameUtil.SQUARE_LENGTH * (GameUtil.MAP_W/2),
                        GameUtil.OFFSET,
                        null);
                break;
            case 2:
                g.drawImage(GameUtil.over,
                        GameUtil.OFFSET + GameUtil.SQUARE_LENGTH * (GameUtil.MAP_W/2),
                        GameUtil.OFFSET,
                        null);
                break;
            default:
        }
    }
}

顶层地图MapTop类

//顶层地图类
package com.sxt;
import java.awt.*;
public class MapTop {
    //格子位置
    int temp_x;
    int temp_y;
    //重置游戏
    void reGame(){
        for (int i = 1; i <=GameUtil.MAP_W ; i++) {
            for (int j = 1; j <=GameUtil.MAP_H ; j++) {
                GameUtil.DATA_TOP[i][j]=0;
            }
        }
    }
    //判断逻辑
    void logic(){
        temp_x=0;
        temp_y=0;
        if(GameUtil.MOUSE_X>GameUtil.OFFSET && GameUtil.MOUSE_Y>3*GameUtil.OFFSET){
            temp_x = (GameUtil.MOUSE_X - GameUtil.OFFSET)/GameUtil.SQUARE_LENGTH+1;
            temp_y = (GameUtil.MOUSE_Y - GameUtil.OFFSET * 3)/GameUtil.SQUARE_LENGTH+1;
        }
        if(temp_x>=1 && temp_x<=GameUtil.MAP_W
                && temp_y>=1 && temp_y<=GameUtil.MAP_H){
            if(GameUtil.LEFT){
                //覆盖,则翻开
                if(GameUtil.DATA_TOP[temp_x][temp_y]==0){
                    GameUtil.DATA_TOP[temp_x][temp_y]=-1;
                }
                spaceOpen(temp_x,temp_y);
                GameUtil.LEFT=false;
            }
            if(GameUtil.RIGHT){
                //覆盖则插旗
                if(GameUtil.DATA_TOP[temp_x][temp_y]==0){
                    GameUtil.DATA_TOP[temp_x][temp_y]=1;
                    GameUtil.FLAG_NUM++;
                }
                //插旗则取消
                else if(GameUtil.DATA_TOP[temp_x][temp_y]==1){
                    GameUtil.DATA_TOP[temp_x][temp_y]=0;
                    GameUtil.FLAG_NUM--;
                }
                else if(GameUtil.DATA_TOP[temp_x][temp_y]==-1){
                    numOpen(temp_x,temp_y);
                }
                GameUtil.RIGHT=false;
            }
        }
        boom();
        victory();
    }
    //数字翻开
    void numOpen(int x,int y){
        //记录旗数
        int count=0;
        if(GameUtil.DATA_BOTTOM[x][y]>0){
            for (int i = x-1; i <=x+1 ; i++) {
                for (int j = y-1; j <=y+1 ; j++) {
                    if(GameUtil.DATA_TOP[i][j]==1){
                        count++;
                    }
                }
            }
            if(count==GameUtil.DATA_BOTTOM[x][y]){
                for (int i = x-1; i <=x+1 ; i++) {
                    for (int j = y-1; j <=y+1 ; j++) {
                        if(GameUtil.DATA_TOP[i][j]!=1){
                            GameUtil.DATA_TOP[i][j]=-1;
                        }
                        //必须在雷区当中
                        if(i>=1&&j>=1&&i<=GameUtil.MAP_W&&j<=GameUtil.MAP_H){
                            spaceOpen(i,j);
                        }
                    }
                }
            }
        }
    }
    //失败判定  t 表示失败 f 未失败
    boolean boom(){
        if(GameUtil.FLAG_NUM==GameUtil.RAY_MAX){
            for (int i = 1; i <=GameUtil.MAP_W ; i++) {
                for (int j = 1; j <=GameUtil.MAP_H ; j++) {
                    if(GameUtil.DATA_TOP[i][j]==0){
                        GameUtil.DATA_TOP[i][j]=-1;
                    }
                }
            }
        }
        for (int i = 1; i <=GameUtil.MAP_W ; i++) {
            for (int j = 1; j <=GameUtil.MAP_H ; j++) {
                if(GameUtil.DATA_BOTTOM[i][j]==-1&&GameUtil.DATA_TOP[i][j]==-1){
                    GameUtil.state = 2;
                    seeBoom();
                    return true;
                }
            }
        }
        return false;
    }
    //失败显示
    void seeBoom(){
        for (int i = 1; i <=GameUtil.MAP_W ; i++) {
            for (int j = 1; j <=GameUtil.MAP_H ; j++) {
                //底层是雷,顶层不是旗,显示
                if(GameUtil.DATA_BOTTOM[i][j]==-1&&GameUtil.DATA_TOP[i][j]!=1){
                    GameUtil.DATA_TOP[i][j]=-1;
                }
                //底层不是雷,顶层是旗,显示差错旗
                if(GameUtil.DATA_BOTTOM[i][j]!=-1&&GameUtil.DATA_TOP[i][j]==1){
                    GameUtil.DATA_TOP[i][j]=2;
                }
            }
        }
    }
    //胜利判断  t 表示胜利 f 未胜利
    boolean victory(){
        //统计未打开格子数
        int count=0;
        for (int i = 1; i <=GameUtil.MAP_W ; i++) {
            for (int j = 1; j <=GameUtil.MAP_H ; j++) {
                if(GameUtil.DATA_TOP[i][j]!=-1){
                    count++;
                }
            }
        }
        if(count==GameUtil.RAY_MAX){
            GameUtil.state=1;
            for (int i = 1; i <=GameUtil.MAP_W ; i++) {
                for (int j = 1; j <=GameUtil.MAP_H ; j++) {
                    //未翻开,变成旗
                    if(GameUtil.DATA_TOP[i][j]==0){
                        GameUtil.DATA_TOP[i][j]=1;
                    }
                }
            }
            return true;
        }
        return false;
    }
    //打开空格
    void spaceOpen(int x,int y){
        if(GameUtil.DATA_BOTTOM[x][y]==0){
            for (int i = x-1; i <=x+1 ; i++) {
                for (int j = y-1; j <=y+1 ; j++) {
                    //覆盖,才递归
                    if(GameUtil.DATA_TOP[i][j]!=-1){
                        if(GameUtil.DATA_TOP[i][j]==1){GameUtil.FLAG_NUM--;}
                        GameUtil.DATA_TOP[i][j]=-1;
                        //必须在雷区当中
                        if(i>=1&&j>=1&&i<=GameUtil.MAP_W&&j<=GameUtil.MAP_H){
                            spaceOpen(i,j);
                        }
                    }
                }
            }
        }
    }
    //绘制方法
    void paintSelf(Graphics g){
        logic();
        for (int i = 1; i <= GameUtil.MAP_W ; i++) {
            for (int j = 1; j <= GameUtil.MAP_H; j++) {
                //覆盖
                if (GameUtil.DATA_TOP[i][j] == 0) {
                    g.drawImage(GameUtil.top,
                            GameUtil.OFFSET + (i - 1) * GameUtil.SQUARE_LENGTH + 1,
                            GameUtil.OFFSET * 3 + (j - 1) * GameUtil.SQUARE_LENGTH + 1,
                            GameUtil.SQUARE_LENGTH - 2,
                            GameUtil.SQUARE_LENGTH - 2,
                            null);
                }
                //插旗
                if (GameUtil.DATA_TOP[i][j] == 1) {
                    g.drawImage(GameUtil.flag,
                            GameUtil.OFFSET + (i - 1) * GameUtil.SQUARE_LENGTH + 1,
                            GameUtil.OFFSET * 3 + (j - 1) * GameUtil.SQUARE_LENGTH + 1,
                            GameUtil.SQUARE_LENGTH - 2,
                            GameUtil.SQUARE_LENGTH - 2,
                            null);
                }
                //差错旗
                if (GameUtil.DATA_TOP[i][j] == 2) {
                    g.drawImage(GameUtil.noflag,
                            GameUtil.OFFSET + (i - 1) * GameUtil.SQUARE_LENGTH + 1,
                            GameUtil.OFFSET * 3 + (j - 1) * GameUtil.SQUARE_LENGTH + 1,
                            GameUtil.SQUARE_LENGTH - 2,
                            GameUtil.SQUARE_LENGTH - 2,
                            null);
                }
            }
        }
    }
}

底层数字BottomNum类

//底层数字类
package com.sxt;
public class BottomNum {
    void newNum() {
        for (int i = 1; i <=GameUtil.MAP_W ; i++) {
            for (int j = 1; j <=GameUtil.MAP_H ; j++) {
                if(GameUtil.DATA_BOTTOM[i][j]==-1){
                    for (int k = i-1; k <=i+1 ; k++) {
                        for (int l = j-1; l <=j+1 ; l++) {
                            if(GameUtil.DATA_BOTTOM[k][l]>=0){
                                GameUtil.DATA_BOTTOM[k][l]++;
                            }
                        }
                    }
                }
            }
        }
    }
}

初始化地雷BottomRay类

//初始化地雷类
package com.sxt;
public class BottomRay {
    //存放坐标
    static int[] rays = new int[GameUtil.RAY_MAX*2];
    //地雷坐标
    int x,y;
    //是否放置 T 表示可以放置 F 不可放置
    boolean isPlace = true;
    //生成雷
    void newRay() {
        for (int i = 0; i < GameUtil.RAY_MAX*2 ; i=i+2) {
            x= (int) (Math.random()*GameUtil.MAP_W +1);//1-12
            y= (int) (Math.random()*GameUtil.MAP_H +1);//1-12
            //判断坐标是否存在
            for (int j = 0; j < i ; j=j+2) {
                if(x==rays[j] && y==rays[j+1]){
                    i=i-2;
                    isPlace = false;
                    break;
                }
            }
            //将坐标放入数组
            if(isPlace){
                rays[i]=x;
                rays[i+1]=y;
            }
            isPlace = true;
        }
        for (int i = 0; i < GameUtil.RAY_MAX*2; i=i+2) {
            GameUtil.DATA_BOTTOM[rays[i]][rays[i+1]]=-1;
        }
    }
}

工具GameUtil类

//工具类,存放静态参数,工具方法
package com.sxt;
import java.awt.*;
public class GameUtil {
    //地雷个数
    static int RAY_MAX = 100;
    //地图的宽
    static int MAP_W = 36;
    //地图的高
    static int MAP_H = 17;
    //雷区偏移量
    static int OFFSET = 45;
    //格子边长
    static int SQUARE_LENGTH = 50;
    //插旗数量
    static int FLAG_NUM = 0;
    //鼠标相关
    //坐标
    static int MOUSE_X;
    static int MOUSE_Y;
    //状态
    static boolean LEFT = false;
    static boolean RIGHT = false;
    //游戏状态 0 表示游戏中 1 胜利 2 失败 3 难度选择
    static int state = 3;
    //游戏难度
    static int level;
    //倒计时
    static long START_TIME;
    static long END_TIME;
    //底层元素  -1 雷 0 空 1-8 表示对应数字
    static int[][] DATA_BOTTOM = new int[MAP_W+2][MAP_H+2];
    //顶层元素  -1 无覆盖 0 覆盖 1 插旗 2 差错旗
    static int[][] DATA_TOP = new int[MAP_W+2][MAP_H+2];
    //载入图片
    static Image lei = Toolkit.getDefaultToolkit().getImage("imgs/lei.png");
    static Image top = Toolkit.getDefaultToolkit().getImage("imgs/top.gif");
    static Image flag = Toolkit.getDefaultToolkit().getImage("imgs/flag.gif");
    static Image noflag = Toolkit.getDefaultToolkit().getImage("imgs/noflag.png");
    static Image face = Toolkit.getDefaultToolkit().getImage("imgs/face.png");
    static Image over = Toolkit.getDefaultToolkit().getImage("imgs/over.png");
    static Image win = Toolkit.getDefaultToolkit().getImage("imgs/win.png");
    static Image[] images = new Image[9];
    static {
        for (int i = 1; i <=8 ; i++) {
            images[i] = Toolkit.getDefaultToolkit().getImage("imgs/num/"+i+".png");
        }
    }
    static void drawWord(Graphics g,String str,int x,int y,int size,Color color){
        g.setColor(color);
        g.setFont(new Font("仿宋",Font.BOLD,size));
        g.drawString(str,x,y);
    }
}

难度选择GameSelect类

//难度选择类
package com.sxt;
import javax.swing.*;
import java.awt.*;
public class GameSelect  {
    //判断是否点击到难度
    boolean hard(){
        if(GameUtil.MOUSE_X>100&&GameUtil.MOUSE_X<400){
            if(GameUtil.MOUSE_Y>50&&GameUtil.MOUSE_Y<150){
                GameUtil.level=1;
                GameUtil.state=0;
                return true;
            }
            if(GameUtil.MOUSE_Y>200&&GameUtil.MOUSE_Y<300){
                GameUtil.level=2;
                GameUtil.state=0;
                return true;
            }
            if(GameUtil.MOUSE_Y>350&&GameUtil.MOUSE_Y<450){
                GameUtil.level=3;
                GameUtil.state=0;
                return true;
            }
        }
        return false;
    }
    void paintSelf(Graphics g){
        g.setColor(Color.BLACK);
        g.drawRoundRect(100,50,300,100,40,40);
        g.setColor(Color.GRAY);
        g.fillRoundRect(100,50,300,100,40,40);
        GameUtil.drawWord(g,"简单模式",185,110,30,Color.black);
        g.drawRoundRect(100,200,300,100,40,40);
        g.setColor(Color.CYAN);
        g.fillRoundRect(100,200,300,100,40,40);
        GameUtil.drawWord(g,"中等模式",185,260,30,Color.black);
        g.drawRoundRect(100,350,300,100,40,40);
        g.setColor(Color.PINK);
        g.fillRoundRect(100,350,300,100,40,40);
        GameUtil.drawWord(g,"困难模式",185,410,30,Color.black);
    }
    void hard(int level){
        switch (level){
            case 1:
                GameUtil.RAY_MAX = 10;
                GameUtil.MAP_W = 9;
                GameUtil.MAP_H = 9;
                break;
            case 2:
                GameUtil.RAY_MAX = 25;
                GameUtil.MAP_W = 14;
                GameUtil.MAP_H = 14;
                break;
            case 3:
                GameUtil.RAY_MAX = 45;
                GameUtil.MAP_W = 20;
                GameUtil.MAP_H = 14;
                break;
            default:
        }
    }
}

项目结构

本程序共封装了六个类,分别是主类GameWin类,绘制底层地图和绘制顶层地图的类MapBottom类和MapTop类,绘制底层数字的类BottomNum类,以及初始化地雷的BottomRay类和工具GameUtil类,用于存静态参数和方法,最后用于难度选择的方法封装在GameSelect类中。

程序界面布局

不同的难度雷区格子数不同!

总结

游戏的设计类似windows扫雷,用户在图形化用户界面内利用鼠标监听事件标记雷区,左上角表示剩余雷的数量,右上角动态显示使用的时间。用户可选择中间组件按钮重新游戏。

为了解决程序窗口闪动的问题,本程序采用了双缓冲技术。 在使用Java编写扫雷小游戏时遇到了很多问题,在解决问题时,确实对java的面向对象编程有了更加深入的理解。虽然GUI现在并没有很大的市场,甚至好多初学者已经放弃了学习GUI,但是利用GUI编程的过程对于培养编程兴趣,深入理解Java编程有很大的作用。

本程序是初学者练习的好项目,欢迎大家指正!

到此这篇关于Java实现扫雷游戏详细代码讲解的文章就介绍到这了,更多相关Java扫雷内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java实现扫雷游戏详细代码讲解

本文链接: https://lsjlt.com/news/149654.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java实现扫雷游戏详细代码讲解
    目录效果展示难度选择展示游戏界面展示代码展示主类:GameWin类底层地图MapBottom类顶层地图MapTop类底层数字BottomNum类初始化地雷BottomRay类工具Ga...
    99+
    2024-04-02
  • C语言实现扫雷小游戏详细代码
    前言 扫雷是一款很经典的电脑小游戏,扫雷就是要把所有非地雷的格子找出即为胜利,输入到地雷格子就算失败。游戏主区域由很多个方格组成,输入一个方格坐标,方格即被打开并显示出方格中的数字,...
    99+
    2024-04-02
  • Java实现扫雷游戏的代码分享
    目录效果展示主类:GameWin类底层地图MapBottom类顶层地图MapTop类底层数字BottomNum类初始化地雷BottomRay类工具GameUtil类总结效果展示 主...
    99+
    2024-04-02
  • 用java实现扫雷游戏
    用java做出简单一个扫雷游戏,供大家参考,具体内容如下 1.创造窗口 //创建扫雷窗口界面       public Saolei() {                     ...
    99+
    2024-04-02
  • Android 实现扫雷小游戏实例代码
    Android 实现扫雷小游戏实例            &nbs...
    99+
    2022-06-06
    小游戏 Android
  • JAVA实现经典扫雷游戏的示例代码
    目录前言主要设计功能截图代码实现总结前言 windows自带的游戏《扫雷》是陪伴了无数人的经典游戏,本程序参考《扫雷》的规则进行了简化,用java语言实现,采用了swing技术进行了...
    99+
    2024-04-02
  • c++实现扫雷小游戏代码分享
    分成两个源文件和一个头文件 注意:这串代码并不完整,不能够实现当所查坐标周围雷的数量为0时,直接展开周围坐标; 头文件:game.h #include <stdio.h>...
    99+
    2024-04-02
  • C语言实现扫雷游戏详细流程
    目录前言头文件部分主函数部分(源文件)函数定义(原文件)1.菜单打印2.初始化棋盘3.打印棋盘4.生成地雷5.数雷并赋值给trueboard6.排查雷区7.展开8.判断输赢前言 嘿!...
    99+
    2024-04-02
  • C语言实现扫雷游戏详解(附源码)
    目录1.游戏的功能 2.游戏实现的基本思路2.1实现菜单给玩家选择2.2初始化棋盘2.3数组大小的问题2.4对棋盘赋值2.5打印棋盘2.6布置雷2.7排查雷3.代码基本实现...
    99+
    2024-04-02
  • windows10扫雷游戏在哪儿windows10扫雷游戏部位详细介绍
    windows10扫雷游戏在哪呢,扫雷游戏是很多用户从小玩到大的手机游戏,这个游戏最开始在xp系统就拥有,用户们能够在这儿玩上十分有意思的扫雷游戏玩法,可是许多用户不清楚win10的扫雷游戏在哪儿因而想知道扫雷在哪里呢,接下来就告诉大家关于...
    99+
    2023-07-10
  • 怎么用c++代码实现扫雷小游戏
    这篇文章主要介绍了怎么用c++代码实现扫雷小游戏的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么用c++代码实现扫雷小游戏文章都会有所收获,下面我们一起来看看吧。分成两个源文件和一个头文件注意:这串代码并不完...
    99+
    2023-06-29
  • 100行C#代码实现经典扫雷游戏
    目录布局生成雷区左键扫雷和右键标记翻面功能布局 布局效果如下,下面每个“网格”都是一个按钮,点击按钮,就会有相应的事件发生。 由于UniformGrid中每...
    99+
    2023-02-27
    C#实现扫雷游戏 C#扫雷游戏 C#扫雷 C#游戏
  • C#实现扫雷游戏
    目录一、实验目的:二、实验要求:三、实验内容:四、实验源代码:五、实验结果:六、总结本文实例为大家分享了C#实现扫雷游戏的具体代码,供大家参考,具体内容如下 一、实验目的: 1、掌握...
    99+
    2024-04-02
  • Easyx实现扫雷游戏
    本文实例为大家分享了Easyx实现扫雷游戏的具体代码,供大家参考,具体内容如下 代码: #include<stdio.h> #include<stdlib.h&g...
    99+
    2024-04-02
  • C语言实现扫雷小游戏详解
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 一.实现功能 首先显示一个小菜单,选择是否玩游戏。当用户选择退出时,程序运行结束,当用户选择玩游戏时,将...
    99+
    2024-04-02
  • 怎么用java实现扫雷游戏
    这篇文章主要介绍“怎么用java实现扫雷游戏”,在日常操作中,相信很多人在怎么用java实现扫雷游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用java实现扫雷游戏”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-30
  • JavaScript实现扫雷小游戏的代码怎么写
    这篇文章主要介绍“JavaScript实现扫雷小游戏的代码怎么写”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript实现扫雷小游戏的代码怎么写”文章能帮助大家解决问题。思路:1产生指定...
    99+
    2023-07-02
  • 用C语言实现扫雷小游戏实例代码
    本篇内容主要讲解“用C语言实现扫雷小游戏实例代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“用C语言实现扫雷小游戏实例代码”吧!本文实例为大家分享了C语言版扫雷小游戏的具体代码,供大家参考,具...
    99+
    2023-06-20
  • C语言实现简易扫雷游戏详解
    本文实例为大家分享了C语言实现简易扫雷游戏的具体代码,供大家参考,具体内容如下 一、想要达到的游戏功能: 大家如果想编写一个游戏,应具备以下的步骤: 1:了解游戏的规则 2:&nbs...
    99+
    2024-04-02
  • jQuery实现扫雷小游戏
    本文实例为大家分享了jQuery实现扫雷小游戏的具体代码,供大家参考,具体内容如下 扫雷小游戏实现思路: 设计为9*9简单面板,每次随机生成10颗雷,然后计算每颗雷周围八个位置上每个...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作