目录

一、扫雷游戏

1.游戏一共创建使用了三个文件

2.test.c 文件代码(游戏逻辑)

3.game.h - 必要的函数声明代码

4.game.c 游戏所有函数实现代码


一、扫雷游戏

1.游戏一共创建使用了三个文件

test.c - 测试游戏逻辑

game.h - 游戏代码包含的函数声明

game.c - 游戏里面函数的实现

2.test.c 文件代码(游戏逻辑)

#define _CRT_SECURE_NO_WARNINGS 1
//测试游戏逻辑#include"game.h"void menu()
{printf("           < M E N U >           \n");printf("*********************************\n");printf("*********    1.play    **********\n");printf("*********    0.exit    **********\n");printf("*********************************\n");}void game()
{//创建棋盘char mine[ROWS][COLS] = { 0 };//布置雷的棋盘char show[ROWS][COLS] = { 0 };//展示玩家棋盘//初始化棋盘 - 11*11InitBoard(mine, ROWS, COLS, '0');//将雷棋盘,初始化为'0'InitBoard(show, ROWS, COLS, '*');//将玩家棋盘,初始化为'*'//打印棋盘 - 传过去的show棋盘11*11,实际打印9*9 ROW, COLDisplayBoard(show, ROW, COL);//布置雷 - 传过去mine棋盘11*11,实际打印9*9 ROW COLSetMine(mine, ROW, COL);DisplayBoard(mine, ROW, COL);//排查雷 - 再mine数组里将排查的雷的信息,放到show数组里,所以传的时候两个数组都要传FindMine(mine, show, ROW, COL);
}int main()
{//srand只调用一次,放在主函数srand((unsigned int)time(NULL));int input = 0;do{menu();printf("请输入菜单选项:>");scanf("%d", &input);printf("\n");switch (input){case 1:game();break;case 0:printf("<   退出游戏  >\n");break;default:printf("<  选择错误,请重新输入!!>\n");break;}} while (input);return 0;
}

3.game.h - 必要的函数声明代码

#define _CRT_SECURE_NO_WARNINGS 1
//包含必要的声明//定义变量和宏
#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2#define num_mine 10
//包含的头文件
#include<stdio.h>
#include<stdlib.h>    /* rand,srand*/
#include<time.h>  /* time *///自定义函数的声明//初始化棋盘 - 11*11
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);//打印棋盘 - 传过来的是11*11 打印的是9*9
void DisplayBoard(char board[ROWS][COLS], int row, int col);//布置雷 - 传过来的是11*11 打印的是9*9
void SetMine(char mine[ROWS][COLS], int row, int col);//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);//统计坐标周围雷的情况
int GetMineCount(char mine[ROWS][COLS], int x, int y);

4.game.c 游戏所有函数实现代码

