【扫雷】C语言实现扫雷小游戏

扫雷

  • 游戏资源介绍
  • 游戏功能介绍
  • 游戏代码编写教程
  • 游戏功能测试
    • 自动排雷测试
    • 地雷标记测试
    • 取消标记测试
    • 踩雷判定测试
    • 重复游戏测试
    • 胜利判定测试
  • 头文件
  • 游戏主体文件
  • 用户主体文件

游戏资源介绍

本次对之前的扫雷游戏进行了重新编写与更新,在此次的游戏实现中新增加了剩余地雷数量统计、地雷标记、地雷标记取消的功能,游戏实现的主体逻辑并未改变,相比于之前的游戏,此次的内容会更加的完善。
游戏代码资源如下,需要的朋友可以自取。

游戏功能介绍

在本次编写的游戏中包含以下功能:

  1. 开始菜单:供玩家选择开始游戏还是结束游戏
  2. 错误提示:玩家选择错误时给予提示
  3. 棋盘初始化:在创建好棋盘后可以对棋盘进行出始化(后期会增加初始化样式功能)
  4. 棋盘打印;将棋盘打印在屏幕上
  5. 地雷设置:在棋盘上随机设置地雷(后期会增加修改地雷数和棋盘大小的功能)
  6. 坐标判定:判断玩家输入坐标是否正确
  7. 地雷标记:玩家可以主动选择在该坐标点上放置地雷标记
  8. 自动排查:当玩家输入的坐标周围没有地雷时,系统会自动进行周围坐标的地雷排查
  9. 地雷数量统计:在进行排查时会将坐标周围的地雷数量统计好并显示在对应坐标上
  10. 剩余地雷统计:在棋盘左上角新增剩余地雷数量统计
  11. 踩雷判定:当玩家输入坐标为地雷时,会提示踩到地雷判定游戏失败
  12. 胜利判定:当玩家将安全区全部找出来时,会提示玩家获得胜利,并自动放置地雷标记
  13. 重复游戏:当玩家结束一局游戏后可以再来一局游戏

游戏代码编写教程

【扫雷】#C语言的第三个小游戏 #保姆级编写思路

游戏功能测试

自动排雷测试

自动排雷

地雷标记测试

放置旗帜

取消标记测试

在这里插入图片描述

踩雷判定测试

失败判定

重复游戏测试

重复游戏

胜利判定测试

胜利判定
游戏胜利后自动将地雷标记出来

本次新编写游戏部分代码如下:

头文件

//引用头文件
#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
#include <time.h>//定义标识符常量
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define COUNT 5//函数声明
void init_board(char board[ROWS][COLS], int rows, int cols, char ret);//初始化
void print_board(char board[ROWS][COLS], int row, int col, int count);//打印
void set_mine(char board[ROWS][COLS], int row, int col, char ret);//埋雷
void find_mine(char shadow[ROWS][COLS], char mine[ROWS][COLS], int row, int col);//排雷shadow, mine
void menu2();//选择操作菜单
void menu3();//选择操作菜单2
char judge_mine(char shadow[ROWS][COLS], char mine[ROWS][COLS], int row, int col, int x, int y);//判断地雷
int static_mine(char shadow[ROWS][COLS], char mine[ROWS][COLS], int row, int col, int x, int y);//坐标周围地雷计数
void auto_find(char shadow[ROWS][COLS], char mine[ROWS][COLS], int row, int col, int x, int y);//自动排雷
int judge_win(char shadow[ROWS][COLS], int row, int col);//判断胜利
int judge_win2(char shadow[ROWS][COLS], int row, int col);//判断未排雷数量
int auto_mark(char shadow[ROWS][COLS], int row, int col, int count);//自动标记

游戏主体文件

