扫雷代码出问题了,求修改
程序代码:
#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编辑过]