C语言如何实现扫雷游戏
作者
这篇文章主要介绍了C语言如何实现扫雷游戏,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
本文将介绍如何用C语言多文件编程实现扫雷该示例扫雷程序可实现以下几个功能:
自定义雷数
踩雷后会将所有雷显示出来
地图大小易修改
Mine_clearance.h
#pragmaonce #define_CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<time.h> #defineROW11 #defineCOL11 #define踩雷0 #define玩家胜利1 intg_number_mine=(ROW-1)*(COL-1);//雷的数量上限 charmap[ROW][COL];//玩家看到的地图 charmine_map[ROW+2][COL+2];//雷阵 voidInit_map();//初始化玩家看到的地图 voidInit_mine_map(intinput_count);//初始化雷阵 voidPrint_map();//打印地图 voidPrint_mine_map();//如果踩雷需要把雷阵打印出来 voidPlayer_move(introw,intcol);//提示玩家输入坐标开始游戏1.合法性校验(是否越界)2.是否重复输入,(已经输入过的) intJudge_mine_end(introw,intcol);//判断是否踩雷 charCount_number_mine(introw,intcol);//统计周围八个方块雷的个数 voidPrint_mine_number(introw,intcol,intn);//将周围八个方块雷的数量显示在当前方块上 intJudge_win(intinput_count);//判断是否获胜
Mine_clearance.c
#include"Mine_clearance.h" //初始化玩家看到的地图 voidInit_map() { for(introw=0;row<=ROW;++row) { for(intcol=0;col<=COL;++col) { map[row][col]=''; } } } //初始化雷阵 voidInit_mine_map(intinput_count) { for(introw=0;row<ROW;++row) { for(intcol=0;col<COL;++col) { mine_map[row][col]=''; } } srand((unsigned)time(NULL)); for(inti=0;i<input_count;++i) { introw=rand()%(ROW-1)+1; intcol=rand()%(COL-1)+1; while(1) { if(mine_map[row][col]=='x'&&row==(ROW-1)&&col==(COL-1)) { row=1; col=1; }elseif(mine_map[row][col]=='x'&&(col==COL-1)) { row+=1; col=1; }elseif(mine_map[row][col]=='x'&&(col<COL-1)) { col++; }else { mine_map[row][col]='x'; break; } } } } //打印地图 voidPrint_map() { for(inti=1;i<ROW;++i) { printf("%d",i); } printf("\n|"); for(intj=1;j<ROW;++j) { printf("-----|"); } printf("\n"); inti=1; for(introw=1;row<ROW;++row) { for(intcol=1;col<COL;++col) { printf("|%c",map[row][col]); } printf("|%d\n",i); for(intb=1;b<ROW;++b) { printf("|-----"); } printf("|"); printf("\n"); i=i+1; } } //如果踩雷需要把雷阵打印出来 voidPrint_mine_map() { for(inti=1;i<ROW;++i) { printf("%d",i); } printf("\n|"); for(intj=1;j<ROW;++j) { printf("-----|"); } printf("\n"); inti=1; for(introw=1;row<ROW;++row) { for(intcol=1;col<COL;++col) { printf("|%c",mine_map[row][col]); } printf("|%d\n",i); for(intb=1;b<ROW;++b) { printf("|-----"); } printf("|"); printf("\n"); i=i+1; } } //提示玩家输入坐标开始游戏 //1.合法性校验(是否越界 //2.是否重复输入,(已经输入过的) voidPlayer_move(introw,intcol) { if(row<1||row>=ROW||col<1||col>=COL) { printf("非法输入!请重新输入\n"); }elseif(map[row][col]=='o') { printf("重复输入无效,请重新输入!\n"); }else { map[row][col]='o'; } } //判断是否踩雷 intJudge_mine_end(introw,intcol) { if(map[row][col]=='o'&&mine_map[row][col]=='x') { return踩雷; } return1; } //统计周围八个方块雷的个数 charCount_number_mine(introw,intcol) { intn=0; for(inti=-1;i<2;++i) { for(intj=-1;j<2;++j) { if(mine_map[row+i][col+j]=='x') { n+=1; } } } returnn; } //将周围八个方块雷的数量显示在当前方块上 voidPrint_mine_number(introw,intcol,intn) { charnum_mine[]={'0','1','2','3','4','5','6','7','8'}; switch(n){ case0: map[row][col]=num_mine[0]; break; case1: map[row][col]=num_mine[1]; break; case2: map[row][col]=num_mine[2]; break; case3: map[row][col]=num_mine[3]; break; case4: map[row][col]=num_mine[4]; break; case5: map[row][col]=num_mine[5]; break; case6: map[row][col]=num_mine[6]; break; case7: map[row][col]=num_mine[7]; break; case8: map[row][col]=num_mine[8]; break; default: printf("雷数非法\n"); break; } } intJudge_win(intinput_count) { intnum_mine=0; for(introw=1;row<ROW;++row) { for(intcol=1;col<COL;++col) { if(map[row][col]!='') { num_mine+=1; } } } if(num_mine==(ROW-1)*(COL-1)-input_count) { return玩家胜利; } return2; }
main.c
#include"Mine_clearance.h" intmain() { while(1) { intinput_count=0; intcount_mine=0; introw=0; intcol=0; printf("自定义雷的个数:\n"); scanf("%d",&input_count); if(input_count<1||input_count>=g_number_mine) { printf("非法输入,请重新输入!\n"); }else { Init_mine_map(input_count); Init_map(); Print_map(); while(1) { printf("请输入坐标:(中间用空格隔开)\n"); scanf("%d%d",&row,&col); Player_move(row,col); if(Judge_mine_end(row,col)==踩雷) { printf("踩雷了,游戏结束\n"); Print_mine_map(); break; }else { count_mine=Count_number_mine(row,col); Print_mine_number(row,col,count_mine); Print_map(); if(Judge_win(input_count)==玩家胜利) { printf("你赢了!\n"); break; } } } } } system("pause"); return0; }
显示效果:
感谢你能够认真阅读完这篇文章,希望小编分享的“C语言如何实现扫雷游戏”这篇文章对大家有帮助,同时也希望大家多多支持恰卡编程网,关注恰卡编程网行业资讯频道,更多相关知识等着你来学习!
目录
推荐阅读
0 条评论
本站已关闭游客评论,请登录或者注册后再评论吧~