//初始化棋盘
void init_board(char board[ROWS][COLS], int rows, int cols, char ret)
{for (int i = 0; i < rows; i++)//初始化行元素{for (int j = 0; j < cols; j++)//初始化列元素{board[i][j] = ret;}}
}
//打印棋盘
void print_board(char board[ROWS][COLS], int row, int col, int count)
{printf("\n   *---地雷   #---未排雷区域   P---旗帜\n\n");printf("剩余地雷:%d\n", count);printf("|");for (int i = 0; i <= row; i++)//打印列坐标{printf(" %d |", i);}printf("\n");//打印分割线printf("|");for (int j = 0; j <= col; j++)//打印列{printf("---|");}printf("\n");for (int i = 1; i <= row; i++)//打印行{printf("| %d |", i);//打印行号for (int j = 1; j <= col; j++)//打印列{printf(" ");printf("%c", board[i][j]);printf(" |");}printf("\n");//打印分割线printf("|");for (int j = 0; j <= col; j++)//打印列{printf("---|");}printf("\n");}printf("\n");
}
//埋地雷
void set_mine(char board[ROWS][COLS], int row, int col, char ret)
{int count = COUNT;//地雷数量while (count){int flag = 0;//判断埋雷是否成功int i = rand() % ROW + 1;//地雷横坐标int j = rand() % COL + 1;//地雷纵坐标if (i >= 1 && i <= row)//判断横坐标的合法性1-row{if (j >= 1 && j <= col)//判断纵坐标的合法性1-col{if (board[i][j] == ' '){board[i][j] = ret;flag = 1;//成功埋雷}}}if (flag)count--;}
}
//通过坐标周围地雷数
int static_mine(char shadow[ROWS][COLS], char mine[ROWS][COLS], int row, int col, int x, int y)
{int count = 0;//计数器for (int i = -1; i < 2; i++)//横坐标判断{for (int j = -1; j < 2; j++){if (mine[x + i][y + j] == '*')//坐标点为地雷count++;//计数器+1}}return count;
}

用户主体文件

