用c语言递归函数做扫雷,【C语言基础学习---扫雷游戏】(包含普通版+递归炼狱版)...

/*******************/

//以下是源文件game.c内容

/*******************/

#include"game.h"

//初始化棋盘的实现

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;

}

}

}

//打印棋盘的实现

void DisplayBoard(char board[ROWS][COLS], int row, int col)

{

int i = 0;

int j = 0;

//为了方便区分,我们在打印的时候加上这么一行话

printf("-----------Mine_clearing game-------------\n");

//打印列号

for (i = 0; i <= col; i++)

{

//printf("%d ", i);

printf("%2d ", i);

}

printf("\n");

for (i = 1; i <= row; i++)

{

//打印行号

//printf("%d ", i);

printf("%2d ", i);

for (j = 1; j <= col; j++)

{

//printf("%c ", board[i][j]);

printf("%2c ", board[i][j]);

}

printf("\n");

}

printf("-----------Mine_clearing game-------------\n");

}

//布置雷的实现

void SetMine(char mine[ROWS][COLS], int row, int col)

{

//假设我们要布置雷的个数是count

//int count = EASY_COUNT;

int count = HARD_COUNT;

while (count)

{

//我们布置雷的时候,雷的位置最好是随机的

int x = rand() % row + 1;//雷出现的坐标位置:行号只能在 1至row

int y = rand() % col + 1;//雷出现的坐标位置:列号也只能在 1至col

if (mine[x][y]=='0')

{

mine[x][y] = '1';

count--;

}

}

}

//统计周围雷的信息

int get_mine_count(char mine[ROWS][COLS],int x,int y)

{

方法一:

//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';

//方法二

int i = 0;

int j = 0;

int sum = 0;

for (i = -1; i <= 1; i++)

{

for (j = -1; j <= 1; j++)

{

sum += mine[x + i][y + j] - '0';

}

}

return sum;

}

void SetBlank(char show[ROWS][COLS], char mine[ROWS][COLS], int x, int y)

{

int count = get_mine_count(mine, x, y);

if (count == 0)

{

show[x][y] = ' ';

if (x - 1 >= 0 && x <= ROW && y >= 0 && y <= COL && show[x - 1][y] == '*')

{

SetBlank(show, mine, x - 1, y);

}

if (x + 1 >= 0 && x <= ROW && y >= 0 && y <= COL && show[x + 1][y] == '*')

{

SetBlank(show, mine, x + 1, y);

}

if (x >= 0 && x <= ROW && y - 1 >= 0 && y <= COL && show[x][y-1] == '*')

{

SetBlank(show, mine, x, y - 1);

}

if (x >= 0 && x <= ROW && y + 1 >= 0 && y <= COL && show[x][y + 1] == '*')

{

SetBlank(show, mine, x, y + 1);

}

}

else

{

show[x][y] = count + '0';

}

}

int Is_win(char show[ROWS][COLS], int row, int col)

{

int i = 0;

int j = 0;

int count = 0;

for (i = 1; i <= row; i++)

{

for (j = 1; j <= col; j++)

{

if (show[i][j] == '*')

{

count++;

}

}

}

return count;

}

//排查雷的实现:递归展开版本

void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)

{

//思路:

//1.输入排查雷的坐标

//2.进行排查

//(1)如果该坐标是雷,就提示 You lose!you get a mine.

// (2) 如果该坐标不是雷,统计该坐标周围雷的个数---排查雷的信息放到show数组中去

int x = 0;

int y = 0;

//判断输入坐标的合法性

while (1)

{

printf("please input two number between %d to %d:>>",1,ROW);//ROW设置成与COL相等,任意使用其中一个

scanf("%d%d", &x, &y);

if ((x >= 1 && x <= ROW) && (y >= 1 && y <= COL))

{

if (mine[x][y] == '1')

{

printf("You lose!you get a mine!\n");

DisplayBoard(mine, ROW, COL);

break;

}

else

{

SetBlank(show, mine, x, y);

int count = Is_win(show, ROW, COL);

if (count == EASY_COUNT)

{

printf("Congratulations,you win!\n");

DisplayBoard(show, ROW, COL);

break;

}

DisplayBoard(show, ROW, COL);

}

}

else

{

printf("Wrong coordinate,please try again!\n");

}

}

}

排查雷的实现:普通版本

//void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)

//{

// //思路:

// //1.输入排查雷的坐标

// //2.进行排查

// //(1)如果该坐标是雷,就提示 You lose!you get a mine.

