C语言第十课----------------扫雷----------数组的经典练手题

作者前言

🎂        ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂

   🎂      作者介绍:                              🎂🎂

       🎂 🎉🎉🎉🎉🎉🎉🎉              🎂

          🎂作者id:老秦包你会,         🎂

简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂

             喜欢学习C语言和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨         🎂🎂🎂🎂🎂🎂🎂🎂

                 🎂个人主页::小小页面🎂

                  🎂gitee页面:秦大大🎂

                   🎂🎂🎂🎂🎂🎂🎂🎂
        🎂  一个爱分享的小博主 欢迎小可爱们前来借鉴🎂

_______________________________________________________

______________________________________________________________________

目录

扫雷

        分析

        代码

——————————————————————————————————————

扫雷

 如上图,玩扫雷的原理就是避开雷找出所有的雷就胜利,废话不多说,我们直接开始扫雷分析

分析

俗话说的好,玩游戏第一步进入游戏,我们就写出一个游戏菜单出来,让玩家选择

void meun()
{printf("*********        扫雷       ********\n");printf("************************************\n");printf("*********       0.exit      ********\n");printf("*********       1.paly      ********\n");printf("************************************\n");}

下面我们要写一个框架,选择玩或者不玩,

int input;srand((unsigned)time(NULL));do{meun();printf("进入扫雷界面,请选择>");scanf("%d", &input);switch (input){case 0:printf("退出游戏\n");break;case 1:printf("开始游戏\n");game();break;default :printf("输入不符合规定,请重新输入\n");break;}

下面我们就要开始写扫雷的内容了,首先扫雷我们要给出扫雷的游戏画面,在这个过程中我们可以创建两个数组,一个用于计算,一个用于显示

 左边是计算,右边是显示 然后我们就要设计一下输出的界面,要玩家有好的体验

void initialization(char mine[ROWS][COLS], int rows, int cols, char str)
{int i = 0;for (i = 0; i < rows; i++){int j = 0;for (j = 0; j < cols; j++){mine[i][j] = str;}}}
void Carving(char mine[ROWS][COLS], int row, int col)
{int i = 0;for (i = 0; i <= row; i++){printf("%d ", i);}printf("\n");printf("--------------------\n");for (i = 1; i <= row; i++){printf("%d|", i);int j = 0;for (j = 1; j <= col; j++){printf("%c ", mine[i][j]);}printf("\n");}
}

然后我们就要布置雷了,雷的设计要随机可以使用rand(),记得设计出源点srand((unsigned)time(NULL))

代码如下:

void Production(char mine[ROWS][COLS], int row, int col)
{int count = Count;while (count){int x = ((rand() % (row)) + 1);int y = ((rand() % (col)) + 1);if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}
}

下面我们就要模拟玩家扫雷了,玩家扫雷要输入坐标, 然后判断是否踩到雷或者已经排查过了,如果没有就要统计周边雷的个数,然后反馈给显示数组,最后判断是否排除完全部雷了,

void paly_mine(char mine[ROWS][COLS], char show_mine[ROWS][COLS], int row, int col)
{int count = 0;int x = 0;int y = 0;while (1){printf("请玩家输入坐标:>");scanf("%d %d", &x, &y);if (x >= 1 && x <= 9 && y >= 1 && y <= 9){if (mine[x][y] == '0'){mine[x][y] = ' ';count++;//统计周边的雷数int sum = 0;int i = x - 1;for (i = x - 1; i <= x + 1; i++){int j = y - 1;for (j = y - 1; j <= y + 1; j++){if (i != x && j != y)sum = sum + (mine[i][j] - '0');}}show_mine[x][y] = '0' + sum;printf("扫雷情况:\n");Carving(show_mine, ROW, COL);printf("\n");if (count == (row * col) - Count){printf("你胜利了\n");goto  aa;}}else if (mine[x][y] == '1'){printf("你被炸死了,游戏结束\n");break;}}else{printf("请重新输入,你输入的不符合规定\n");}}
aa:;}

 下面是全部代码:

扫雷.c

#include"扫雷.h"
void meun()
{printf("*********        扫雷       ********\n");printf("************************************\n");printf("*********       0.exit      ********\n");printf("*********       1.paly      ********\n");printf("************************************\n");}
int main()
{int input;srand((unsigned)time(NULL));do{meun();printf("进入扫雷界面,请选择>");scanf("%d", &input);switch (input){case 0:printf("退出游戏\n");break;case 1:printf("开始游戏\n");game();break;default :printf("输入不符合规定,请重新输入\n");break;}} while (input);return 0;
}

扫雷函数.c

#include"扫雷.h"
void game()
{char mine[ROWS][COLS];char show_mine[ROWS][COLS];//数组初始化initialization(mine, ROWS, COLS, '0');initialization(show_mine, ROWS, COLS, '*');//布置雷Production(mine, ROW, COL);//雕刻扫雷棋盘Carving(mine, ROW, COL);printf("\n");Carving(show_mine, ROW, COL);//玩家扫雷paly_mine(mine, show_mine, ROW, COL);/*printf("%p", &mine);printf("%p", &show_mine);*/}void initialization(char mine[ROWS][COLS], int rows, int cols, char str)
{int i = 0;for (i = 0; i < rows; i++){int j = 0;for (j = 0; j < cols; j++){mine[i][j] = str;}}}void Carving(char mine[ROWS][COLS], int row, int col)
{int i = 0;for (i = 0; i <= row; i++){printf("%d ", i);}printf("\n");printf("--------------------\n");for (i = 1; i <= row; i++){printf("%d|", i);int j = 0;for (j = 1; j <= col; j++){printf("%c ", mine[i][j]);}printf("\n");}
}
//布置雷
void Production(char mine[ROWS][COLS], int row, int col)
{int count = Count;while (count){int x = ((rand() % (row)) + 1);int y = ((rand() % (col)) + 1);if (mine[x][y] == '0'){mine[x][y] = '1';count--;}}
}//玩家扫雷
void paly_mine(char mine[ROWS][COLS], char show_mine[ROWS][COLS], int row, int col)
{int count = 0;int x = 0;int y = 0;while (1){printf("请玩家输入坐标:>");scanf("%d %d", &x, &y);if (x >= 1 && x <= 9 && y >= 1 && y <= 9){if (mine[x][y] == '0'){mine[x][y] = ' ';count++;//统计周边的雷数int sum = 0;int i = x - 1;for (i = x - 1; i <= x + 1; i++){int j = y - 1;for (j = y - 1; j <= y + 1; j++){if (i != x && j != y)sum = sum + (mine[i][j] - '0');}}show_mine[x][y] = '0' + sum;printf("扫雷情况:\n");Carving(show_mine, ROW, COL);printf("\n");if (count == (row * col) - Count){printf("你胜利了\n");goto  aa;}}else if (mine[x][y] == '1'){printf("你被炸死了,游戏结束\n");break;}}else{printf("请重新输入,你输入的不符合规定\n");}}
aa:;}

扫雷.h

#include<stdio.h>
#include<stdlib.h>
#include<time.h>#define ROW 9
#define COL 9
#define ROWS ROW + 2
#define COLS COL + 2
#define Count 10
//
void game(void);
//初始化
void initialization(char mine[ROWS][COLS], int row, int col, char str);
//打印棋盘
void Carving(char mine[ROWS][COLS], int row, int col);
//布置雷
void Production(char mine[ROWS][COLS], int row, int col);
//玩家扫雷
vo

总结:

扫雷代码就在这里了,这个代码还可以进一步改进,但是由于时间原因,其他功能没写,有不懂的小可啊可以私聊我

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

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

相关文章

软件验收测试包括几种类型?验收测试报告有什么好处?

在软件开发中&#xff0c;验收测试是软件项目在开发完成后进行的最后一项测试工作。它是确认软件是否满足预期要求&#xff0c;并准备将软件交付用户的核心环节&#xff0c;它可以确保软件的质量和功能符合用户的需求和期望。 一、软件验收测试的类型 软件验收测试可以分为多…

鸿鹄工程项目管理系统em Spring Cloud+Spring Boot+前后端分离构建工程项目管理系统em

​ Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目…

Sencha Ext.NET Crack 快速应用程序的正确工具集

Sencha Ext.NET Crack 快速应用程序的正确工具集 Sencha Ext.NET是一个高级的ASP.NET核心组件框架&#xff0c;它包含了强大的跨浏览器Sencha Ext JS库。通过140多个预构建和专业测试的UI组件实现企业级性能和生产效率。Sencha Ext.NET使用尖端的Web技术创建功能强大的Web应用程…

1、如何实现两台电脑之间数据相互读写

一、确保两台电脑在同一个局域网中&#xff0c;可以使用网线【动态配置】进行两台电脑互连。 二、静态配置: 将IP地址和网关设为192.168.0.1&#xff0c;目的是让这台电脑做另一台电脑的网关&#xff0c;子网掩码一点击会自动添加。第二台电脑同样打开设置&#xff0c;此处IP地…

JUC并发编程(JUC核心类、TimeUnit类、原子操作类、CASAQS)附带相关面试题

目录 1.JUC并发编程的核心类 2.TimeUnit&#xff08;时间单元&#xff09; 3.原子操作类 4.CAS 、AQS机制 1.JUC并发编程的核心类 虽然java中的多线程有效的提升了程序的效率&#xff0c;但是也引发了一系列可能发生的问题&#xff0c;比如死锁&#xff0c;公平性、资源管理…

python基础3——流程控制

文章目录 一、操作符1.1 比较操作符1.2 逻辑操作符1.3 成员操作符1.4 身份操作符 二、流程控制2.1 条件判断2.2 循环语句2.2.1 for循环2.2.2 while循环 2.3 continue与break语句2.4 文件操作函数 三、函数3.1 定义函数3.2 作用域3.3 闭包3.4 函数装饰器3.5 内建函数 一、操作符…

vuejs 设计与实现 - 渲染器的设计

渲染器与响应式系统的结合 本节&#xff0c;我们暂时将渲染器限定在 DOM 平台。既然渲染器用来渲染真实 DOM 元素&#xff0c;那么严格来说&#xff0c;下面的函数就是一个合格的渲染器: // 渲染器&#xff1a; function renderer(domString, container) {container.innerHTM…

新能源汽车交流充电桩控制主板的功能维度

新能源汽车交流充电桩控制主板的功能维度 交流充电桩主板是电动汽车充电站的关键组件&#xff0c;它负责控制充电过程&#xff0c;保护设备和电网免受电动汽车充电的冲击。它具有控制、保护、检测、报警和记录等功能&#xff0c;可以有效地控制充电过程&#xff0c;保证交流充电…

K8s集群安全机制

1.访问K8s集群的时候&#xff0c;需要经过三个步骤完成具体操作 &#xff08;1&#xff09;认证&#xff08;2&#xff09;鉴权&#xff08;授权&#xff09;&#xff08;3&#xff09;准入控制 进行访问的时候&#xff0c;过程中都要经过apiserver&#xff0c;apiserver做统…

JDK, JRE和JVM之间的区别和联系

JDK, JRE和JVM是与Java编程语言相关的三个重要的概念&#xff0c;它们分别代表Java Development Kit&#xff08;Java开发工具包&#xff09;、Java Runtime Environment&#xff08;Java运行时环境&#xff09;和Java虚拟机&#xff08;Java Virtual Machine&#xff09;。它们…

深入探究Spring核心模块

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

ASL国产CS5213 转VGA信号输出音频 替代AG6200安格芯片 HDMI to VGA(带音频)方案设计原理图

CS5213功能&#xff1a;HDMI转VGA带音频输出&#xff0c;专注于设计HDMI转VGA带音频输出。可替代AG6200 AG6201。 CS5213芯片是一个HDMI&#xff08;高清多媒体接口&#xff09;到VGA桥接芯片。 它将HDMI信号转换为标准VGA信号它可以在适配器、智能电缆等设备中设计。 Capst…