1.扫雷程序的编写需要有清晰的思路,所以我们先要清楚扫雷的实现有几个功能模块让我们编写,再用主函数将功能结合在一起:
//菜单函数//初始化数组函数//布雷函数//统计周围雷的个数//打印玩家棋盘//打印设计者棋盘//扫雷函数//避免第一次被雷炸死的函数//展开函数//判断玩家棋盘剩余未知区域的个数2.根据这几点可以写出如下的头文件:
#ifndef__GAME_H__#define__GAME__H__#includestdio.h#includestdlib.h#includestring.h#definerow12#definecol12#defineCOUNT10//棋盘中雷的总数externcharshow_mine[row][col];//展示数组externcharreal_mine[row][col];//布雷数组voidmuen();//菜单函数voidinit_mine();//初始化数组函数voidset_mine();//布雷函数intcount_mine();//统计周围雷的个数voidprint_player();//打印玩家棋盘voidprint_mine();//打印设计者棋盘intsweep_mine();//扫雷函数voidsafe_mine();//避免第一次被雷炸死的函数voidopen_mine(intx,inty);//展开函数intcount_show_mine();///判断玩家棋盘剩余未知区域的个数#endif//__GAME_H__3.*接下来要做的就是将主函数的大体框架程序写出来,在依次向各个函数块里面充填程序,以下为主函数:*
#include"lei.h"voidgame(){intret=0;init_mine();//初始化玩家棋盘和设计者棋盘set_mine();//给设计者棋盘布雷print_mine();//打印设计者棋盘(可不打印)printf("");print_player();//打印玩家棋盘safe_mine();//避免第一次被炸死if(count_show_mine()==COUNT)//一步就赢的情况{print_mine();printf("玩家赢!");return;}print_player();////打印玩家棋盘while(1)//循环扫雷{intret=sweep_mine();//扫雷,踩到雷返回1,没有踩到雷返回0if(count_show_mine()==COUNT)//若玩家棋盘的'*'个数为雷数时,扫雷完成,游戏胜利{print_mine();//打印设计者棋盘printf("玩家赢!");break;}if(ret)//判断是否踩到雷{printf("被雷炸死");print_mine();//打印设计者雷阵查看雷的分布break;}print_player();//打印玩家棋盘}}intmain(){srand((unsignedint)time(NULL));//产生随机数生成器intinput=0;muen();//菜单do{scanf_s("%d",&input);switch(input){case1:game();break;case0:exit(1);//退出游戏break;default:printf("输入错误,重新输入");break;}muen();printf("contiue?");}while(1);//循环玩游戏system("pause");return0;}4.接下来再依次实现主函数里面的各个函数块:
#include"lei.h"charshow_mine[row][col]={0};charreal_mine[row][col]={0};voidmuen(){printf("*******************************");printf("*****1.play0.exit*******");printf("*******************************");}voidinit_mine()//初始化两个棋盘{inti=0;intj=0;for(inti=0;irow;i++){for(j=0;jcol;j++){show_mine[i][j]='*';real_mine[i][j]='0';}}}voidprint_player()//打印玩家棋盘{inti=0;intj=0;printf("0");for(i=1;irow-1;i++){printf("%d",i);//打印横标(0--10)}printf("");for(i=1;irow-2;i++)//打印竖标(1--10){printf("%d",i);for(j=1;jcol-1;j++){printf("%c",show_mine[i][j]);//玩家棋盘数组}printf("");}printf("10");//开始打印最后一行for(i=1;irow-1;i++){printf("%c",show_mine[10][i]);}printf("");}voidprint_mine()//打印设计者棋盘{inti=0;intj=0;printf("0");for(i=1;irow-1;i++){printf("%d",i);//打印横标(0--10)}printf("");for(i=1;irow-2;i++)//打印竖标(1--10){printf("%d",i);for(j=1;jcol-1;j++){printf("%c",real_mine[i][j]);}printf("");}printf("10");//开始打印最后一行for(i=1;irow-1;i++){printf("%c",real_mine[10][i]);}printf("");}voidset_mine()//给设计者棋盘布雷{intx=0;inty=0;intcount=COUNT;//雷总数while(count)//雷布完后跳出循环{intx=rand()%10+1;//产生1到10的随机数,在数组下标为1到10的范围内布雷inty=rand()%10+1;//产生1到10的随机数,在数组下标为1到10的范围内布雷if(real_mine[x][y]=='0')//找不是雷的地方布雷{real_mine[x][y]='1';count--;}}}intcount_mine(intx,inty)//检测周围8个区域雷的个数{intcount=0;if(real_mine[x-1][y-1]=='1')count++;if(real_mine[x-1][y]=='1')count++;if(real_mine[x-1][y+1]=='1')count++;if(real_mine[x][y-1]=='1')count++;if(real_mine[x][y+1]=='1')count++;if(real_mine[x+1][y-1]=='1')count++;if(real_mine[x+1][y]=='1')count++;if(real_mine[x+1][y+1]=='1')count++;returncount;}voidsafe_mine()//避免第一次炸死{intx=0;inty=0;charch=0;intcount=0;intret=1;printf("输入坐标扫雷");while(1){scanf_s("%d%d",&x,&y);//只能输入1到10,输入错误重新输入if((x=1&&x=10)&&(y=1&&y=10))//判断输入坐标是否有误{if(real_mine[x][y]=='1')//第一次踩到雷后补救{real_mine[x][y]='0';charch=count_mine(x,y);show_mine[x][y]=ch+'0';//数字对应的ASCII值和数字字符对应的ASCII值相差48,即'0'的ASCII值open_mine(x,y);while(ret)//在其余有空的地方设置一个雷{intx=rand()%10+1;//产生1到10的随机数,在数组下标为1到10的范围内布雷inty=rand()%10+1;//产生1到10的随机数,在数组下标为1到10的范围内布雷if(real_mine[x][y]=='0')//找不是雷的地方布雷{real_mine[x][y]='1';ret--;break;}}break;//跳出此函数}if(real_mine[x][y]=='0'){charch=count_mine(x,y);show_mine[x][y]=ch+'0';//数字对应的ASCII值和数字字符对应的ASCII值相差48,即'0'的ASCII值open_mine(x,y);break;}}else//坐标错误{printf("输入错误重新输入");}}}intsweep_mine()//扫雷函数,踩到雷返回1,没有踩到雷返回0{intx=0;inty=0;intcount=0;printf("输入坐标扫雷");scanf_s("%d%d",&x,&y);//只能输入1到10if((x=1&&x=10)&&(y=1&&y=10))//判断输入坐标是否有误,输入错误重新输入{if(real_mine[x][y]=='0')//没踩到雷{charch=count_mine(x,y);show_mine[x][y]=ch+'0';//数字对应的ASCII值和数字字符对应的ASCII值相差48,即'0'的ASCII值open_mine(x,y);if(count_show_mine()==COUNT)//判断剩余未知区域的个数,个数为雷数时玩家赢{print_mine();printf("玩家赢!");return0;}}elseif(real_mine[x][y]=='1')//踩到雷{return1;}}else{printf("输入错误重新输入");}return0;//没踩到雷}voidopen_mine(intx,inty)//坐标周围展开函数{if(real_mine[x-1][y-1]=='0'){show_mine[x-1][y-1]=count_mine(x-1,y-1)+'0';//显示该坐标周围雷数}if(real_mine[x-1][y]=='0'){show_mine[x-1][y]=count_mine(x-1,y)+'0';//显示该坐标周围雷数}if(real_mine[x-1][y+1]=='0'){show_mine[x-1][y+1]=count_mine(x-1,y+1)+'0';//显示该坐标周围雷数}if(real_mine[x][y-1]=='0'){show_mine[x][y-1]=count_mine(x,y-1)+'0';//显示该坐标周围雷数}if(real_mine[x][y+1]=='0'){show_mine[x][y+1]=count_mine(x,y+1)+'0';//显示该坐标周围雷数}if(real_mine[x+1][y-1]=='0'){show_mine[x+1][y-1]=count_mine(x+1,y-1)+'0';//显示该坐标周围雷数}if(real_mine[x+1][y]=='0'){show_mine[x+1][y]=count_mine(x+1,y)+'0';//显示该坐标周围雷数}if(real_mine[x+1][y+1]=='0'){show_mine[x+1][y+1]=count_mine(x+1,y+1)+'0';//显示该坐标周围雷数}}intcount_show_mine()//判断剩余未知区域的个数,个数为雷数时玩家赢{intcount=0;inti=0;intj=0;for(i=1;i=row-2;i++){for(j=1;j=col-2;j++){if(show_mine[i][j]=='*'){count++;}}}returncount;}
扫雷群小程序-用C语言实现扫雷小程序-微信群小程序
浏览量:1810
时间:
来源:邢小宇
版权声明
即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

最新资讯
-
抖音再现本地生活服务,咫尺同城圈商业变现新通道
短视频成为本地生活探店网红营销变现引流的新阵地,每一位网红都渴望在短视频内“一夜爆红”。即速应用团队对多商家小程序进行升级,打造了咫尺同城圈:“同城探店营销助手”,不仅完善商家营销技巧,还助力探店网红玩转本地生活服务。 -
抖音再现本地生活服务,咫尺同城圈商业变现新通道
短视频成为本地生活探店网红营销变现引流的新阵地,每一位网红都渴望在短视频内“一夜爆红”。即速应用团队对多商家小程序进行升级,打造了咫尺同城圈:“同城探店营销助手”,不仅完善商家营销技巧,还助力探店网红玩转本地生活服务。 -
阿坝小程序代理
阿坝藏族羌族小程序代理公司有哪些?阿坝藏族羌族小程序代理平台哪个好?阿坝藏族羌族小程序代理商怎么收费,代理政策如何?下面就让即速应用产品经理jisuapp.cn来告诉你吧!