// // (2) 如果该坐标不是雷,统计该坐标周围雷的个数---排查雷的信息放到show数组中去

//

// int x = 0;

// int y = 0;

// int win = 0;

// //判断输入坐标的合法性

// while (win

// {

// printf("please input two number between %d to %d:>>",1,ROW);

// scanf("%d%d", &x, &y);

// if ((x >= 1 && x <= ROW) && (y >= 1 && y <= COL))

// {

// if (mine[x][y] == '1')

// {

// printf("You lose!you get a mine!\n");

// DisplayBoard(mine, ROW, COL);

// break;

// }

// else

// {

// //不是雷的情况下,统计x,y周围雷的信息

// int count = get_mine_count(mine, x, y);

// show[x][y] = count + '0';

// DisplayBoard(show, ROW, COL);

// win++;

// }

// }

// else

// {

// printf("Wrong coordinate,please try again!\n");

// }

// }

// if (win == row * col - EASY_COUNT)

// {

// printf("Congratulations,you win!\n");

// DisplayBoard(mine, ROW, COL);

// }

//}

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

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

相关文章

记一次 .NET 某医疗器械 程序崩溃分析

一&#xff1a;背景 1.讲故事前段时间有位朋友在微信上找到我&#xff0c;说他的程序偶发性崩溃&#xff0c;让我帮忙看下怎么回事&#xff0c;上面给的压力比较大&#xff0c;对于这种偶发性崩溃&#xff0c;比较好的办法就是利用 AEDebug 在程序崩溃的时候自动抽一管血出来&a…

1251: 字母图形 [水题]

1251: 字母图形 [水题] 时间限制: 1 Sec 内存限制: 128 MB提交: 140 解决: 61 统计题目描述 利用字母可以组成一些美丽的图形&#xff0c;下面给出了一个例子&#xff1a; ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形&#xff0c;请找出这个图形的规律&…

c语言 三角形三边abc,C语言代码输入abc三个数,求一这3个数为边长的三角形面积...

2011-01-04 回答#include #include #include #include #include int main(){float a 0.0;float b 0.0;float c 0.0;float s 0.0;double area 0.0;while(true){printf("input your date(a,b,c):");scanf("%f%f%f",&a,&b,&c);if(!isdigit((…

shell脚本中向hive动态分区插入数据

在hive上建表与普通分区表创建方法一样&#xff1b; 1 CREATE TABLE dwa_m_user_association_circle(2 device_number string, 3 oppo_number string, 4 prov_id_oppo string, 5 area_id_oppo string, 6 dealer_oppo string, 7 short_call_nums bigint, 8 long3…

WPF效果第二百零二篇之TreeView带连接线

前面文章中分享了TreeView支持多选;然而在项目上使用时,领导觉得不满意:体现不了真正的从属关系;既然领导都发话了;那就开整就行了;今天就再来个带有连接线的TreeView效果:1、来看看TreeViewItem的Template:2、展开和收缩动画:3、参考资料https://www.codeproject.com/tips/673…

ObjectTive C语言语法,[译]理解 Objective-C 运行时(下篇)

本文来自网易云社区作者&#xff1a;宋申易所以到底 objc_msgSend 发生了什么&#xff1f;很多事情。看一下这段代码&#xff1a;[self printMessageWithString:"Hello World!"];这实际上被编译器翻译成&#xff1a;objc_msgSend(self, selector(printMessageWithStr…

菜鸟学习MVC实录:弄清项目各类库的作用和用法

MVC模式即&#xff1a;模型&#xff08;Model&#xff09;-视图&#xff08;View&#xff09;-控制器&#xff08;Controller&#xff09; Model &#xff08;模型&#xff09;&#xff1a;是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责数据库中存取数据View…

SSL服务器

2019独角兽企业重金招聘Python工程师标准>>> SSL 是一个安全协议&#xff0c;它提供使用 TCP/IP 的通信应用程序间的隐私与完整性。因特网的 超文本传输协议&#xff08;HTTP&#xff09;使用 SSL 来实现安全的通信。 在客户端与服务器间传输的数据是通过使用对称算…

微软Skype Translator将支持阿拉伯语即时语音翻译

据美国科技时代网(Tech Times)3月9日报道&#xff0c;日前&#xff0c;微软旗下即时翻译软件Skype Translator再添新语种&#xff0c;微软宣布Skype Translator已经支持阿拉伯语。Skype用户可通过使用阿拉伯语即时翻译与朋友、家人以及海外商业伙伴进行交流。 据报道&#xff0…

