1:这次我们会将前面的代码进行整合,和整理,最终使我们的程序可以有效的运行起来。
【1】初始化函数。
void GameInit()
{
//随机数种子
srand((unsigned int)time(NULL));
//数组初始化
for(int i = 0;i < ROW+2;i++)
{
for(int j = 0;j < COL+2;j++)
{
map[i][j] = 0;
}
}
//布雷 -1表示雷
int n = 0;
while(n<NUM)
{
int r = rand() % ROW + 1;//1--ROW
int c = rand() % COL + 1;//1--C0L
if(map[r][c] == 0)
{
map[r][c] = -1;
n++;
}
}
//跟据类的分布 填充其他部位雷的数据
for(int i = 1;i <= ROW;i++)
{
for(int j = 1;j <= COL;j++)
{// 遍历二维数组
if(map[i][j] != -1)//找到不为雷的元素
{
//遍历九宫格
for(int m=i-1;m<=i+1;m++)
{
for(int n=j-1;n<=j+1;n++)
{
if(map[m][n]==-1)
{
map[i][j]++;
}
}
}
}
}
}
}
【2】加密。
void GameDraw()
{
//加密
/*
雷-1-----------19
空0------------20
1---------------21
2---------------22
3---------------23
4---------------24
5---------------25
6---------------26
大于等于19的
*/
for(int i = 1;i <= ROW;i++)
{
for(int j = 1;j <= COL;j++)
{
map[i][j]+=20;
}
}
PrintPlay();
}
【3】打印扫雷的界面。
void PrintPlay()
{
//打印
int i,j;
for(i = 1;i <= ROW;i++)
{
for(j = 1;j <= COL;j++)
{
if(map[i][j]>=19)
{
printf(" *");
}
else
{
printf("%2d",map[i][j]);
}
}
printf("\n");
}
}
【4】用户玩输入坐标。
//用户玩输入坐标。
void GameUser()
{
int z;
while(z)
{
int x,y;
printf("请输入坐标:\n");
scanf("%d %d",&x,&y);
if(x<=10&&x>=1&&y<=10&&y>=1)
{
//解密
/*
雷-1-----------19
空0------------20
1---------------21
2---------------22
3---------------23
4---------------24
5---------------25
6---------------26
1 1 1
1 1 1
1 1 1
大于等于19的
*/
if(map[x][y]<19)
{
printf("已翻开。\n");
}
else
{
switch(map[x][y])
{
case 19:
// 游戏结束
map[x][y]-=20;
PrintPlay();//打印
printf("你踩到雷了19!\n");
z=0;
//跳转到结束
break;
case 20:
//空
//解密
//map[x][y]-=20;
//空周围为空的叶打印出来
point(x,y);
PrintPlay();//打印
break;
case 21:
case 22:
case 23:
case 24:
case 25:
case 26:
case 27:
case 28:
//周围有雷
//解密输出就可以
map[x][y]-=20;//解密
PrintPlay();//打印
break;
default :
break;
}
}
}
else
{
printf("您输入错误!");
}
}
}
【5】:打印周围为空的地方
//打印周周围为空的地方void point(int x,int y)
{
//遍历九宫格
for(int m=x-1;m<=x+1;m++)
{
for(int n=y-1;n<=y+1;n++)
{
if(map[m][n]==20)
{
map[m][n]-=20;
point(m,n);
}
}
}
}
【6】主函数。
void main()
{
printf("欢迎来到Q的编程世界:\n");
//初始化函数
GameInit();
//绘制函数 打印二维数组中所有的元素
GameDraw();
//用户玩输入坐标
GameUser();
system("pause");
}
【7】:最后把我们的代码,整合一下就得到如下的,C语言简单的键盘玩扫雷小游戏的完整代码:
/*
Q的编程世界
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define ROW 10//行
#define COL 10//列
#define NUM 10//雷的个数
int map[ROW+2][COL+2];
//初始化函数
void GameInit()
{
//随机数种子
srand((unsigned int)time(NULL));
//数组初始化
for(int i = 0;i < ROW+2;i++)
{
for(int j = 0;j < COL+2;j++)
{
map[i][j] = 0;
}
}
//布雷 -1表示雷
int n = 0;
while(n<NUM)
{
int r = rand() % ROW + 1;//1--ROW
int c = rand() % COL + 1;//1--C0L
if(map[r][c] == 0)
{
map[r][c] = -1;
n++;
}
}
//跟据类的分布 填充其他部位雷的数据
for(int i = 1;i <= ROW;i++)
{
for(int j = 1;j <= COL;j++)
{// 遍历二维数组
if(map[i][j] != -1)//找到不为雷的元素
{
//遍历九宫格
for(int m=i-1;m<=i+1;m++)
{
for(int n=j-1;n<=j+1;n++)
{
if(map[m][n]==-1)
{
map[i][j]++;
}
}
}
}
}
}
}
void PrintPlay();
//绘制函数 打印二维数组中所有的元素
void GameDraw()
{
//加密
for(int i = 1;i <= ROW;i++)
{
for(int j = 1;j <= COL;j++)
{
map[i][j]+=20;
}
}
PrintPlay();
}
void PrintPlay()
{
//打印
int i,j;
for(i = 1;i <= ROW;i++)
{
for(j = 1;j <= COL;j++)
{
if(map[i][j]>=19)
{
printf(" *");
}
else
{
printf("%2d",map[i][j]);
}
}
printf("\n");
}
}
//打印周圍為空的
void point(int x,int y)
{
//遍历九宫格
for(int m=x-1;m<=x+1;m++)
{
for(int n=y-1;n<=y+1;n++)
{
if(map[m][n]==20)
{
map[m][n]-=20;
point(m,n);
}
}
}
}
//用户玩输入坐标
void GameUser()
{
int z;
while(z)
{
int x,y;
printf("请输入坐标:\n");
scanf("%d %d",&x,&y);
if(x<=10&&x>=1&&y<=10&&y>=1)
{
//解密
if(map[x][y]<19)
{
printf("已翻开。\n");
}
else
{
switch(map[x][y])
{
case 19:
// 游戏结束
map[x][y]-=20;
PrintPlay();//打印
printf("你踩到雷了19!\n");
z=0;
//跳转到结束
break;
case 20:
//空
//解密
//map[x][y]-=20;
//空周围为空的叶打印出来
point(x,y);
PrintPlay();//打印
break;
case 21:
case 22:
case 23:
case 24:
case 25:
case 26:
case 27:
case 28:
//周围有雷
//解密输出就可以
map[x][y]-=20;//解密
PrintPlay();//打印
break;
default :
break;
}
}
}
else
{
printf("您输入错误!");
}
}
}
void main()
{
printf("欢迎来到Q的编程世界:\n");
//初始化函数
GameInit();
//绘制函数 打印二维数组中所有的元素
GameDraw();
//用户玩输入坐标
GameUser();
system("pause");
}
下面是运行图片:
好嘞,键盘玩扫雷到这里就完结了,拜拜,让我们下次再见吧!!!