资讯专栏INFORMATION COLUMN

初学C语言《扫雷》

joy968 / 3056人阅读

摘要:扫雷简单的可控化扫雷文章目录扫雷分析一,头文件二主函数,二初始化打印布置雷找雷代码整合主要是理解,明确思路,理清思路就是对所学知识的简单应用分析玩家选择雷格,出现的数字即周围一圈所包含雷的个数,当我们不去点击格子,我们

扫雷

简单的可控化扫雷



分析


玩家选择雷格,出现的数字即周围一圈所包含雷的个数,当我们不去点击格子,我们不知道其下的情况,可以试想是不是有一个在背后处理雷的布局,表面有一个玩家操控的布局,我们只需要建立简单的联系使两个布局发挥作用。


一,头文件

game.h

#include #include #include #define ROW  9//我们选择难度最小的9*9雷区#define COL  9#define ROWS ROW+2//最外圈排雷需要#define COLS COL+2#define EASY_COUNT 10//声明内容,详情见下文void intborad(char board[ROWS][COLS], int rows, int cols, char ret);void disprond(char board[ROWS][COLS], int row, int col);void setball(char board[ROWS][COLS], int row, int col);void findball(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

二、主函数

int main(){	test();//游戏最大框架,开始界面的进入游戏与相关选择	return 0;}

1.test

void test(){	srand((unsigned int)time(NULL));	menu();//菜单打印	int input=0;	printf("请选择>");	do//由选择来决定下文	{		scanf("%d",&input);		switch (input)		{		case 1:			game();			break;		case 2:			break;		default:			printf("输入错误请重输入");			break;		}	} while (1);}

menu

void menu(){	printf("************************************/n");	printf("*******        1 . play    *********/n");	printf("*******        2 . exit    *********/n");	printf("************************************/n");}

2, game

void game(){//相同类型方便后期啊建立联系,对背后的修改可反映到展示函数	char mine[ROWS][COLS] = { 0 };//背后	char show[ROWS][COLS] = { 0 };//玩家看到的//将背后全初始化为0,雷放为一	intborad(mine, ROWS, COLS, "0");	intborad(show, ROWS, COLS, "*");//注释代码可供开发者在制作过程中检查	//disprond(mine, ROW, COL);	//disprond(show, ROW, COL);	setball(mine, ROW, COL);//布置雷	//setball(show, ROW, COL);	disprond(show, ROW, COL);	//disprond(show, ROW, COL);	findball(mine, show, ROW, COL);//排雷且建立联系}

示例:完成一个目的,可以先把这一步想好,后续反复打磨填充。

二、game.c

1.初始化

void intborad(char board[ROWS][COLS], int rows, int cols, char ret)
void intborad(char board[ROWS][COLS], int rows, int cols, char ret){	int i=0;	int j=0;	for (i = 0; i < rows; i++)	{		for (j = 0; j < cols; j++)		{			board[i][j] = ret;		}	}}

2.打印

代码如下(示例):

void disprond(char board[ROWS][COLS], int row, int col){	int i=0;	int j=0;	//列(列行坐标方便玩家操作)	for (i = 0; i <= row; i++)	{		printf(" %d", i);	}	printf("/n");	//行以及内容	for (i = 1; i <= col; i++)	{		printf(" %d", i);		for (j = 1; j <= col; j++)		{			printf(" %c", board[i][j]);		}		printf("/n");	}}

3.布置雷

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

代码如下(示例):

void setball(char board[ROWS][COLS], int row, int col){	int count= EASY_COUNT;//见头文件,埋十颗	while (count)	{		int x = rand() % row + 1;//随机数		int y = rand() % col + 1;		if (board[x][y] == "0")		{			board[x][y] = "1";//雷为1		}		count--;	}}

4.找雷

void findball(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)//为了最外围多加一圈,现在是9*9内		{			if (mine[x][y] == "1")//布置雷时将雷设为1			{				printf("恭喜你被炸死了/n");				disprond(mine, row, col);				break;			}			else			{				int n = get_mine_count(mine, x, y);//游戏有点某一个扩散一片的现象,就周围都为0,需要不断寻找				show[x][y] = n + "0";//整形转化为字符,建立联系				disprond(show, row, col);				win++;			}		}		else		{			printf("请输入正确坐标/n");		}	}	if (win == row * col - EASY_COUNT)//71	{		printf("排雷成功");		disprond(mine, row, col);	}}

.get_mine_count(mine, x, y)

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";}

将雷布置在不可见背后棋盘


代码整合

game.h

#pragma once#include #include #include #define ROW  9#define COL  9#define ROWS ROW+2#define COLS COL+2#define EASY_COUNT 10void intborad(char board[ROWS][COLS], int rows, int cols, char ret);void disprond(char board[ROWS][COLS], int row, int col);void setball(char board[ROWS][COLS], int row, int col);void findball(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

test.c

#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu(){	printf("************************************/n");	printf("*******        1 . play    *********/n");	printf("*******        2 . exit    *********/n");	printf("************************************/n");}void game(){	char mine[ROWS][COLS] = { 0 };	char show[ROWS][COLS] = { 0 };	intborad(mine, ROWS, COLS, "0");	intborad(show, ROWS, COLS, "*");	//disprond(mine, ROW, COL);	//disprond(show, ROW, COL);	setball(mine, ROW, COL);	//setball(show, ROW, COL);	disprond(show, ROW, COL);	//disprond(show, ROW, COL);	findball(mine, show, ROW, COL);}void test(){	srand((unsigned int)time(NULL));	menu();	int input=0;	printf("请选择>");	do	{		scanf("%d",&input);		switch (input)		{		case 1:			game();			break;		case 2:			break;		default:			printf("输入错误请重输入");			break;		}	} while (1);}int main(){	test();	return 0;}

game.c

#define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void intborad(char board[ROWS][COLS], int rows, int cols, char ret){	int i=0;	int j=0;	for (i = 0; i < rows; i++)	{		for (j = 0; j < cols; j++)		{			board[i][j] = ret;		}	}}void disprond(char board[ROWS][COLS], int row, int col){	int i=0;	int j=0;	//列	for (i = 0; i <= row; i++)	{		printf(" %d", i);	}	printf("/n");	//行以及内容	for (i = 1; i <= col; i++)	{		printf(" %d", i);		for (j = 1; j <= col; j++)		{			printf(" %c", board[i][j]);		}		printf("/n");	}}void setball(char board[ROWS][COLS], int row, int col){	int count= EASY_COUNT;	while (count)	{		int x = rand() % row + 1;		int y = rand() % col + 1;		if (board[x][y] == "0")		{			board[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";}void findball(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)		{
            
                     
             
               

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

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

相关文章

  • [ C语言 ] 扫雷 ------> 用C语言实现game2

    摘要:函数游戏菜单请选择扫雷游戏退出游戏选择错误解析函数内部利用时间戳,形成随机数,主要目的是实现游戏中地雷的随机埋放。 前言 本篇文章使用C语言实现简单小游戏---扫雷。(文章最后有完整代码链接) 想必大多数人都玩过或者了解过扫雷的游戏规则,但是在这里,我们在一起重温一下扫雷的游戏规则,也更好...

    I_Am 评论0 收藏0
  • 如何学好c语言

    摘要:第二条军规必须画图理解,内存布局语言是一门偏底层的语言,可以直接操作访问内存的所以我们应该清楚知道,写出的代码所对应的内存布局。如果想学好语言,三条军规势在必行最后,关于学好语言我想说的也就到这里了,感谢你的观看。 目录 一.讲这个主题的原因 二.关于选择问题 三.具体学习方法 一.为什么要...

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

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

    nevermind 评论0 收藏0
  • 扫雷C语言版)

    摘要:展示雷盘和初始化雷盘不一样,展示雷盘只需要用即可,并不需要将都展示出来,只是为了我们更好的计算扫雷的位置周围的雷的数量。 目录 1、需求分析 2、程序架构 3、代码实现(分函数呈现) (1)主函数代码实现 分析: 异常处理: (2)游戏主函数实现 分析: (3)初始化函数的实现 分析: (4...

    EscapedDog 评论0 收藏0
  • C语言实现游戏】(二)扫雷(递归实现排雷)

    摘要:玩家选择开始游戏后,出现雷盘,并且随机布置雷。雷盘的数组大小为,方便计算扫雷时周围雷的数量,并防止数组越界。放置布置的雷的信息放置排查出雷的信息初始化雷盘初始化展示界面打印展示界面效果如下布置雷随机在数组中让十个变成作为雷。 目录 前言 一、游戏思路 二、游戏框架 1.菜单界面 1.菜单:...

    U2FsdGVkX1x 评论0 收藏0

发表评论

0条评论

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