#define_CRT_SECURE_NO_WARNINGS#include"game.h"intcpt_TNT(void* X_Y,int r)//计算某格周围雷的个数{int count1 =0;for(int i =-1;i <=1;i++){for(int j =-1;j <=1;j++){if(*((char*)X_Y + i * r + j)=='1'){
count1++;}}}return count1;}voidinitBoard(void* board,int r,int c,char ch)//棋盘初始化{for(int i =0;i < r ;i++){for(int j =0;j < c;j++){*((char*)board + i * r + j)= ch;}}}voiddisBoard(void* board,int r,int c)//棋盘打印{printf("----扫雷----\n");for(int k =0;k < r-1;k++){printf("%d ", k);}printf("\n");for(int i =1;i < r -1;i++){printf("%d ", i);for(int j =1;j < c -1;j++){printf("%c ",*((char*)board + i * r + j));}printf("\n");}}voidset_TNT(void* board,int r,int c)//布置雷{int count =0;while(count< r -2){int x =rand()%(r -2)+1;int y =rand()%(c -2)+1;if(*((char*)board + x * r + y)=='0'){*((char*)board + x * r + y)='1';
count++;}}}voidfind_TNT(void* mine,void* show,int r,int c)//排雷{int flag =0;do{printf("请输入要排查的雷的坐标\n");int x =0;int y =0;scanf("%d%*c%d",&x,&y);if(x >0&& x < r +1&& y>0&& y < c +1){if(*((char*)mine + x * r + y)=='1'){printf("可惜,你踩雷了!\n");disBoard(mine, r, c);printf("\n");printf("\n");break;}else{//*((char*)show + x * (r+2) + y) = cpt_TNT(((char*)show + x * (r+2) + y),r)+'0';//计算周围雷的个数*((char*)show + x * r + y)=cpt_TNT(((char*)mine + x * r + y), r)+'0';//计算周围雷的个数system("cls");disBoard(show, r, c);
flag++;}}else{printf("输入有误,请重新输入!\n");}//disBoard(mine, r, c);}while(flag<((r-2)*(c-2)- r+2));if(flag >=(r-2)*(c-2)- r+2){printf("恭喜你,排雷成功!\n");printf("\n");printf("\n");printf("\n");}}