C语言如何实现扫雷游戏

这篇文章主要介绍了C语言如何实现扫雷游戏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

本文将介绍如何用C语言多文件编程实现扫雷该示例扫雷程序可实现以下几个功能:

  • 自定义雷数

  • 踩雷后会将所有雷显示出来

  • 地图大小易修改

Mine_clearance.h

#pragmaonce
#define_CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>


#defineROW11
#defineCOL11
#define踩雷0
#define玩家胜利1

intg_number_mine=(ROW-1)*(COL-1);//雷的数量上限
charmap[ROW][COL];//玩家看到的地图
charmine_map[ROW+2][COL+2];//雷阵

voidInit_map();//初始化玩家看到的地图
voidInit_mine_map(intinput_count);//初始化雷阵
voidPrint_map();//打印地图
voidPrint_mine_map();//如果踩雷需要把雷阵打印出来
voidPlayer_move(introw,intcol);//提示玩家输入坐标开始游戏1.合法性校验(是否越界)2.是否重复输入,(已经输入过的)
intJudge_mine_end(introw,intcol);//判断是否踩雷
charCount_number_mine(introw,intcol);//统计周围八个方块雷的个数
voidPrint_mine_number(introw,intcol,intn);//将周围八个方块雷的数量显示在当前方块上
intJudge_win(intinput_count);//判断是否获胜

Mine_clearance.c

#include"Mine_clearance.h"

//初始化玩家看到的地图
voidInit_map()
{
for(introw=0;row<=ROW;++row)
{
for(intcol=0;col<=COL;++col)
{
map[row][col]='';
}
}
}

//初始化雷阵
voidInit_mine_map(intinput_count)
{
for(introw=0;row<ROW;++row)
{
for(intcol=0;col<COL;++col)
{
mine_map[row][col]='';
}
}
srand((unsigned)time(NULL));
for(inti=0;i<input_count;++i)
{

introw=rand()%(ROW-1)+1;
intcol=rand()%(COL-1)+1;
while(1)
{
if(mine_map[row][col]=='x'&&row==(ROW-1)&&col==(COL-1))
{
row=1;
col=1;
}elseif(mine_map[row][col]=='x'&&(col==COL-1))
{
row+=1;
col=1;
}elseif(mine_map[row][col]=='x'&&(col<COL-1))
{
col++;
}else
{
mine_map[row][col]='x';

break;
}
}
}
}

//打印地图
voidPrint_map()
{
for(inti=1;i<ROW;++i)
{
printf("%d",i);
}
printf("\n|");
for(intj=1;j<ROW;++j)
{
printf("-----|");
}
printf("\n");
inti=1;
for(introw=1;row<ROW;++row)
{
for(intcol=1;col<COL;++col)
{
printf("|%c",map[row][col]);
}
printf("|%d\n",i);
for(intb=1;b<ROW;++b)
{
printf("|-----");
}

printf("|");
printf("\n");
i=i+1;
}
}

//如果踩雷需要把雷阵打印出来
voidPrint_mine_map()
{
for(inti=1;i<ROW;++i)
{
printf("%d",i);
}
printf("\n|");
for(intj=1;j<ROW;++j)
{
printf("-----|");
}
printf("\n");
inti=1;
for(introw=1;row<ROW;++row)
{
for(intcol=1;col<COL;++col)
{
printf("|%c",mine_map[row][col]);
}
printf("|%d\n",i);
for(intb=1;b<ROW;++b)
{
printf("|-----");
}
printf("|");
printf("\n");
i=i+1;
}
}

//提示玩家输入坐标开始游戏
//1.合法性校验(是否越界
//2.是否重复输入,(已经输入过的)
voidPlayer_move(introw,intcol)
{

if(row<1||row>=ROW||col<1||col>=COL)
{
printf("非法输入!请重新输入\n");
}elseif(map[row][col]=='o')
{
printf("重复输入无效,请重新输入!\n");
}else
{
map[row][col]='o';
}
}

//判断是否踩雷
intJudge_mine_end(introw,intcol)
{
if(map[row][col]=='o'&&mine_map[row][col]=='x')
{
return踩雷;
}
return1;
}

//统计周围八个方块雷的个数
charCount_number_mine(introw,intcol)
{
intn=0;
for(inti=-1;i<2;++i)
{
for(intj=-1;j<2;++j)
{
if(mine_map[row+i][col+j]=='x')
{
n+=1;
}
}
}
returnn;
}
//将周围八个方块雷的数量显示在当前方块上
voidPrint_mine_number(introw,intcol,intn)
{
charnum_mine[]={'0','1','2','3','4','5','6','7','8'};
switch(n){
case0:
map[row][col]=num_mine[0];
break;
case1:
map[row][col]=num_mine[1];
break;
case2:
map[row][col]=num_mine[2];
break;
case3:
map[row][col]=num_mine[3];
break;
case4:
map[row][col]=num_mine[4];
break;
case5:
map[row][col]=num_mine[5];
break;
case6:
map[row][col]=num_mine[6];
break;
case7:
map[row][col]=num_mine[7];
break;
case8:
map[row][col]=num_mine[8];
break;
default:
printf("雷数非法\n");
break;
}
}

intJudge_win(intinput_count)
{
intnum_mine=0;
for(introw=1;row<ROW;++row)
{
for(intcol=1;col<COL;++col)
{
if(map[row][col]!='')
{
num_mine+=1;
}
}
}
if(num_mine==(ROW-1)*(COL-1)-input_count)
{
return玩家胜利;
}
return2;
}

main.c

#include"Mine_clearance.h"

intmain()
{

while(1)
{
intinput_count=0;
intcount_mine=0;
introw=0;
intcol=0;

printf("自定义雷的个数:\n");
scanf("%d",&input_count);
if(input_count<1||input_count>=g_number_mine)
{
printf("非法输入,请重新输入!\n");
}else
{
Init_mine_map(input_count);
Init_map();
Print_map();

while(1)
{
printf("请输入坐标:(中间用空格隔开)\n");
scanf("%d%d",&row,&col);
Player_move(row,col);
if(Judge_mine_end(row,col)==踩雷)
{
printf("踩雷了,游戏结束\n");
Print_mine_map();
break;
}else
{
count_mine=Count_number_mine(row,col);
Print_mine_number(row,col,count_mine);
Print_map();
if(Judge_win(input_count)==玩家胜利)
{
printf("你赢了!\n");
break;
}
}
}
}
}

system("pause");
return0;

}

显示效果:

C语言如何实现扫雷游戏

C语言如何实现扫雷游戏

感谢你能够认真阅读完这篇文章,希望小编分享的“C语言如何实现扫雷游戏”这篇文章对大家有帮助,同时也希望大家多多支持恰卡编程网,关注恰卡编程网行业资讯频道,更多相关知识等着你来学习!

发布于 2021-05-30 14:07:28
收藏
分享
海报
0 条评论
178
上一篇:c语言如何实现两个单链表的交叉合并方式 下一篇:C语言如何实现文本文件/二进制文件格式互换
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码