首页 C/C++
扫雷
发布时间:2019年12月02日 评论数:抢沙发 阅读数:495
大晚上不好好写论文写了个扫雷 。。。。代码如下,每次输入为三个数空格隔开。其中前两个数表示坐标。最后一个数如果是1表示挖这个地方。如果是2表示标记这个地方是雷。明天要加班写论文了。。。。
//1.确定两个棋盘,1系统可见随机雷,2人可见当前已排勒 //2.随机雷 //3.输入分为 定雷 扫雷 //4.扫雷时要判断是否为雷点,如果不是遍历领域是否存在雷,返回雷的个数。 //5.扫雷如果雷不存在,需要进行大片领域开放 //6.雷标记为* 定雷标记为$ 扫雷成功显示# //#include<windows.h> #include <stdio.h> #include <stdlib.h> #define N 9 char layout1[N][N];//棋盘1 char layout2[N][N];//棋盘2 void init(){ int sum = 0; int i,j; //初始化棋盘 for(i=0;i<N;i++){ for(j=0;j<N;j++){ layout1[i][j] = ' ';//先全部标记为空 layout2[i][j] = ' '; } } //随机化10个雷 while(sum < N){ i = rand()%N;//生成0~9 j = rand()%N; if(layout1[i][j]!='*'){ //防止随机生成的这个地方已经存在雷 layout1[i][j] = '*'; //标记为雷 sum += 1; //雷的数目+1 } } } //显示 void menu(){ //system('clr'); printf("-----------------欢迎来到扫雷-----------------\n"); int i,j; for(i=0;i<N+1;i++){ for(j=0;j<N+1;j++){ if(i==0||j==0){ printf("%d ",i==0?j:i); }else{ if(layout2[i-1][j-1]==' '){ printf(" "); }else{ printf("%c ",layout2[i-1][j-1]); } } } printf("\n"); } printf("请输入坐标如3,3扫雷请输入1,定雷请输入2\n"); } //判断领域 void del(int x,int y){ int i,j; int sum = 0; for(i=-1;i<=1;i++){ for(j=-1;j<=1;j++){ if(x+i>=0&&x+i<N&&y+j>=0&&y+j<N&&(i!=0||j!=0)){//防止数组越界 if(layout1[x+i][y+j]=='*'){ sum += 1; //统计领域内雷的个数 } /*else if(layout2[x+i][y+j]!='$'){ layout2[x+i][y+j] = '#';//不是雷标记为非雷 }*/ } } } //判断领域有雷不,没有则迭代领域 if(sum==0){//领域无雷 layout1[x][y] = '#'; //在棋盘1上标记他为已遍历 layout2[x][y] = '#'; //棋盘2上标记为白班 for(i=-1;i<=1;i++){ for(j=-1;j<=1;j++){ if(x+i>=0&&x+i<N&&y+j>=0&&y+j<N&&layout1[x+i][y+j]!='#'&&layout2[x+i][y+j]!='$'&&(i!=0||j!=0)){//防止数组越界 最后防止反复回掉导致死循环 del(x+i,y+j); } } } }else{//领域有雷 layout2[x][y] = sum+48; } } //输入 bool input_kill(){ int i,j,n; scanf("%d %d %d",&i,&j,&n); i = i-1; j = j-1; if(i<0||j<0||i>=N||j>=N||(n!=2&&n!=1)){ printf("输入有误,请重新输入"); return true; } if(n==2){ layout2[i][j] = '$'; return true; }else{//扫雷 if(layout1[i][j]=='*'){ layout2[i][j] = '*'; printf("游戏结束\n"); return false; }else{ //领域遍历 del(i,j); return true; } } } //判断游戏结束 bool end(){ int i,j; int sum = 0; for(i=0;i<N;i++){ for(j=0;j<N;j++){ if(layout2[i][j]==' ') return true; else if(layout2[i][j]=='$') sum += 1; } } if(sum == N){ printf("游戏结束,恭喜胜利\n"); return false; }else{ return true; } } int main(){ init(); bool f = true; while(f){ menu(); f = input_kill(); f = end(); //因为mac电脑没有<windows.h>文件无法调用system('clr');刷新输出,所以这里就不刷新了. windows下需要刷新,把那两个注释消掉就行。 } //结束界面 int i,j; for(i=0;i<N+1;i++){ for(j=0;j<N+1;j++){ if(i==0||j==0){ printf("%d ",i==0?j:i); }else{ if(layout1[i-1][j-1]!='*'){ printf(" "); }else{ printf("%c ",layout1[i-1][j-1]); } } } printf("\n"); } return 0; }
相关文章