C语言如何实现简单扫雷小程序

这篇文章主要介绍C语言如何实现简单扫雷小程序,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

扫雷是一款大众类的益智小游戏。游戏目标是在最短的时间内根据点击格子出现的数字找出所有非雷格子,同时避免踩雷,踩到一个雷即全盘皆输。

首先带大家简单来了解一下扫雷的游戏机制:

随便点一个格子,会有一块,上面的数字就代表数字周围八个格子会有几个雷,是1他周围就只有1个雷,2就有两个雷,以此类推,直到找出全部没有雷的格子就算玩家赢。只要点到一个有雷的格子就判定玩家输。

了解了 机制之后就来编写程序。将程序分为test.c、game.c和game.h三个部分。其中test.c中编写主函数,game.c中实现游戏的功能,game.h中存放头文件以及对于函数的声明。

在test.c模块中,首先定义一个menu来存放一个游戏开始的菜单

intmenu()
{
printf("********************\n");
printf("********************\n");
printf("****1、开始游戏*****\n");
printf("****0、退出游戏*****\n");
printf("********************\n");
printf("********************\n");

}

编写game函数用来存放游戏实现模块

voidgame()
{
}

编写主函数来调用game。通过do–while循环来实现menu,并用switch语句来选择游戏开始和结束

intmain()
{
intinput=0;
do
{
menu();
printf("请选择:\n");
scanf("%d",&input);
switch(input)
{
case1:
printf("游戏开始:\n");
game();
break;
case0:
printf("游戏退出\n");
break;
default:
printf("请输入正确的数字:\n");
break;
}

}while(input);
return0;
}

现在进入game模块的代码实现

首先需要编写一个函数来实现扫雷的界面这里我们用InitBoard函数来实现9x9的扫雷界面。用*代表没有被点开的格子,用1表示雷,0表示空格子。

voidInitBoard(charboard[][COLS],introws,intcols,charset)
{
inti=0;
intj=0;
for(i=0;i

在test.c中的game函数中调用函数

//存放雷
charmine[ROWS][COLS]={0};
//排查雷
charmineInfo[ROWS][COLS]={0};
InitBoard(mine,ROWS,COLS,'0');
InitBoard(mineInfo,ROWS,COLS,'*');

在game.c模块中编写ShowBoard函数将之前编写的扫雷界面打印出来

voidShowBoard(charboard[][COLS],introw,intcol)
{
inti=0;
intj=0;
printf("===================================\n");
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");
}
printf("===================================\n");

}

此时运行结果为;

再来编写SetMine函数设置雷用rand函数随机设置雷的坐标,雷的数量为MINE_NUM这里我们设置10个雷。

voidSetMine(charmine[][COLS],introw,intcol)
{
intx=0;
inty=0;
intcount=0;
while(count

用函数来计算当前格子周围雷的个数。注意由于我们定义的雷为char类型,在计算数量的时候需要将其转化为int类型。将加起来的数据-8 * ‘0'。

staticintGetMineCount(charmine[][COLS],intx,inty)
{
returnmine[x-1][y-1]+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]-8*'0';
}

最后我们用FindMine函数来实现玩家扫雷的操作

voidFindMine(charmine[][COLS],charmineInfo[][COLS],introw,intcol)
{
intcount=0;
intx=0;
inty=0;
while(count=1&&y<=9&&y>=1&&x<=9)
{
if(mine[x][y]=='1')
{
printf("你被炸死了\n");
ShowBoard(mine,row,col);
break;
}
else
{
intret=GetMineCount(mine,x,y);
mineInfo[x][y]=ret+'0';
ShowBoard(mineInfo,row,col);
count++;
}
}
else{
printf("输入的坐标不合法\n");
}
}
}

记得在test.c中的game函数中调用game.c中实现游戏功能的函数。

voidgame()
{
charmine[ROWS][COLS]={0};
charmineInfo[ROWS][COLS]={0};
InitBoard(mine,ROWS,COLS,'0');
InitBoard(mineInfo,ROWS,COLS,'*');
ShowBoard(mineInfo,ROW,COL);
SetMine(mine,ROW,COL);
FindMine(mine,mineInfo,ROW,COL);
}

头文件的编写:

#ifndef_GAME_H_
#define_GAME_H_
#include
#include
#include
#defineMINE_NUM10

#defineROW9
#defineCOL9

#defineROWSROW+2
#defineCOLSCOL+2

voidInitBoard(charboard[][COLS],introws,intcols,charset);
voidShowBoard(charboard[][COLS],introw,intcol);
voidSetMine(charmine[][COLS],introw,intcol);
voidFindMine(charmine[][COLS],charmineInfo[][COLS],introw,intcol);

#endif//!_GAME_H

至此一个简单的扫雷程序编写完毕

运行结果:

以上是“C语言如何实现简单扫雷小程序”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注恰卡编程网行业资讯频道!

发布于 2021-05-30 14:07:40
分享
海报
168
上一篇:C语言中如何实现扫雷小游戏下一篇:C语言实现数据类型占多少字节和指针占多少字节的示例分析
目录

    忘记密码?

    图形验证码