资讯专栏INFORMATION COLUMN

C语言学习笔记—P12(扫雷游戏<初级>+图解+题例)

lykops / 2104人阅读

目录

 前言:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

                                                                      ——By 作者:新晓·故知

                                                                                           2021.11.11

 扫雷游戏(初级)编写:

 创建文件项目:

菜单打印:test.c

 打印棋盘:

 布置雷:

 字符±(*/)ASCII码 " 0 "=字符

 扫雷游戏(初级)完整代码:

1.创建头文件:game.h  

2.创建源文件:  game.c 

3.创建源文件: test.c

4.按照提示运行程序即可 

运行结果示例:

 题例:

递归例1:

 递归例题2:

 递归例题3:

 递归例题4:

                                                 

                                                                             ——Since 新晓-故知

                                                                                             2021.11.11



 前言:
●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

                                                                      ——By 作者:新晓·故知

                                                                                           2021.11.11


 扫雷游戏(初级)编写:

 创建文件项目:

菜单打印:test.c

菜单打印  test.c#includevoid menu(){	printf("******扫雷游戏(初级)C语言版********/n");	printf("*************************************/n");	printf("*****  1.Play(输入1:开始游戏)*****/n");	printf("*****  0.Exit(输入0:退出游戏)*****/n");	printf("*************************************/n");	printf("/n");	printf("              ——By 作者:新晓·故知/n");}void game(){	printf("扫雷/n");}void test(){	int input = 0;	//srand((unsigned int)time(NULL));	do	{		menu();		printf("请选择:>");		scanf("%d", &input);		switch (input)		{		case 1:			//扫雷			game();			break;		case 0:			printf("退出游戏/n");			break;		default:			printf("选择错误/n");			break;		}	} while (input);}int main(){	test();	return 0;}

 

 打印棋盘:

1.game.h头文件的包含#include //#include //#include 符号的声明#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2//#define EASY_COUNT 10函数的声明初始化棋盘void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);打印棋盘void DisplayBoard(char board[ROWS][COLS], int row, int col);2.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){	//1~9	int i = 0;	int j = 0;	列号的打印	//for (i = 0; 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");	}}3.test.c#include "game.h"void menu(){	printf("******扫雷游戏(初级)C语言版********/n");	printf("*************************************/n");	printf("*****  1.Play(输入1:开始游戏)*****/n");	printf("*****  0.Exit(输入0:退出游戏)*****/n");	printf("*************************************/n");	printf("/n");	printf("              ——By 作者:新晓·故知/n");}void game(){	 //printf("扫雷/n");	 //创建数组	char mine[ROWS][COLS] = { 0 };//存放布置好的雷的信息	char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息	//初始化mine数组为全"0"	InitBoard(mine, ROWS, COLS, "0");	//初始化show数组为全"*"	InitBoard(show, ROWS, COLS, "*");	打印棋盘	DisplayBoard(mine, ROW, COL);	DisplayBoard(show, ROW, COL);}void test(){	int input = 0;	//srand((unsigned int)time(NULL));	do	{		menu();		printf("请选择:>");		scanf("%d", &input);		switch (input)		{		case 1:			//扫雷			game();			break;		case 0:			printf("退出游戏!/n");			break;		default:			printf("选择错误,请重新输入!/n");			break;		}	} while (input);}int main(){	test();	return 0;}

  

 

 布置雷:

布置雷:1.game.h//头文件的包含#include #include //#include //符号的声明#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2//#define EASY_COUNT 10//函数的声明//初始化棋盘void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);//打印棋盘void DisplayBoard(char board[ROWS][COLS], int row, int col);//布置雷void SetMine(char mine[ROWS][COLS], int row, int col);2.gamer.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){	//1~9	int i = 0;	int j = 0;	//列号的打印	for (i = 0; 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");	}}void SetMine(char mine[ROWS][COLS], int row, int col){	int count = 10; 此处控制布置雷的个数!	while (count)	{		int x = rand() % row + 1;		int y = rand() % col + 1;		if (mine[x][y] == "0")		{			mine[x][y] = "1";			count--;		}	}}3.test.c#include "game.h"void menu(){	printf("******扫雷游戏(初级)C语言版********/n");	printf("*************************************/n");	printf("*****  1.Play(输入1:开始游戏)*****/n");	printf("*****  0.Exit(输入0:退出游戏)*****/n");	printf("*************************************/n");	printf("/n");	printf("              ——By 作者:新晓·故知/n");}void game(){	 //printf("扫雷/n");	 //创建数组	char mine[ROWS][COLS] = { 0 };//存放布置好的雷的信息	char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息	//初始化mine数组为全"0"	InitBoard(mine, ROWS, COLS, "0");	//初始化show数组为全"*"	InitBoard(show, ROWS, COLS, "*");	打印棋盘	//DisplayBoard(mine, ROW, COL); //真正进行排雷会屏蔽此语句,此语句可查看雷的位置坐标	//DisplayBoard(show, ROW, COL); //真正进行排雷会屏蔽此语句,此语句可查看雷的位置坐标	//布置雷	SetMine(mine, ROW, COL);	DisplayBoard(mine, ROW, COL);}void test(){	int input = 0;	srand((unsigned int)time(NULL));//时间随机生成数	do	{		menu();		printf("请选择:>");		scanf("%d", &input);		switch (input)		{		case 1:			//扫雷			game();			break;		case 0:			printf("退出游戏!/n");			break;		default:			printf("选择错误,请重新输入!/n");			break;		}	} while (input);}int main(){	test();	return 0;}

 

 知识点:字符±(*/)ASCII码 " 0 "=字符

 

 

 

 扫雷游戏(初级)完整代码:

