#该代码由本人亲测可以正常使用#
#由于小萌新是第一次编写扫雷程序,以及小萌新知识水平有限,会有很多不足之处,希望谅解#
#仅作于小萌新学习成长的记录,可能具有参考价值#
扫雷作为一款经典的Windows小游戏,从它诞生开始至今经久不衰,仍具有一定的娱乐价值,包括小萌新自己平常都有拿它娱乐
其原理在此就不多加赘述了。
先是各个模块的分块介绍,文章末会有完整的代码
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#define row 12 //为什么要将数组大小定义为12?--是为了防止数组越界
#define col 12
char show[row][col]={0};//初始玩家地图
char design[row][col]={0};//初始开发者地图
将数组定义成12*12是为了防止数组越界,因为在计算(1,1)点周围的雷数时,如果它仅是10*10的数组,因为计算(1,1)点周围的8个格内是否有雷时,仅有3个格可用(即右,下和右下),就会产生数组越界的问题,并且在10*10数组操作时,数组下标是从0开始,会带来很大不方便(即输入的直观性),注意:定义的是两个字符数组!!!(小萌新曾经用一个整型二位数组来来标记扫雷格内的值,在统计一个格周围的雷数时,会导致(假设埋雷点赋值为1,在相加时会影响到其他格的计算))!!!
void creat()//将开发者地图和玩家地图
{
int i;
int j;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
show[i][j]='*';
design[i][j]='0';
}
}
}
show数组用于输出到屏幕上,即我们看见的*号界面,design数组用于我们开发者进行功能的验证
void printplayer()//打印玩家地图
{
int i,j;
printf("0 ");
for(i=1;i<row-1;i++)
printf("%d ",i);
printf("\n");
for(i=1;i<row-2;i++)
{
printf("%d ",i);
for(j=1;j<col-1;j++)
{
printf("%c ",show[i][j]);
}
printf("\n");
}
printf("10 ");
for(i=1;i<row-1;i++)
{
printf("%c ",show[10][i]);
}
printf("\n");
}
void printdesign()//打印开发者地图
{
int i = 0;
int j = 0;
printf("0 ");
for (i=1; i<row-1;i++)
{
printf("%d ",i);
}
printf("\n");
for (i=1; i<row-2;i++)
{
printf("%d ", i);
for (j=1;j<col-1;j++)
{
printf("%c ",design[i][j]);
}
printf("\n");
}
printf("10 ");
for (i=1;i<row-1;i++)
{
printf("%c ", design[10][i]);
}
printf("\n");
}
打印两张地图,使他们对其(包括行标,列标)(为什么第十行要单独打印,因为10是一个二位数,一起打印可能会出现排版不整齐的情况)
void plant(int n)//随机埋雷
{
int x,y;
int COUNT=n;
while (COUNT)
{
x=rand()%10+1;
y=rand()%10+1;
if(design[x][y]=='0')
{
design[x][y]='1';
COUNT--;
}
}
}
rand()函数请与sand()一同使用,rand()%10+1 能产生1-10的随机数,传入的n是雷数,用COUNT来确定循环何时结束,即埋雷工作全部完成
int coun