扫雷小游戏

来源:互联网 发布:arena仿真软件 编辑:程序博客网 时间:2024/05/18 02:41
--------------------------------------game.h---------------------------------------------------
#include<time.h>
#define ROW 12//行
#define COL 12//列
void init_show(char show[ROW][COL],int row,int col);
void init_simi(char simi[ROW][COL],int row,int col);
void display_show(char show[ROW][COL],int row,int col);
void display_simi(char simi[ROW][COL],int row,int col);
void kuozhan(char simi[ROW][COL],char show[ROW][COL],int a,int b);
#endif 
---------------------------------game.c------------------------------------------------------
#include"game.h"
void init_show(char show[ROW][COL],int row,int col)//初始化打印数组
{
memset(show,'*',row*col*sizeof(show[0][0]));
}
void display_show(char show[ROW][COL],int row,int col)
{
int i=0;
int j=0;
for(i=1;i<row-1;i++)
{
for(j=1;j<col-1;j++)
{
printf(" %c ",show[i][j]);
}
printf("\n");
}
}
void init_simi(char simi[ROW][COL],int row,int col)//初始化布雷数组
{
int count=0;
memset(simi,'0',row*col*sizeof(simi[0][0]));
while(1)
{
row=rand()%10+1;
col=rand()%10+1;
simi[row][col]='1';
count++;
if(count==10)//埋了10个雷
{
break;
}
}
}


void display_simi(char simi[ROW][COL],int row,int col)
{
int i=0;
int j=0;
for(i=1;i<row-1;i++)
{
for(j=1;j<col-1;j++)
{
printf(" %c ",simi[i][j]);
}
printf("\n");
}
}
void kuozhan(char simi[ROW][COL],char show[ROW][COL],int a,int b)
{
int sum=0;//sum来计算雷的数
if((a<ROW)&&(b<COL)&&(a>0)&&(b>0))
{int i=0;
int j=0;
for(i=a-1;i<=a+1;i++)
{
for(j=b-1;j<=b+1;j++)
{
if(simi[i][j]=='1')
sum++;
}
}
/*if((simi[a][b]=='0'))
{
if(simi[a-1][b-1]=='1')
sum++;
if(simi[a-1][b]=='1')
sum++;
if(simi[a-1][b+1]=='1')
sum++;
if(simi[a][b-1]=='1')
sum++;
if(simi[a][b+1]=='1')
sum++;
if(simi[a+1][b-1]=='1')
sum++;
if(simi[a+1][b]=='1')
sum++;
if(simi[a+1][b+1]=='1')
sum++;*/
show[a][b]=(sum+'0');
}

if(show[a][b]=='0')
{
if(show[a-1][b-1]=='*')
kuozhan(simi,show,(a-1),(b-1));
if(show[a-1][b]=='*')
kuozhan(simi,show,(a-1),(b));
if(show[a-1][b+1]=='*')
kuozhan(simi,show,(a-1),(b+1));
if(show[a][b-1]=='*')
kuozhan(simi,show,(a),(b-1));
if(show[a][b+1]=='*')
kuozhan(simi,show,(a),(b+1));
if(show[a+1][b-1]=='*')
kuozhan(simi,show,(a+1),(b-1));
if(show[a+1][b]=='*')
kuozhan(simi,show,(a+1),(b));
if(show[a+1][b+1]=='*')
kuozhan(simi,show,(a+1),(b+1));
}

}
-------------------------------------------work.c---------------------------------------------
#include"game.h"
void menu()
{
printf("*******************************\n");
printf("******1.play       0.exit******\n");
printf("*******************************\n");
}


#include"game.h"
void game()
{
char show[ROW][COL]={0};//玩家看的
char simi[ROW][COL]={0};//埋雷的
int count=0;
srand( (unsigned)time( NULL ) );
init_show(show,ROW,COL);
display_show(show,ROW,COL);//打印玩家用的表
printf("---------------------------------\n");
init_simi(simi,ROW,COL);//埋雷
//display_simi(simi,ROW,COL);//打印雷阵
while(count<90)//循环,如果你输入了90次都没有踩雷说明你赢了
{

//判断坐标是否正确
int a=0;
int b=0;
printf("请输入坐标:");
scanf("%d %d",&a,&b);
if(((a<1)||(a>10))||((b<1)||(b>10)))
{
printf("坐标有误,请重新输入");
continue;
}
else//坐标正确后执行的所有步骤
{
//第一次不被炸死
if(count==0)
{
if(simi[a][b]=='1')//如果第一次踩雷
{
int x=0;
int y=0;
simi[a][b]='0';//把有雷的的地方重新设置
do{
x=rand()%10+1;//重新选一个埋雷的地方
y=rand()%10+1;
}while(!((x!=a)&&(y!=b))&&(simi[x][y]!='1'));//直到选中的新位置没雷而且不等于原位子停下
simi[x][y]='1';//埋新雷
}

}
count++;
if(simi[a][b]=='1')//检查是否是雷,是的话输出你输了,把埋雷的表打印,如果没有踩雷继续
{
printf("对不起,你踩雷了\n");
display_simi(simi,ROW,COL);
break;
}
if(simi[a][b]=='0')
{
kuozhan(simi,show,a,b);
display_show(show,ROW,COL);
}

}
if(count==89)//一共有100个格子,90个都不是雷,那么剩下的只有雷了,所以排雷成功
{
printf("恭喜你,排雷成功");
break;
}

}
}
int main()
{
int input=0;
menu();
printf("请选择:");
while(1)
{
scanf("%d",&input);
switch(input)
{
case 1:
printf("开始游戏\n");
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入\n");
    }
}
system("pause");
return 0;
}
原创粉丝点击