#define _CRT_SECURE_NO_WARNINGS 1
//实现程序所需的函数#include"game.h"//初始化棋盘 - 11*11
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{int i = 0;int j = 0;for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){board[i][j] = set;}}
}//打印棋盘 - 传过来的11*11 打印的是 9*9
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{int i = 0;int j = 0;printf(" <  --- 扫雷 ---  >\n");//每一列上面打印对应的数字for (j = 0; j <= col; j++){printf("%d ", j);}printf("\n");for (i = 1; i <= row; i++){//每一行前面打印对应的数字printf("%d ", i);//打印棋盘for (j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}printf("\n");}//布置雷
void SetMine(char mine[ROWS][COLS], int row, int col)
{int count = num_mine;//10个雷while (count){//随机生成雷坐标 - rand() 0~32767int x = rand() % row + 1;int y = rand() % col + 1;//判断棋盘是否布置过雷if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}}//统计该坐标周围雷的情况
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{//周围所有坐标字符(8个字符)的和 减去8*'0' = 雷的数量//参考:// '0' + 0 = '0'// '0' + 1 = '1'//得到// '1' - '0'= 1//8*'1' - 8*'0'如果等于 0,则表示没有雷;等于1~7则表示有雷;返回对应的数字即可;return (mine[x - 1][y - 1] + mine[x - 1][y] + mine[x - 1][y + 1]+ mine[x][y - 1] + mine[x][y + 1]+ mine[x + 1][y - 1] + mine[x + 1][y] + mine[x + 1][y + 1])- 8 * '0';
}//将坐标周围没有雷时,置该坐标及周围8个坐标为 空格 ,不显示
void SetNone(char show[ROWS][COLS], int x, int y)
{show[x][y] = ' ';show[x - 1][y - 1] = ' ';show[x - 1][y] = ' ';show[x - 1][y + 1] = ' ';show[x][y - 1] = ' ';show[x][y + 1] = ' ';show[x + 1][y - 1] = ' ';show[x + 1][y] = ' ';show[x + 1][y + 1] = ' ';}//排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{//输入排查雷的坐标int x = 0;int y = 0;//排雷次数int win = 0;while (win<row*col-num_mine){printf("请输入要排查雷的坐标(行 列):>");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col && show[x][y] == '*'){if (mine[x][y] == '1'){printf("\n******>>很遗憾,踩雷了>>******\n");printf("******>>请看雷的情况:\n\n");DisplayBoard(mine, ROW, COL);break;}else{//排查雷//如果该坐标不是雷,统计该坐标周围雷的情况int count=GetMineCount(mine, x, y);show[x][y] = count+'0';//count为整型 例如2,加上字符'0',变成count整型对应数字字符 例如'2'DisplayBoard(show, ROW, COL);//然后打印棋盘win++;}}else{printf("******>>非法排查!!请重新排查!!>>******\n");}}if (win == row * col - num_mine){printf("\n******>>恭喜!!排雷大师!!成功排除所有雷!!******\n");printf("******>>请看雷的情况:\n\n");DisplayBoard(mine, ROW, COL);//然后打印棋盘}
}//代码需要完善:展开函数,标记函数,时间函数(计时)
//展开函数:展开满足这些条件的坐标
/*
必须满足条件:
1.该坐标不是雷
2.该坐标周围没有雷
3.该坐标没有被排查过*/

最后可以体验一下

同时这只是个简单的扫雷游戏实现,其中也有点缺陷,如果各位大佬有更好的方法可以分享给我哈~~

扫雷小游戏 - C语言相关推荐

  1. 使用C语言写一个扫雷小游戏

    前言 相信扫雷游戏小伙伴们肯定都玩过吧,学习了C语言中的数组.函数等基础内容之后就可以自己写一个简易的扫雷小游戏了,今天就我写扫雷小游戏的过程及思路写一篇博客,希望大家看完我的博客能有所收获. 软件及 ...

  2. 用C语言实现一个简单的扫雷小游戏(附全代码及教程)

    本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下: 首先,创建一个text.c文件: 编写主函数: int main() {test();return 0; } 定义test ...

  3. C语言实现扫雷小游戏 纯小白 非黑窗口

    C语言实现一个普通的扫雷小游戏 纯小白所编(含代码非黑窗口!) 扫雷 主要功能 1.创建一个图形界面 2.了解扫雷游戏的原理 3.随机生成雷的位置 4.为整个数组加密,并在雷周围的位置加一 5.导入图 ...

  4. 用c语言实现扫雷小游戏。

    相信小伙伴在学习c语言的时候想做一些小趣事,下面就是用c语言来实现一个扫雷小游戏,不过是简单的实现扫雷(只是通过数组的方式来实现),适合新手学习. 我用的是vs敲的这个代码,大家可以用vs运行(可能有 ...

  5. C语言简单的键盘玩扫雷小游戏(完结)

    1:这次我们会将前面的代码进行整合,和整理,最终使我们的程序可以有效的运行起来. [1]初始化函数. void GameInit() {     //随机数种子     srand((unsigned ...

  6. c语言字符游动程序,C语言实现扫雷小游戏详解

    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 一.实现功能 首先显示一个小菜单,选择是否玩游戏.当用户选择退出时,程序运行结束,当用户选择玩游戏时,将提示用户输入扫雷位 ...

  7. ChatGPT实现用C语言写一个扫雷小游戏

    前几天我们利用 ChatGPT实现用C语言写一个学生成绩管理系统 其过程用时不到30秒,速度惊人 今天又让ChatGPT用C语言写了一个扫雷小游戏,它的回答是:抱歉,我是AI语言模型,无法编写程序. ...

  8. C语言初阶——扫雷小游戏

    扫雷这款小游戏想必大家都接触到过,但是用C语言写的扫雷你见过吗?其实,学完之前我写的那几篇文章,我们完全可以自己写出来.仅仅200多行代码,我们就可以写出我们自己的扫雷小游戏!赶紧来看看吧!!! 文章 ...

  9. C语言大一课设 扫雷小游戏

    目录 [题    目]扫雷小游戏 [项目简介] [总体功能结构流程图] 登录和注册流程图: 打印棋盘流程图: 计算周围雷的个数流程图: test.c game.h game.c 运行结果 (1)注册运 ...

最新文章

  1. C# WinForm 窗体标题栏 不可见
  2. Android测试分析3
  3. (干货)构建镜像之docker commit
  4. bootstrap File Input 多文件上传插件使用记录(二)删除原文件
  5. ssh 看apache_使用Apache KeyedObjectPool的ssh连接池
  6. spring 动态代理_分析动态代理给 Spring 事务埋下的坑
  7. Java字符串截取(substring)
  8. vs调试时查看指针指向的内存区域的内容
  9. 微信小程序如何快速累计独立访客(UV)不低于 1000
  10. CSS3 3d立方体/多棱柱-
  11. 重温《遥远的救世主》
  12. ASAN中无崩溃测试方案实现
  13. windows下的WSL开发环境配置以及相关工具、插件
  14. oracle表自动模拟多条数据,Oracle使用虚拟表dual一次插入多条记录
  15. 实验一 简单io应用—流水灯控制示例程序_【正点原子FPGA连载】第十章呼吸灯实验--领航者ZYNQ之linux开发指南...
  16. IIS MIME设置
  17. 基于PLC的矿泉水自动瓶装控制系统设计
  18. 基于华为ENSP模拟器下的多个区域互联,减少LSA的更新量,加快收敛,保障更新安全的OSPF综合练习
  19. Python数据库(MySQL、MongoDB、Redis)编程
  20. STM32 CAN通信的学习笔记总结(从小白开始)

热门文章

  1. 直接从mysql binlog文件提取数据,无需恢复整个数据库
  2. 资源1号02D卫星的高光谱和多光谱数据介绍
  3. 迅搜(XunSearch)+ThinkPHP5实现标题的拼音或拼音首字母缩写搜索
  4. 数学基础从高一开始4、集合的基本运算2
  5. 智能控制基础实验3:数字PID控制
  6. 一家靠收智商税盈利的公司,卖了340亿
  7. LM339-----比较器,以及工程应用实践(比较详细)
  8. 剪辑视频时随机转场特效怎么设置
  9. 【转】BeagleBone Black USB一线通(3)
  10. 绿色荧光染料Alexa fluor 488 PEG Biotin,AF-488-PEG-生物素,激发/发射波长约为495nm/520nm