C语言 扫雷程序的实现
C语言扫雷程序的实现
这个游戏可以实现根据选择坐标后所显示无雷区范围的不同分为简单,普通和困难
游戏程序中,实现了游戏的计时(分钟)功能,实现了扫雷游戏的最基础功能。
定义了一个9*9的棋盘,玩家只要根据提示选择游戏,和难度;
根据提示输入合法的坐标,如输入不合法则会进行提示;
扫雷结束则会提示;如触雷则游戏自动结束;
整个游戏设计中主要的函数为:
1、初始化地雷棋盘和显示棋盘
2、棋盘打印函数
3、扫雷函数的实现
4、游戏主函数
大家可以在宏定义中改变棋盘大小,雷的个数,以及显示的无雷区范围。
废话不说直接上代码:(未优化,请多包涵)
#ifndef__MINE_H__ #define__MINE_H__ #defineLINES11//棋盘的行 #defineROWS11//棋盘的列 #definemine_MAX10//雷的数目 #defineEAXY3//简单显示的范围 #defineCOMMON2//普通显示的范围 #defineDIFFICULT1//困难显示的范围 enumop { EXIT, PLAY }; voidgame(charmine[LINES][ROWS],chartext[LINES][ROWS],intlines,introws);//游戏基本实现函数 voidinit_mine(charmine[LINES][ROWS],chartext[LINES][ROWS],intlines,introws);//初始化棋盘函数 voidplay_EAXY_game(charmine[LINES][ROWS],chartext[LINES][ROWS]);//简单游戏函数 voidplay_COMMON_game(charmine[LINES][ROWS],chartext[LINES][ROWS]);//普通游戏函数 voidplay_DIFFICULT_game(charmine[LINES][ROWS],chartext[LINES][ROWS]);//困难游戏函数 voidmine_EAXY_sweep(charmine[LINES][ROWS],chartext[LINES][ROWS]);//简单扫雷实现 voidmine_COMMON_sweep(charmine[LINES][ROWS],chartext[LINES][ROWS]);//普通扫雷实现 voidmine_DIFFICULT_sweep(charmine[LINES][ROWS],chartext[LINES][ROWS]);//困难扫雷实现 voidprint(chartab[LINES][ROWS]);//打印棋盘 #endif
#include#include"mine.h" #include #include voidinit_mine(charmine[LINES][ROWS],chartext[LINES][ROWS],intlines,introws)//初始化显示棋盘和雷盘 { inti; intj; inta; intb; intcount=0; for(i=1;i (LINES-2)||a<0||b<0||b>(ROWS-2)||text[a][b]!='*') { printf("输入不合法!\n"); gotoflag; } else if(mine[a][b]=='0')//判断是否触雷 { printf("您踩雷了!\n"); break; } else { for(i=(a-EAXY);i<=(a+EAXY);i++) { for(j=(b-EAXY);j<=(b+EAXY);j++) { if(mine[i][j]=='1') { intx=0;//周围雷的数量 if(mine[i-1][j-1]=='0') { x++; } if(mine[i-1][j]=='0') { x++; } if(mine[i-1][j+1]=='0') { x++; } if(mine[i][j-1]=='0') { x++; } if(mine[i][j+1]=='0') { x++; } if(mine[i+1][j-1]=='0') { x++; } if(mine[i+1][j]=='0') { x++; } if(mine[i+1][j+1]=='0') { x++; } text[i][j]=(x+'0'); } } } } for(x=1;x<=(LINES-2);x++) { for(y=1;y<=(ROWS-2);y++) { if(text[x][y]=='*') count++; } } }while(count>mine_MAX); if(count==mine_MAX) { printf("恭喜你扫雷成功!\n"); } } voidmine_COMMON_sweep(charmine[LINES][ROWS],chartext[LINES][ROWS])//普通整个游戏进程 { inta; intb; intcount; do//是否将雷全部扫完 { inti; intj; intx; inty; count=0;//雷的个数 print(text); print(mine); flag:printf("请输入坐标=》"); scanf("%d%d",&a,&b); if(a>(LINES-2)||a<0||b<0||b>(ROWS-2)||text[a][b]!='*') { printf("输入不合法!\n"); gotoflag; } else if(mine[a][b]=='0')//判断是否触雷 { printf("您踩雷了!\n"); break; } else { for(i=(a-COMMON);i<=(a+COMMON);i++) { for(j=(b-COMMON);j<=(b+COMMON);j++) { if(mine[i][j]=='1') { intx=0;//周围雷的数量 if(mine[i-1][j-1]=='0') { x++; } if(mine[i-1][j]=='0') { x++; } if(mine[i-1][j+1]=='0') { x++; } if(mine[i][j-1]=='0') { x++; } if(mine[i][j+1]=='0') { x++; } if(mine[i+1][j-1]=='0') { x++; } if(mine[i+1][j]=='0') { x++; } if(mine[i+1][j+1]=='0') { x++; } text[i][j]=(x+'0'); } } } print(text); } for(x=1;x<=(LINES-2);x++) { for(y=1;y<=(ROWS-2);y++) { if(text[x][y]=='*') count++; } } }while(count>mine_MAX); if(count==mine_MAX) { printf("恭喜你扫雷成功!\n"); } } voidmine_DIFFICULT_sweep(charmine[LINES][ROWS],chartext[LINES][ROWS])//困难整个游戏进程 { inta; intb; intcount;//雷的个数 do//是否将雷全部扫完 { inti; intj; intx; inty; count=0; print(text); print(mine); flag:printf("请输入坐标=》"); scanf("%d%d",&a,&b); if(a>(LINES-2)||a<0||b<0||b>(ROWS-2)||text[a][b]!='*') { printf("输入不合法!\n"); gotoflag; } else if(mine[a][b]=='0')//判断是否触雷 { printf("您踩雷了!\n"); break; } else { for(i=(a-DIFFICULT);i<=(a+DIFFICULT);i++) { for(j=(b-DIFFICULT);j<=(b+DIFFICULT);j++) { if(mine[i][j]=='1') { intx=0;//周围雷的数量 if(mine[i-1][j-1]=='0') { x++; } if(mine[i-1][j]=='0') { x++; } if(mine[i-1][j+1]=='0') { x++; } if(mine[i][j-1]=='0') { x++; } if(mine[i][j+1]=='0') { x++; } if(mine[i+1][j-1]=='0') { x++; } if(mine[i+1][j]=='0') { x++; } if(mine[i+1][j+1]=='0') { x++; } text[i][j]=(x+'0'); } } } print(text); } for(x=1;x<=(LINES-2);x++) { for(y=1;y<=(ROWS-2);y++) { if(text[x][y]=='*') count++; } } }while(count>mine_MAX); if(count==mine_MAX) { printf("恭喜你扫雷成功!\n"); } }
#include#include"mine.h" #include voidemun() { printf("***********************\n"); printf("*******1.play******\n"); printf("********0.exit******\n"); printf("***********************\n"); } voidemun_dift()//选择难度菜单 { printf("*********************\n"); printf("******1.简单*******\n"); printf("******2.普通*******\n"); printf("******3.困难*******\n"); printf("*********************\n"); } voidplay_EAXY_game(charmine[LINES][ROWS],chartext[LINES][ROWS])//玩简单游戏 { time_tt_start,t_end; printf("计时开始!!\n"); t_start=time(NULL);//开始计时 mine_EAXY_sweep(mine,text); t_end=time(NULL);//计时结束 printf("您所用时间为:%.0f\n",difftime(t_end,t_start)); } voidplay_COMMON_game(charmine[LINES][ROWS],chartext[LINES][ROWS])//玩普通游戏 { time_tt_start,t_end; printf("计时开始!!\n"); t_start=time(NULL);//开始计时 mine_COMMON_sweep(mine,text); t_end=time(NULL);//计时结束 printf("您所用时间为:%.0f\n",difftime(t_end,t_start)); } voidplay_DIFFICULT_game(charmine[LINES][ROWS],chartext[LINES][ROWS])//玩困难游戏 { time_tt_start,t_end; printf("计时开始!!\n"); t_start=time(NULL);//开始计时 mine_DIFFICULT_sweep(mine,text); t_end=time(NULL);//计时结束 printf("您所用时间为:%.0f\n",difftime(t_end,t_start)); } voidgame() { intinput=0; intflout=0; charmine[LINES][ROWS]={0};//定义雷盘 chartext[LINES][ROWS]={0};//定义显示盘 init_mine(mine,text,LINES,ROWS);//初始化雷盘 do { emun(); init_mine(mine,text,LINES,ROWS);//初始化雷盘 printf("请选择=》"); scanf("%d",&input); switch(input) { casePLAY: { emun_dift(); printf("请选择=》"); scanf("%d",&flout); switch(flout) { case1: play_EAXY_game(mine,text); break; case2: play_COMMON_game(mine,text); break; case3: play_DIFFICULT_game(mine,text); break; } } break; caseEXIT: break; } }while(input); } intmain() { game(); return0; }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!