1.创建头文件:game.h  

代码如下:

game.h//头文件的包含#include #include #include //符号的声明#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define EASY_COUNT 10  //此处控制布置雷的个数,最终版将会设置成时间随机生成雷的个位数!!!//函数的声明//初始化棋盘void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);//打印棋盘void DisplayBoard(char board[ROWS][COLS], int row, int col);//布置雷void SetMine(char mine[ROWS][COLS], int row, int col);//排查雷void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

2.创建源文件:  game.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){	//1~9	int i = 0;	int j = 0;	//列号的打印	for (i = 0; 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");	}}void SetMine(char mine[ROWS][COLS], int row, int col){	int count = EASY_COUNT;//此处控制布置雷的个数,最终版将会设置成时间随机生成雷的个位数	while (count)	{		int x = rand() % row + 1;		int y = rand() % col + 1;		if (mine[x][y] == "0")		{			mine[x][y] = "1";			count--;		}	}}static int get_mine_count(char mine[ROWS][COLS], int x, int y){	return mine[x - 1][y] +		mine[x - 1][y - 1] +		mine[x][y - 1] +		mine[x + 1][y - 1] +		mine[x + 1][y] +		mine[x + 1][y + 1] +		mine[x][y + 1] +		mine[x - 1][y + 1] - 8 * "0"; //n + "0" 可以得到字符n !!!}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 - EASY_COUNT)	{		printf("请输入要排查雷的坐标:>");		scanf("%d %d", &x, &y);		if (x >= 1 && x <= row && y >= 1 && y <= col)		{			if (mine[x][y] == "1")			{				printf("很遗憾,你被炸死了!/n");				DisplayBoard(mine, row, col);				break;			}			else			{				//计算x,y坐标周围有几个雷				int n = get_mine_count(mine, x, y);				show[x][y] = n + "0";                  //n + "0" 可以得到字符n !!!				DisplayBoard(show, row, col);				win++;			}		}		else		{			printf("输入坐标非法,无法排雷,请重新输入!/n");		}	}	if (win == row * col - EASY_COUNT)	{		printf("恭喜你,排雷成功!/n");		DisplayBoard(mine, row, col);	}}

3.创建源文件: test.c

代码如下:

test.c#define  _CRT_SECURE_NO_WARNINGS#include "game.h"void menu(){	printf("******扫雷游戏(初级)C语言版********/n");	printf("*************************************/n");	printf("*****  1.Play(输入1:开始游戏)*****/n");	printf("*****  0.Exit(输入0:退出游戏)*****/n");	printf("*************************************/n");	printf("/n");	printf("              ——By 作者:新晓·故知/n");}void game(){	 //printf("扫雷/n");	 //创建数组	char mine[ROWS][COLS] = { 0 };//存放布置好的雷的信息	char show[ROWS][COLS] = { 0 };//存放排查出的雷的信息	//初始化mine数组为全"0"	InitBoard(mine, ROWS, COLS, "0");	//初始化show数组为全"*"	InitBoard(show, ROWS, COLS, "*");	打印棋盘	//DisplayBoard(mine, ROW, COL); //真正进行排雷会屏蔽此语句,此语句可查看雷的位置坐标	//DisplayBoard(show, ROW, COL); //真正进行排雷会屏蔽此语句,此语句可查看雷的位置坐标	//布置雷	SetMine(mine, ROW, COL);	//DisplayBoard(mine, ROW, COL);	//DisplayBoard(mine, ROW, COL);	//排雷	FindMine(mine, show, ROW, COL);}void test(){	int input = 0;	srand((unsigned int)time(NULL));//时间随机生成数	do	{		menu();		//printf("请选择:>");		printf("请选择游戏开始或结束:>/n");		printf("#输入数字1代表游戏开始,输入数字0代表游戏结束#/n");		printf("#坐标输入方式:数字-空格键-数字#/n");		scanf("%d", &input);		switch (input)		{		case 1:			//扫雷			game();			break;		case 0:			printf("退出游戏!/n");			break;		default:			printf("选择错误,请重新输入!/n");			break;		}	} while (input);}int main(){	test();	return 0;}

4.按照提示运行程序即可 



运行结果示例:

使用说明:
(1)红框标记语句可控制“雷”的位置坐标的显示与隐藏:


(2)红框标记语句可更改“雷”的数量 :

因本程序设置棋盘大小为9*9,故此处数量区间为[0,81],

(3)红框标记语句可进行棋盘大小更改 :

将数字9更改即可,数字9代表棋盘操作大小,ROW+2代表棋盘总大小,

即操作棋盘大小为9*9,总棋盘大小(加上外框)为11*11

 

 题例:

递归例1:

#include int Fun(int n){    if (n == 5)        return 2;    else        return 2 * Fun(n + 1);}int main(){    int ret = Fun(2);    printf("%d/n", ret);    return 0;}

 

 

 递归例题2:

//编写一个函数 reverse_string(char* string)(递归实现)//实现:将参数字符串中的字符反向排列,不是逆序打印。//要求:不能使用C函数库中的字符串操作函数。//比如 ://char arr[] = "abcdef";//逆序之后数组的内容变成:fedcba#include int my_strlen(char* s){	int count = 0;	while (*s != "/0")	{		count++;		s++;	}	return count;}//[a b c d e f g /0]递归版本void reverse_string(char* arr){	int len = my_strlen(arr);	char tmp = *arr;	*arr = *(arr + len - 1);	*(arr + len - 1) = "/0";	if(my_strlen(arr+1)>1)		reverse_string(arr+1);		*(arr + len - 1) = tmp;}int main(){	char arr[] = "abcdefg";	reverse_string(arr);	printf("%s/n", arr);//fedcba	return 0;}

参数用指针的形式void reverse_string(char* str){	char* left = str;	char* right = str + my_strlen(str) - 1;	while (left

 

参数是数组的形式void reverse_string(char arr[]){	int left = 0;	int right = my_strlen(arr)-1;	//交换	while (left

 递归例题3:

写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和例如,调用DigitSum(1729),则应该返回1 + 7 + 2 + 9,它的和是19输入:1729,输出:19int DigitSum(size_t n){	if (n <= 9)		return n;	else		return DigitSum(n / 10) + n % 10;}int main(){	size_t num = 0;	scanf("%u", &num);	int ret = DigitSum(num);	printf("%d/n", ret);	return 0;}

 

 递归例题4:

double Pow(int n, int k){	if (k == 0)		return 1;	else if (k > 0)		return n * Pow(n, k - 1);	else		return 1.0 / Pow(n, -k);}int main(){	int n = 0;	int k = 0;	scanf("%d %d", &n, &k);	double ret = Pow(n, k);	printf("%lf/n", ret);	return 0;}

                                                 


                                                                             ——Since 新晓-故知

                                                                                             2021.11.11

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/123189.html

相关文章

  • C语言学习笔记—P17(函数栈帧的创建与销毁<超详解版>+图解+题例

    摘要:目录前言由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教前言由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教作者新晓故知作者新晓故知那些代码背后的故事那些代码背后的故事通过 目录 前言:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚...

    gnehc 评论0 收藏0
  • C语言学习笔记—P15(指针<初阶>+图解+题例

    摘要:变量占用个字节的空间,这里是将的个字节的第一个字节的地址存放在变量中,就是一个之指针变量。是指针变量作者新晓故知总结指针变量,用来存放地址的变量。 目录 前言:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!                           ...

    weknow619 评论0 收藏0
  • C语言实现初级扫雷

    摘要:文章目录一游戏简介二代码实现调用函数打印菜单函数函数初始化函数布置雷函数排雷函数三总代码一游戏简介一款小游戏,一张棋盘可以自己设计,,,都可以,或是添加一些自己喜欢的元素布满许多未知是雷或是安全的格子,输入坐标,若触雷,游戏结束,反之,显 文章目录 一、游戏简介 二、代码实现 1.调用tes...

    Rango 评论0 收藏0
  • C/C++游戏项目详细教学:《扫雷

    摘要:扫雷最原始的版本可以追溯到年一款名为方块的游戏。两年后,汤姆安德森在的基础上又编写出了游戏地雷,由此奠定了现代扫雷游戏的雏形。年,微软公司的罗伯特杜尔和卡特约翰逊两位工程师在系统上加载了该游戏,扫雷游戏才正式在全世界推广开来。 扫雷最原始的版本可以追溯到1973年一款名为方块的游戏。 不久,...

    meteor199 评论0 收藏0
  • C语言实现入门级小游戏——扫雷

    摘要:上一期咱们用语言实现了三子棋的小游戏语言实现三子棋今天我们再来写个扫雷的游戏,说起扫雷,相信大家都不陌生,可能许多朋友还是玩扫雷的高手。      上一期咱们用C语言实现了三子棋的小游戏  C语言实现三子棋       今天我们再来写个扫雷的游戏,说起扫雷,相信大家都不陌生,可能许多朋友还是...

    nevermind 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<