扫雷代码出问题了,求修改
程序代码:
#include"stdio.h"
#include"stdlib.h"
#include"time.h"
int i,j,mi;
int x,y;
int mineNumber;
char showchar;
int flagn;
int flagrealnum=10;
int flagnum=10;
//定义数据
int mineXY(void);
int mine(int);
int numberMould(void);
int deSame(int);
int showMould(void);
int showFirst(void);
int OneOrZero(void);
int open(void);
int clean(void);
int flag(void);
int check(void);
int scanfMould(void);
int openone(void);
int openzero(void);
//定义函数
int mineX[11];
int mineY[11];
int number[12][12];
int nonmine[11];
char show[12][12];
int onezero[12][12];
int flagXY[12][12];
//定义数组
int mine(int mi)
{
mi=rand()%(100);
return mi;
}
//随机数生成
int deSame(mineNumber)
{
nonmine[i]=mine(mi);
for(j=i-1;j>=1;j--)
{
if(nonmine[i]==nonmine[j])
{
i--;
mineNumber=0;
break;
}
if(j==1)
{
mineNumber=nonmine[i];
}
}
return mineNumber;
}
//排除重复雷
int mineXY(void)
{
for (i=1;i<=10;i++)
{
mineX[i]=deSame(mineNumber);
mineY[i]=mineX[i]/10+1;
mineX[i]=mineX[i]%10+1;
}
}
//以上生成雷坐标
int numberMould(void)
{
for(y=1;y<=10;y++)
{
for(x=1;x<=10;x++)
{
number[x][y]=0;
}
}
for(i=1;i<=10;i++)
{
x=mineX[i];
y=mineY[i];
for(int a=-1;a<=1;a++)
{
for(int b=-1;b<=1;b++)
{
number[x+a][y+b]+=1;
}
}
}
for(i=1;i<=10;i++)
{
x=mineX[i];
y=mineY[i];
number[x][y]=9;
}
}
//数字模板数字设置
int showFirst(void)
{
for(y=1;y<=10;y++)
{
for(x=1;x<=10;x++)
{
show[x][y]='-';
printf("%c ",show[x][y]);
}
printf("\n");
}
}
//显示层初始化
int OneOrZero(void)
{
for(y=1;y<=10;y++)
{
for(x=1;x<=10;x++)
{
onezero[x][y]=1;
flagXY[x][y]=0;
}
}
for(i=1;i<=10;i++)
{
x=mineX[i];
y=mineY[i];
onezero[x][y]=0;
}
}
//翻开层初始化
int showMould(void)
{
printf("提示:\nx,y初始值为1,x为从上到下依次增加,y为从左到右依次增加\n坐标间用空格隔开\n");
printf("提示:\n在一个数字周围排除所有雷时,再次翻开这个数字为把这个数字周围未翻开的界面翻开\n\n");
printf("提示:还有%d个雷\n",flagnum);
scanfMould();
if(x<1||x>10||y<1||y>10||(flagn!=0&&flagn!=1))
{
clean();
}
if(flagn==0)
{
open();
}
if(flagn==1)
{
flag();
}
}
//显示层设置
int scanfMould(void)
{
printf("请输入指定坐标x,y\n");
scanf("%d%d",&x,&y);
printf("翻开此坐标输入0,标记此坐标输入1\n");
scanf("%d",&flagn);
}
//输入层函数
int open(void)
{
if(number[x][y]==9)
{
printf("失败了!");
exit(0);
}
if(onezero[x][y]==1)
{
openone();
clean();
}
if(onezero[x][y]==0)
{
openzero();
clean();
}
}
//全局检查0
int openone(void)
{
show[x][y]=number[x][y]+'0';
onezero[x][y]=0;
if(number[x][y]==0)
{
for(int a=-1;a<=1;a++)
{
for(int b=-1;b<=1;b++)
{
show[x+a][y+b]=number[x+a][y+b]+'0';
onezero[x+a][y+b]=0;
}
}
check();
}
}
//翻开未翻开
int openzero(void)
{
int n=0;
for(int a=-1;a<=1;a++)
{
for(int b=-1;b<=1;b++)
{
if(flagXY[x+a][y+b]==1)
{
n+=1;
}
}
}
if(number[x][y]==n)
{
for(int a=-1;a<=1;a++)
{
for(int b=-1;b<=1;b++)
{
show[x+a][y+b]=number[x+a][y+b]+'0';
if(flagXY[x+a][y+b]==1)
{
show[x+a][y+b]='*';
}
}
}
}
check();
}
//翻开已翻开
int check(void)
{
for(x=1;x<=10;x++)
{
for(y=1;y<=10;y++)
{
if(number[x][y]==0&&onezero[x][y]==0)
{
for(int a=-1;a<=1;a++)
{
for(int b=-1;b<=1;b++)
{
if(onezero[x+a][y+b]==1)
{
openone();
}
}
}
}
}
}
clean();
}
//检查0
int clean(void)
{
printf("\033[2J");
printf("\033[0;0H");
for(x=1;x<=10;x++)
{
for(y=1;y<=10;y++)
{
printf("%c ",show[x][y]);
}
printf("\n");
}
if(flagrealnum==0)
{
printf("胜利了!");
exit(0);
}
showMould();
}
//清空显示
int flag(void)
{
if(onezero[x][y]==0)
{
show[x][y]='*';
flagXY[x][y]=1;
flagnum-=1;
if(number[x][y]==9)
{
flagrealnum-=1;
}
}
if(onezero[x][y]==1)
{
show[x][y]='-';
flagXY[x][y]=0;
flagnum+=1;
if(number[x][y]==9)
{
flagrealnum+=1;
}
}
clean();
}
//雷区提示设置
int main(void)
{
srand((unsigned)time(NULL));
mineXY();
numberMould();
OneOrZero();
showFirst();
showMould();
return 0;
}
找了很久也没找到代码在哪……
[此贴子已经被作者于2019-3-13 20:42编辑过]






