C语言实现简单扫雷游戏
本文实例为大家分享了C语言实现简单扫雷游戏的具体代码,供大家参考,具体内容如下
步骤
1.首先打印游戏选择菜单
2.地图及初始化
1)、展示给玩家的地图(show_map)
2)、地雷的图(mine_map可知地雷的位置)
3.打印地图
4.用户输入坐标,并检查坐标的合理性
5.判断当前位置是否有地雷,没有则出现数字(表示周围格子中有几个地雷)
6.打印新的地图
7.重复3~6步骤,直到踩雷游戏结束,或胜利。
8重新继续游戏或退出!
代码
主函数及游戏选择菜单
#include#include #include #defineROW9 #defineCOL9 #defineCOUNT10//地雷个数 intmenu() { printf("*************************\n"); printf("******1.play******\n"); printf("******0.exit******\n"); printf("*************************\n"); printf("请选择:>"); intchoice=0; scanf("%d",&choice); returnchoice; } intmain() { intchoice=0; srand((unsignedint)time(NULL)); while(1) { choice=menu(); if(choice==1) { game(); } elseif(choice==0) { printf("goodbye!\n"); break; } else { printf("输入有误,请重新输入!\n"); } } system("pause"); return0; } 
~进入游戏
1.创建两个二维数组;2.对两个二维数组进行初始化;3.打印地图;4.让用户输入一组坐标;5.判定是否踩雷;6.判断游戏是否胜利;7.更新地图,把当前位置变成一个数字(数字为周围格子里地雷个数)
voidgame()
{
//1.创建两个二维数组
charshow_map[ROW][COL];
charmine_map[ROW][COL];
//2.对两个二维数组进行初始化
Init(show_map,mine_map);
intblank_count=0;
while(1)
{
PrintMap(mine_map);//为了方便调试,临时打印mine_map
printf("\n");
//3.打印地图
PrintMap(show_map);
//4.让用户输入一组坐标
printf("请输入坐标:>");
inti=0;
intj=0;
scanf("%d%d",&i,&j);
if(i<0||i>=ROW||j<0||j>=COL)
{
printf("输入有误,请重新输入!\n");
continue;
}
if(show_map[i][j]!='*')
{
//这个位置已经被翻开
printf("输入的位置已被翻开,请重新输入!\n");
continue;
}
//5.判定是否踩雷
if(mine_map[i][j]=='1')
{
//踩雷了,提示游戏结束
PrintMap(mine_map);
printf("游戏结束!\n");
break;
}
blank_count++;
//6.游戏是否胜利
if(blank_count==ROW*COL-COUNT)
{
printf("恭喜你,扫雷成功!\n");
break;
}
//7.更新地图,把当前位置变成一个数字
UpdateShowMa(show_map,mine_map,i,j);
}
}
初始化地图
voidInit(charshow_map[ROW][COL],charmine_map[ROW][COL])
{
//1.show_map全部初始化为*
for(inti=0;i0)
{
//生成随机坐标
inti=rand()%ROW;
intj=rand()%COL;
if(mine_map[i][j]=='1')
{
continue;
}
mine_map[i][j]='1';
--mine_count;
}
}
打印地图
voidPrintMap(charmap[ROW][COL])
{
//1.先打印第一行(坐标)
printf("|");
for(intj=0;j判断落子周围格子地雷的个数
voidUpdateShowMa(charshow_map[ROW][COL],charmine_map[ROW][COL],inti,intj)
{
//判定当前位置(i,j),周围8个格子有几个雷
intcount=0;
if(i-1>=0&&j-1>=0&&mine_map[i-1][j-1]=='1')
{
count++;
}
if(i-1>=0&&mine_map[i-1][j]=='1')
{
count++;
}
if(i-1>=0&&j+1
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
