【C语言初阶】——简易版·扫雷(9*9)【运行逻辑思维导图+细节讲解+源码】【初级】
目录
- 一、扫雷游戏的运行逻辑
- 二、代码逻辑讲解+源码
- 1.打印一个简易的游戏开始菜单
- 2.创建数组储存数据并初始化数组
- 代码逻辑讲解
- 源码
- 3.布置雷
- 代码逻辑讲解
- 源码
- 4.排雷
- 代码逻辑
- 源码
- 三、结果展示
- 完整源码链接
一、扫雷游戏的运行逻辑
1.鼠标点击进行扫雷
2.若此处没有雷则会显示周围相应的雷的数目
3.若踩雷则游戏失败
二、代码逻辑讲解+源码
这里我们以9*9规格来实现简易版扫雷的游戏代码
逻辑思维导图↓
注意:好的代码习惯——边写边调试,不要把错误累积到最后
1.打印一个简易的游戏开始菜单
#include "game.h"//所有需要用到的编译预处理命令放game.h头文件里,这里直接引用头文件
//#include <stdio.h>
void menu()
{printf("***********1.star game***********\n");printf("*********************************\n");printf("***********0.quit game***********\n");
}
void game(){}
int main()
{int input = 0;do//循环体至少执行一次所以选用do while循环{menu();printf("请输入数字:");scanf("%d", &input);if (1 == input){printf("游戏开始\n");game();//游戏运行}else if (0 == input){printf("退出游戏\n");break;}else{printf("选择错误请重新输入\n");}} while (input);return 0;
}
运行结果↓
2.创建数组储存数据并初始化数组
代码逻辑讲解
源码
//在头文件中定义二维二维数组的行和列,注意编译预处理命令后面没有;
#define ROW 9//方便后期对数组的行和列进行修改#define COL 9#define ROWS ROW+2
#define COLS COL+2//初始化数组
void init_board(char board[ROWS][COLS], int rows, int cols, char symbol);//打印数组
void print_board(char board[ROWS][COLS], int row, int col);
↑注意:编译预处理命令后面没有分号 ‘ ; ’
//test.c
void game()
{char mine[ROWS][COLS] = { 0 };char show[ROWS][COLS] = { 0 };//初始化数组init_board(mine, ROWS, COLS, '0');//0和‘0’不一样,如果数组里面元素都是0打印出来什么也不显示,所里这里也需要初始化init_board(show, ROWS, COLS, '*');//打印数组print_board(show, ROW, COL);print_board(mine, ROW, COL);
}
↑对于书写初始化函数的注意:被指定的初始化的符号也属于函数参数(变量)之一
↑初始化函数和打印函数注意:被初始化的数组是原本创建的11/*11数组,但是打印的时候只需要打印9/*9的数组,两个函数传参传的不一样
//game.c
//初始化数组
void init_board(char board[ROWS][COLS], int rows, int cols, char symbol)
{int i = 0, j = 0;for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){board[i][j] = symbol;}}
}//打印数组
void print_board(char board[ROWS][COLS], int row, int col)
{int i = 0, j = 0;//打印一下列数printf("%d", i);//补齐空位for (i = 1; i <= col; i++){printf(" %d ", i);}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");
}
运行结果↓
3.布置雷
代码逻辑讲解
1.操作对象是mine数组
2.生成两个随机数(x,y)作为要布置雷的坐标
3.判断此处是否已经布过雷
4.用字符1来代表“有雷”
5.while循环这个过程
源码
//布雷(头文件函数声明
void set_mine(char board[ROWS][COLS], int row, int col);#define MINE 10 //设置布雷的数目
//布雷(MINE)
void set_mine(char board[ROWS][COLS], int row, int col)
{int count = 0;while (count < MINE){//这里要注意!!布雷的时候要防止布在重复(相同的坐标)所以要判断一下!!int x = rand() % row + 1;int y = rand() % col + 1;if (board[x][y] == '0'){board[x][y] = '1';//注意这里放的是字符‘1’count++;}}
}
4.排雷
代码逻辑
源码
//game.cint mine_is(char board[ROWS][COLS], int x, int y)
{return (board[x - 1][y - 1] +board[x - 1][y] +board[x - 1][y + 1] +board[x][y - 1] +board[x][y + 1] +board[x + 1][y - 1] +board[x + 1][y] +board[x + 1][y + 1] - 8 * '0');
}
//排雷
void clearance_mine(char mine[ROWS][COLS], char show[ROWS][COLS], int rows, int cols)
{printf("开始排雷\n");int win = 0;while (win < ROW * COL - MINE)//只要雷没有排完就一直循环排雷的过程{printf("请输入要排雷的坐标:");int x = 0, y = 0;scanf("%d %d", &x, &y);//首先判断坐标是否合法if (x > 0 && x < rows - 2 && y>0 && y < cols - 2){//再判断坐标是否已经排过雷if (show[x][y] == '*'){if (mine[x][y] != '1')//此处不是雷,则用字符数字替换'*'{show[x][y] = (mine_is(mine, x, y) + '0');print_board(show, ROW, COL);win++;}else//如果踩雷{printf("很遗憾,你被炸死了,排雷失败\n");break;}}}else{printf("坐标非法请重新输入:");}}if (win == ROW * COL - MINE)//排雷成功跳出循环{printf("恭喜你排雷成功!\n");}
}
三、结果展示
(真正玩游戏的时候不用打印mine数组)
完整源码链接
点击获取完整源码
【C语言初阶】——简易版·扫雷(9*9)【运行逻辑思维导图+细节讲解+源码】【初级】相关推荐
- 离散数学及其应用复盘 | 第3版第4章——谓词逻辑思维导图梳理(复习专用)
- C语言初阶_初识C语言(1)
凡是过往,皆为序章 期末考试结束了,真是感慨良多啊...... C语言编程题大家都做对了多少呢? 不管怎么样,都已经过去了.不管你学得怎么样,都可以在接下来的时间里,我们一起重新回顾一遍C语言初阶的知 ...
- c语言小游戏 精简_C语言开发简易版扫雷小游戏
C 语言开发简易版扫雷小游戏 本文给大家分享的是一个使用 C 语言开发的命令行下的简易版扫雷小游戏, 本身没有什么太 多的技术含量, 只不过是笔者的处女作, 所以还是推荐给大家, 希望对大家学习 C ...
- 五十分钟带你看遍C语言初阶语法(总纲)
C语言初阶语法(总纲) 此篇博客包含了前面C语言所有的基础语法,写这一期的博客不仅是为了记录自己的学习成果也是为了让更多的朋友能学到对自己有用的知识,如果总有一个知识点帮助到了你,给卑微博主点点关注加 ...
- C语言初阶(18) | 数组详解
目录 1.数组的定义 2.一维数组 2.1一维数组的格式 2.2一维数组的初始化 2.3一维数组的使用 2.4一维数组再内存中的存储 3.二维数组 3.1二维数组的创建和初始化 3.2二维数组的使用 ...
- C语言初阶——6.进制
C语言初阶--6.进制 1. 进制 百度百科: 进制也就是进位计数制,是人为定义的带进位的计数方法,对于任何一种进制-X进制,就表示每一位置上的数运算时都是逢X进一位. 十进制是逢十进一,十六进制是逢 ...
- C语言初阶作业题-数组
C语言初阶作业题-数组 一.选择题 1.关于一维数组初始化,下面哪个定义是错误的?( ) A.int arr[10] = {1,2,3,4,5,6}; B.int arr[] = {1,2,3,4,5 ...
- C语言初阶——5.字符串
C语言初阶--5.字符串 1. 字符串操作 1.1 字符串遍历 可以通过数组方式遍历字符串. char* str="Hello World"; for(int i = 0;'\0' ...
- Win32简易版扫雷
社团的一群小孩都默默的写好了扫雷,嘿嘿,我也打算凑个热闹 最近学windows编程,就写一个win32简易版扫雷吧 //不支持右键 感觉写的挺乱的╮(╯▽╰)╭啊,不要在意这些细节 点到雷会退出程序 ...
最新文章
- 人工智能阴影检测与去除,实现一种基于反射的阴影检测与去除方法
- F5 任命 Ben Gibson 担任首席营销官
- 第一篇随笔,通常都是内容空洞的。
- Node的异步与java的异步_node.js和异步编程回文
- 【Python】Windows下Python3虚拟环境搭建
- android 嵌套分组拖动_Android NestedScrolling嵌套滑动机制
- Class 'QrCode' not found ? 和 laravel 生成二维码接口(Simple QrCod)
- marlab中主成分得分怎么求_数学无耻得分法,独家秘密,快点用起来
- RainMeter学习3
- 安装spacy遇到的问题
- 爱上一个人的七种表现
- Java + Swing + MySQL实现图书管理系统
- linux下udev详解
- DIX和DIF该诉你,什么叫端到端数据一致性
- 【基金学习】基金的相关计算题目
- 网络计划法中的最早时间和最迟时间以及关键事件。
- win10+vs2019+FFTW64位安装配置保姆教程
- 用计算机画画教学设计,电脑版你画画教学设计
- unity脚本学习3
- 查询所有表、索引、视图信息的SQL语句-Mysql/oracle/sql server的不同实现方式
热门文章
- 定积分的基本性质1 线性性质
- python有道字典_【Python】Python利用有道翻译开发API应用示例
- cta 音频测试_CTA入网认证一般测试哪些项目流程
- Java面试官经验谈:如何甄别候选人真实的能力,候选人如何展示值钱技能
- [nltk_data] Error loading words: <urlopen error [Errno 11004]
- JavaScript——与君初相识
- Larval 主从读写分离配置
- 计算机组装过程分为哪几步,组装新电脑要经过哪些步骤?
- 乐有家携手法大大,实现租房签约数字化
- Cloudera Manager安装之利用parcels方式安装单节点集群(包含最新稳定版本或指定版本的安装)(添加服务)(CentOS6.5)(四)...