是什么让.NET7的Min和Max方法性能暴增了45倍?

简介在之前的一篇文章.NET性能系列文章一&#xff1a;.NET7的性能改进中我们聊到Linq中的Min()和Max()方法.NET7比.NET6有高达45倍的性能提升&#xff0c;当时Benchmark代码和结果如下所示&#xff1a;[Params(1000)] public int Length { get; set; }private int[] arr;[Globa…

html标记语言 --框架

html标记语言 --框架六、框架1、什么是框架 框架将浏览器划分成不同的部分&#xff0c;每一部分加载不同的网页 实现同一浏览器窗口中加载多个页面的效果。 语法格式<frameset>.......</frameset>2. 属性2.1 cols使用“像素数”和%分割左右窗口&#xff0c;“*” 表…

c语言兔子洞,数据结构水题选讲 - osc_y08db3kb的个人空间 - OSCHINA - 中文开源技术交流社区...

[Ynoi2011]ODT\(O(nlog^2n)\) 的做法非常显然直接把树重链剖分一下&#xff0c;每个点维护轻儿子的平衡树就行但是这题 \(1e6\) 的数据范围使得 \(O(nlog^2n)\) 没那么容易卡过去(当然很多人卡过去了考虑给一个点很多重儿子那么若一个点有 \(k\) 个重儿子&#xff0c;修改复杂度…

centos 7.x systemd service 配置方法整理

一、存放路径/etc/systemd/system二、service配置整理2.1 zookeeper.service[Unit]DescriptionZooKeeper ServiceAftersyslog.targetAfternetwork.target[Service]#使用shell脚本启动的要用forking模式TypeforkingUserzookeeperGroupzookeeper#脚本启动ExecStart/usr/local/zoo…

MAVEN集成测试环境搭建

1. MAVEN SVN HUDSON SONAR集成测试环境搭建、1.1 软件准备 Hudson、Jenkins、Sonar1.2 软件安装 说明&#xff1a;本例均使用将应用程序部署至web容器下&#xff0c;Hudson和Sonar有其他部署启动方式&#xff0c;如有需要请自行使用&#xff0c;本文不做赘述。1.2.1 安装hu…

ubus c语言例子,openwrt之ubus例子

好一个icrootLEDE:/# ubus call test_ubus helloworld {"id":1,"msg":"hi","array":["a","b"]}{"id": 1,"msg": "hi","shuzu": ["a","b"]}文件目…

使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南

1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器&#xff0c;借助它可以非常方便的读写mongo库。本文介绍使用Spring Data MongoDB来访问mongodb数据库的几种方法&#xff1a; 使用Query和Criteria类JPA自动生成的查询方法使用Query 注解基于JSON查询在开始前&#…

mysqldump导出备份数据库报Table ‘performance_schema.session_variables‘ doesn‘t exist

今天在bash进行本地数据库往云端数据库导数据的时候&#xff0c;在本地导出.sql文件这第一步就出现了错误问题&#xff0c;导出sql文件的命令&#xff1a; 1 mysqldump -u 用户名 -p 数据库名 > xxx.sql 在做这一步将数据导出的时候报了这么一个错误&#xff0c; 1 mysqldu…

在Identity框架中使用RoleBasedAuthorization

本文将介绍在 Identity 框架中如何使用 Sang.AspNetCore.RoleBasedAuthorization[1] 库。核心介绍Identity 和 jwt 的基本配置我们在这里不再赘述&#xff0c;可以参考最后的项目样例。核心的代码主要为 IRolePermission 的实现。internal class MyRolePermission : IRolePermi…

2016年印度公有云服务市场将达13亿美元

根据IT咨询公司Gartner最新调查数据显示&#xff0c;2016年印度公有云服务市场预计将增长35.9%&#xff0c;达到13亿美元。 增长最快的是云系统基础设施即服务&#xff08;IaaS&#xff09;&#xff0c;2016年预计将增长45.5%&#xff1b;其次是平台即服务&#xff08;PaaS&…

PAT 1042. 字符统计

1042. 字符统计 请编写程序&#xff0c;找出一段给定文字中出现最频繁的那个英文字母。 输入格式&#xff1a; 输入在一行中给出一个长度不超过1000的字符串。字符串由ASCII码表中任意可见字符及空格组成&#xff0c;至少包含1个英文字母&#xff0c;以回车结束&#xff08;回车…