//菜单栏
void menu()
{printf("#####################\n");printf("#### 0. 退出游戏 ####\n");printf("#### 1. 退出游戏 ####\n");printf("#### 请选择<0/1> ####\n");printf("#####################\n");
}
//游戏
void game()
{//藏雷char shadow[ROWS][COLS] = { 0 };//地雷char mine[ROWS][COLS] = { 0 };//初始化棋盘init_board(shadow, ROWS, COLS, '#');init_board(mine, ROWS, COLS, ' ');//打印棋盘print_board(shadow, ROW, COL, COUNT);//埋雷set_mine(mine, ROW, COL, '*');//print_board(mine, ROW, COL,COUNT);//排雷find_mine(shadow, mine, ROW, COL);
}int main()
{int input = 0;srand((unsigned)time(NULL));do{menu();//菜单栏printf("请输入您的选择>:");scanf("%d", &input);switch (input){case 0:printf("正在退出,请耐心等候\n");Sleep(1000);system("cls");break;case 1:printf("开始扫雷\n");game();break;default:printf("输入错误,请重新输入!!!");Sleep(1000);system("cls");break;}} while (input);return 0;
}

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

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

相关文章

Open Feign 源码解析(二) --- 如何发送http请求

Open Feign 源码解析二 如何发送http请求&#xff1f; 如何组件化&#xff1f; 定义接口 public interface Client {Response execute(Request request, Options options) throws IOException; }是否存在已有的方案&#xff1f; 1&#xff09;rest template http client o…

优思学院|六西格玛:中国企业迈向国际舞台的必经之路

六西格玛质量管理在中国的企业中是实用和广泛运用的。六西格玛管理是一种系统的过程改进方法&#xff0c;通过对现有过程进行界定、测量、分析、改进和控制的流程来提高质量、降低成本。中国的一些企业已经取得了显著的经济效益&#xff0c;并且至少有25&#xff05;以上的世界…

【JavaEE初阶】 HTTP协议和使用Fiddler抓包

文章目录 &#x1f38d;HTTP协议是什么&#xff1f;&#x1f340;应用层协议&#xff08;HTTP&#xff09;存在的意义&#x1f384;HTTP 协议的工作过程&#x1f334;HTTP 协议格式&#x1f333;Fiddler抓包工具的使用&#x1f6a9;如何抓HTTPS的包&#xff1f; &#x1f38b;抓…

操作系统校招知识点总结

文章目录 前言1. 操作系统概述1.1 操作系统的四大特征&#xff08;并共虚异&#xff09;1.2 操作系统的主要功能&#xff1f;1.3 动态链接库和静态链接库的区别&#xff1f;1.4 并发和共享之间的关系&#xff1f;1.5 中断和异常的概念&#xff1f; 2. 进程与线程2.1 进程和线程…

SELinux零知识学习三十七、SELinux策略语言之约束(1)

接前一篇文章:SELinux零知识学习三十六、SELinux策略语言之角色和用户(7) 四、SELinux策略语言之约束 SELinux对策略允许的访问提供了更严格的约束机制,不管策略的allow规则如何。 1. 近距离查看访问决定算法 为了理解约束的用途,先来看一下SELinux Linux安全模块(Lin…

Linux端口流量统计

Ubuntu sudo apt-get install wiresharkCentOS sudo yum install wiresharkUDP端口统计 sudo tshark -i <interface> -f "udp port <port_number>" -a duration:60 -q -z conv,udp请将 替换为你的网络接口&#xff0c;<port_number> 替换为要监…

简易版扫雷+代码分析

前言&#xff1a; 实验一个简易版的扫雷&#xff0c;也要两百来行的代码&#xff0c;因此为了代码整洁&#xff0c;维护起来方便&#xff0c;这里我们和前期实现的三子棋一样&#xff0c;也弄一个游戏的头文件game.h用来装各种头文件以及函数的声明以及宏定义、预处理信息&…

电力智能化系统(智能电力综合监控系统)

电力智能化系统是一个综合性的系统&#xff0c;它利用物联网、云计算、大数据、人工智能等技术&#xff0c;依托电易云-智慧电力物联网&#xff0c;采用智能采集终端和物联网关&#xff0c;将电力设备、用电负荷、电力市场等各个环节有机地联系起来&#xff0c;实现了对电力配送…

计算机网络(超详解!) 第一节计算机网络的性能指标

1.速率 比特&#xff08;bit&#xff09;是计算机中数据量的单位&#xff0c;也是信息论中使用的信息量的单位。 比特&#xff08;bit&#xff09;来源于 binary digit&#xff0c;意思是一个“二进制数字”&#xff0c;因此一个比特就是二进制数字中的一个 1 或 0。 速率是…

VUE语法--img图片不显示/img的src动态赋值图片显示

1、问题概述 常见情景1&#xff1a;在VUE中使用img显示图片的时候&#xff0c;通过传参的方式传入图片的路径和名称&#xff0c;VUE不加载本地资源而是通过http://localhost:8080/...的地址去加载网络资源&#xff0c;从而出现了图片无法显示的情况。 常见情景2&#xff1a;针…

【教学类-06-12】20231126 (二)三位数 如何让加减乘除题目从小到大排序(以0-110之间加法为例,做正序排列用)

结果展示 背景需求&#xff1a; 二位数&#xff1a;去0 三位数&#xff08;需要排除很多0&#xff09; 解决思路 一、把数字改成三位数 二、对数组内的题目&#xff0c;8种可能性进行去“0”处理 1、十位数&#xff08;去百位数0&#xff09;十位数&#xff08;去百位数0&am…

GDOUCTF2023-Reverse WP

文章目录 [GDOUCTF 2023]Check_Your_Luck[GDOUCTF 2023]Tea[GDOUCTF 2023]easy_pyc[GDOUCTF 2023]doublegame[GDOUCTF 2023]L&#xff01;s&#xff01;[GDOUCTF 2023]润&#xff01;附 [GDOUCTF 2023]Check_Your_Luck 根据 if 使用z3约束求解器。 EXP&#xff1a; from z3 i…