C语言实现扫雷小游戏
本文实例为大家分享了C语言实现扫雷游戏的具体代码,供大家参考,具体内容如下
主函数:main.c
#include"game.h"
voidMenu()
{
printf("##########################\n");
printf("##1.play0.exit##########\n");
printf("##########################\n");
printf("##PleaseEnterselect!##\n");
}
intmain()
{
Menu();
srand((unsignedint)time(NULL));
intquit=0;
while(!quit)
{
intselect=0;
printf("请输入你的选择:\n");
scanf("%d",&select);
switch(select)
{
case1:
game();
break;
case2:
quit=1;
break;
default:
printf("你输入有误,请重新输入:\n");
break;
}
}
printf("ByeBye!\n");
system("pause");
return0;
}
子函数:game.c
#include"game.h"
voidgame()
{
charmine[ROWS][COLS]={0};
charshow[ROWS][COLS]={0};
memset(mine,'0',sizeof(mine));//初始化数组置为0
memset(show,'*',sizeof(show));//初始化数组置为*
intno_y,no_x;
set_mine(mine,ROWS,COLS,&no_x,&no_y);//布雷‘1'表示雷
intx=0;
inty=0;
inttime=100-NUM;
while(time>0)
{
system("cls");//清屏
Show(show,ROWS,COLS);//打印棋盘
printf("请输入坐标:\n");
scanf("%d%d",&x,&y);
if(x<1||x>10||y<1||y>10)
{
printf("你输入有误,请重新输入:\n");
continue;
}
if(show[x][y]!='*')
{
printf("你输入有误,请重新输入:\n");
continue;
}
if(mine[x][y]=='1')
{
if(time==80)//如果第一次有雷,用一个没雷的与这个交换
{
mine[x][y]='0';
mine[no_y][no_y]='1';
}
else
{
printf("gameover!\n");
Show(mine,ROWS,COLS);
break;
}
}
show[x][y]=get_mine_count(mine,x,y)+'0';
Expand(mine,show,x,y);
time--;
}
}
voidset_mine(charmine[ROWS][COLS],intcol,introw,int*no_x,int*no_y)//声明布雷函数
{
intcount=NUM;//设置计数器,统计布雷的个数
while(count>0)
{
intx=rand()%(col-2)+1;
inty=rand()%(col-2)+1;
if((mine[x][y])=='0')
{
mine[x][y]='1';
count--;
}
}
for(inti=1;i<=10;i++)
{
for(intj=1;i<=10;j++)
{
if(mine[i][j]=='0')
{
no_x=i;
no_y=j;
return;
}
}
}
}
voidShow(charmine[ROWS][COLS],introw,intcol)//声明打印棋盘函数
{
inti=0;
intj=0;
printf("");
for(i=1;i<=10;i++)
{
printf("%2d|",i);
}
printf("\n");
for(i=1;i<=11;i++)
{
printf("----");
}
printf("\n");
for(i=1;i<=10;i++)
{
printf("%2d|",i);
for(j=1;j<=10;j++)
{
printf("%2c|",mine[i][j]);
}
printf("\n");
for(inti=1;i<=11;i++)
{
printf("----");
}
printf("\n");
}
}
intget_mine_count(charmine[ROWS][COLS],intx,inty)//雷数统计
{
returnmine[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]+mine[x-1][y]-8*'0';
}
voidExpand(charmine[ROWS][COLS],charshow[ROWS][COLS],intx,inty)
{
if(x>=1&&x<=10&&y>=1&&y<=10)
{
if(get_mine_count(mine,x,y)+'0'=='0')//表示x,y周围没雷
{
show[x][y]='0';
if(show[x-1][y-1]=='*')
{
Expand(mine,show,x-1,y-1);
}
if(show[x-1][y]=='*')
{
Expand(mine,show,x-1,y);
}
if(show[x-1][y+1]=='*')
{
Expand(mine,show,x-1,y+1);
}
if(show[x][y-1]=='*')
{
Expand(mine,show,x,y-1);
}
if(show[x][y+1]=='*')
{
Expand(mine,show,x,y+1);
}
if(show[x+1][y-1]=='*')
{
Expand(mine,show,x+1,y-1);
}
if(show[x+1][y]=='*')
{
Expand(mine,show,x+1,y);
}
if(show[x+1][y+1]=='*')
{
Expand(mine,show,x+1,y+1);
}
}
}
}
函数声明:game.h
#ifndef_GAME_H_ #define_GAME_H_ #include#include #pragmawarning(disable:4996) #include #include #defineROWS12 #defineCOLS12 #defineNUM20//雷数 voidgame(); voidset_mine(charmine[ROWS][COLS],introw,intcol,int*no_x,int*no_y); voidShow(charmine[ROWS][COLS],introw,intcol); intget_mine_count(charmine[ROWS][COLS],intx,inty); voidExpand(charmine[ROWS][COLS],charshow[ROWS][COLS],intx,inty); #endif
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。