主函数(源文件):
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
int main()
{
srand((unsigned int)time(NULL));
int a = 0;
int b = 1;//重新开始游戏标志位
int biaoleishu = 0; //表示标的雷数
int biaoleishu1 = 0;//表示有效的标雷数(标记点确实有雷)
do{
do
{
menu();
scanf("%d", &a);
if ((a != 1) && (a != 2))
printf("\n输入错误,请重新输入\n");
else
break;
} while (1);
switch (a)
{
case 1:
{
int nandu;
while(1)
{
printf("*************************************\n");
printf("*************************************\n");
printf("****** 1 初级模式 2 中级模式 ******\n");
printf("*************************************\n");
printf("****** 3 高级模式 4 满屏模式 ******\n");
printf("*************************************\n");
printf("*************************************\n");
printf("请选择需要的难度—>:");
scanf("%d", &nandu);
if ((nandu == 1) || (nandu == 2) || (nandu == 3) || (nandu == 4))
break;
else
printf("\n\n输入有误请重新选择:\n");
}
switch(nandu)
{
case 1:
{
char youxipan[X11][Y11];
int leipan[X11][Y11];
chushihua(leipan, youxipan, X11, Y11, X1, Y1, LEI1);
dayin1(youxipan, X1, Y1);
/*dayin2(leipan, X1, Y1);*/
int mark = 0;//标记游戏状态
do
{
mark = player(leipan, youxipan, X11, Y11, X1, Y1, LEI1, &biaoleishu, &biaoleishu1);
printf("\n");
dayin1(youxipan, X1, Y1);
printf("\n\n总雷数:%d\n", LEI1);
printf("已标记雷的个数为:%d\n\n", biaoleishu);
} while (mark);
dayin2(leipan, X1, Y1);
printf("\n游戏结束,欢迎下次试玩\n\n\n");
biaoleishu = 0; biaoleishu1 = 0; b = 1; break;
}
case 2:
{
char youxipan[X22][Y22];
int leipan[X22][Y22];
chushihua2(leipan, youxipan, X22, Y22, X2, Y2, LEI2);
dayin12(youxipan, X2, Y2);
dayin22(leipan, X2, Y2);
int mark = 0;//标记游戏状态
do
{
mark = player2(leipan, youxipan, X22, Y22, X2, Y2, LEI2, &biaoleishu, &biaoleishu1);
printf("\n");
dayin12(youxipan, X2, Y2);
printf("\n\n总雷数:%d\n", LEI2);
printf("已标记雷的个数为:%d\n\n", biaoleishu);
} while (mark);
dayin22(leipan, X2, Y2);
printf("\n游戏结束,欢迎下次试玩\n\n\n");
b = 1;
biaoleishu = 0; biaoleishu1 = 0;
break;
}
case 3:;
{
char youxipan[X33][Y33];
int leipan[X33][Y33];
chushihua3(leipan, youxipan, X33, Y33, X3, Y3, LEI3);
dayin13(youxipan, X3, Y3);
dayin23(leipan, X3, Y3);
int mark = 0;//标记游戏状态
do
{
mark = player3(leipan, youxipan, X33, Y33, X3, Y3, LEI3, &biaoleishu, &biaoleishu1);
printf("\n");
dayin13(youxipan, X3, Y3);
printf("\n\n总雷数:%d\n", LEI3);
printf("已标记雷的个数为:%d\n\n", biaoleishu);
} while (mark);
dayin23(leipan, X3, Y3);
printf("\n游戏结束,欢迎下次试玩\n\n\n");
b = 1;
biaoleishu = 0; biaoleishu1 = 0;
break;
}
case 4:;
{
char youxipan[X44][Y44];
int leipan[X44][Y44];
chushihua4(leipan, youxipan, X44, Y44, X4, Y4, LEI4);
dayin14(youxipan, X4, Y4);
dayin24(leipan, X4, Y4);
int mark = 0;//标记游戏状态
do
{
mark = player4(leipan, youxipan, X44, Y44, X4, Y4, LEI4, &biaoleishu, &biaoleishu1);
printf("\n");
dayin14(youxipan, X4, Y4);
printf("\n\n总雷数:%d\n", LEI4);
printf("已标记雷的个数为:%d\n\n", biaoleishu);
} while (mark);
dayin24(leipan, X4, Y4);
printf("\n游戏结束,欢迎下次试玩\n\n\n");
b = 1;
biaoleishu = 0; biaoleishu1 = 0;
break;
}
}
break;
}
case 2:printf("\n游戏已结束,期待你的下一次加入\n"); b = 0;
}
} while (b);
return 0;
}
申明文件(头文件):
#pragma once
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define X1 9
#define Y1 9
#define X11 11
#define Y11 11
#define LEI1 10//初级模式 9*9格 10个雷
#define X2 16
#define Y2 16
#define X22 18
#define Y22 18
#define LEI2 40//中级模式 16*16格 40个雷
#define X3 30
#define Y3 16
#define X33 32
#define Y33 18
#define LEI3 99//高级模式 30*16格 99个雷
#define X4 54
#define Y4 29
#define X44 56
#define Y44 31
#define LEI4 322//满屏模式 54*29格 322个雷
void menu(); // 游戏开头
void chushihua(int leipan[X11][Y11], char youxipan[X11][Y11], int x11, int y11, int x1, int y1, int lei);//埋雷初始化 (雷盘 1雷 0安全) (游戏盘未操作格 *)
void dayin1(char youxipan[X11][Y11], int x1, int y1);//打印游戏盘
void dayin2(int leipan[X11][Y11], int x1, int y1);//打印雷盘
int player(int leipan[X11][Y11], char youxipan[X11][Y11], int x11, int y11, int x1, int y1, int lei, int* biaoleishu, int* biaoleishu1);
void saolei(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1);//扫雷显示雷数
void digui1(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1);
void digui2(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1);
void digui3(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1);
void digui4(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1);//递归会栈溢出 手搓5个函数 代替递归四次 基本可以完全实现递归的效果
//中级模式
void chushihua2(int leipan[X22][Y22], char youxipan[X22][Y22], int x22, int y22, int x2, int y2, int lei2);
void dayin12(char youxipan[X22][Y22], int x1, int y1);//打印游戏盘
void dayin22(int leipan[X22][Y22], int x1, int y1);//打印雷盘
int player2(int leipan[X22][Y22], char youxipan[X22][Y22], int x11, int y11, int x1, int y1, int lei, int* biaoleishu, int* biaoleishu1);//出游戏结果了返回0 未出返回1
void saolei2(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1);
void digui12(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1);
void digui22(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1);
void digui32(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1);
void digui42(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1);
//高级模式
void chushihua3(int leipan[X33][Y33], char youxipan[X33][Y33], int x33, int y33, int x3, int y3, int lei3);
void dayin13(char youxipan[X33][Y33], int x1, int y1);//打印游戏盘
void dayin23(int leipan[X33][Y33], int x1, int y1);//打印雷盘
int player3(int leipan[X33][Y33], char youxipan[X33][Y33], int x11, int y11, int x1, int y1, int lei, int* biaoleishu, int* biaoleishu1);//出游戏结果了返回0 未出返回1
void saolei3(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1);
void digui13(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1);
void digui23(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1);
void digui33(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1);
void digui43(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1);
//满屏模式
void chushihua4(int leipan[X44][Y44], char youxipan[X44][Y44], int x44, int y44, int x4, int y4, int lei4);
void dayin14(char youxipan[X44][Y44], int x1, int y1);//打印游戏盘
void dayin24(int leipan[X44][Y44], int x1, int y1);//打印雷盘
int player4(int leipan[X44][Y44], char youxipan[X44][Y44], int x11, int y11, int x1, int y1, int lei, int* biaoleishu, int* biaoleishu1);//出游戏结果了返回0 未出返回1
void saolei4(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1);
void digui14(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1);
void digui24(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1);
void digui34(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1);
void digui44(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1);
初级模式 函数库(源文件):
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
void menu()
{
printf("********* 佰木learning **********\n");
printf("*************************************\n");
printf("*************************************\n");
printf("*************************************\n");
printf("********* 1 开始游戏 *********\n");
printf("********* 2 退出游戏 *********\n");
printf("*************************************\n");
printf("*************************************\n");
printf("*************************************\n");
printf("请输入—>: ");
}
void chushihua(int leipan[X11][Y11], char youxipan[X11][Y11], int x11, int y11, int x1, int y1, int lei)
{
int i = 0, j = 0;
for(i = 0; i <=(x11-1);++i)
{
for (j = 0; j<= (y11 - 1); ++j)
{
leipan[i][j] = 0;
}
}//雷盘初始化 0表示安全 1表示有雷
for (i = 0; i <= (x11 - 1); ++i)
{
for (j = 0; j <= (y11 - 1); ++j)
{
youxipan[i][j] ='*';
}
}//游戏盘未被扫的区域为O
int a = 0;//计雷数
while (a < lei)
{
int x = (rand()% x1 + 1);
int y = (rand()% x1 + 1);
if (leipan[x][y] == 0)
{
a++;
leipan[x][y] = 1;
}
}
}
void dayin1(char youxipan[X11][Y11], int x1, int y1)//打印游戏盘
{
int i = 0, j = 0;
for (j = 0; j <= (y1); ++j)
{
if (j == 0)
printf(" | ");
else
printf("%d ", j);
}
printf("\n");//行号
for (j = 0; j <= (y1); ++j)
{
if (j < y1)
printf("----");
else
printf("--");
}
printf("\n");//下划线
for (i = 1; i <= x1; ++i)
{
printf("%d| ", i );
for (j = 1; j <=y1; ++j)
{
printf("%c | ", youxipan[i][j]);
}
printf("\n");
}
printf("\n");
}
void dayin2(int leipan[X11][Y11], int x1, int y1)//打印雷盘
{
int i = 0, j = 0;
for (j = 0; j <= (y1); ++j)
{
if (j == 0)
printf(" | ");
else
printf("%d ", j);
}
printf("\n");//行号
for (j = 0; j <= (y1); ++j)
{
if (j < y1)
printf("----");
else
printf("--");
}
printf("\n");//下划线
for (i = 1; i <= x1; ++i)
{
printf("%d| ", i);
for (j = 1; j <= y1; ++j)
{
printf("%d | ",leipan[i][j]);
}
printf("\n");
}
printf("\n");
}
int player(int leipan[X11][Y11],char youxipan[X11][Y11], int x11, int y11, int x1, int y1, int lei,int *biaoleishu,int *biaoleishu1)//出游戏结果了返回0 未出返回1
{
int a = 0;
int n = 0;
do {
while (1)
{
printf("\n*************************************\n");
printf("** 1打开该位置 2标记问号 3标记雷 **\n");
printf("*************************************\n");
printf("** 4取消标记的雷 5取消标记的问号 **\n");
printf("*************************************\n");
printf("请选择你需要进行的操作->:");
scanf("%d", &a);
if ((a == 1) || (a == 2) || (a == 3) || (a == 4) || (a == 5))
break;
else
printf("\n输入有误,请重新选择:\n");
}
printf("\n返回上一步 请输入0 继续则输入1 ->:");
scanf("%d", &n);
} while (!n);
int x = 0, y = 0;
while (1)
{
printf("\n请输入你需要操作的位置->:");
scanf("%d %d", &x, &y);
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
printf("\n你输入的坐标是(%d,%d)\n", x, y); break;
}
else
printf("\n你输入的坐标不在棋盘范围,请重新输入:\n");
}
switch (a)
{
case 1:
{
if (youxipan[x][y] =='*')
{
if (leipan[x][y] == 1)
{
printf("该位置有雷,很遗憾,你输了.下次一定可以的!!!\n\n\n"); return 0;
}
else
{
saolei(leipan,youxipan,x,y,x1,y1);//游戏盘显示雷数
break;
}
}
else
{
printf("\n操作失败,该位置已被操作\n"); break;
}
}
case 2:
{
if (youxipan[x][y] == '*')
{
youxipan[x][y] = '?'; break;
}
else
{
printf("\n操作失败,该位置已被操作\n"); break;
}
}
case 3:
{
if (youxipan[x][y]=='*')
{
if ((*biaoleishu) < lei)
{
youxipan[x][y] = 'X';
*biaoleishu = ((*biaoleishu) + 1);
if (leipan[x][y] == 1)
*biaoleishu1 = (*biaoleishu1) + 1;
if ((*biaoleishu1) == lei)
{
printf("\n恭喜你,找到了全部的的雷\n闯关成功!!!\n");
return 0;
}
break;
}
else
{
printf("\n操作失败,目前已经标了%d颗雷,无法在继续标记\n", lei);
break;
}
}
else
{
printf("\n操作失败,该位置已被操作\n"); break;
}
}
case 4:
{
if (youxipan[x][y] == 'X')
{
youxipan[x][y] = '*';
break;
}
else
{
printf("\n\n操作失败,该位置未被标记'X'\n\n"); break;
}
}
case 5:
{
if (youxipan[x][y] == '?')
{
youxipan[x][y] = '*';
break;
}
else
{
printf("\n\n操作失败,该位置未被标记'?'\n\n"); break;
}
}
}
return 1;
}
void saolei(int leipan[X11][Y11], char youxipan[X11][Y11],int x,int y,int x1, int y1)
{
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
int m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1)) //递归不动 栈溢出
{
digui1(leipan, youxipan, x - 1, y, x1, y1);//用函数代替递归四次
digui1(leipan, youxipan, x - 1, y - 1, x1, y1);
digui1(leipan, youxipan, x - 1, y + 1, x1, y1);
digui1(leipan, youxipan, x, y - 1, x1, y1);
digui1(leipan, youxipan, x, y + 1, x1, y1);
digui1(leipan, youxipan, x + 1, y - 1, x1, y1);
digui1(leipan, youxipan, x + 1, y, x1, y1);
digui1(leipan, youxipan, x + 1, y + 1, x1, y1);
}
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
void digui1(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1)
{
int m = 0;
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
m= leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
digui2(leipan, youxipan, x - 1, y, x1, y1);
digui2(leipan, youxipan, x - 1, y - 1, x1, y1);
digui2(leipan, youxipan, x - 1, y + 1, x1, y1);
digui2(leipan, youxipan, x, y - 1, x1, y1);
digui2(leipan, youxipan, x, y + 1, x1, y1);
digui2(leipan, youxipan, x + 1, y - 1, x1, y1);
digui2(leipan, youxipan, x + 1, y, x1, y1);
digui2(leipan, youxipan, x + 1, y + 1, x1, y1);
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
void digui2(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1)
{
int m = 0;
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
digui3(leipan, youxipan, x - 1, y, x1, y1);
digui3(leipan, youxipan, x - 1, y - 1, x1, y1);
digui3(leipan, youxipan, x - 1, y + 1, x1, y1);
digui3(leipan, youxipan, x, y - 1, x1, y1);
digui3(leipan, youxipan, x, y + 1, x1, y1);
digui3(leipan, youxipan, x + 1, y - 1, x1, y1);
digui3(leipan, youxipan, x + 1, y, x1, y1);
digui3(leipan, youxipan, x + 1, y + 1, x1, y1);
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
void digui3(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1)
{
int m = 0;
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
digui4(leipan, youxipan, x - 1, y, x1, y1);
digui4(leipan, youxipan, x - 1, y - 1, x1, y1);
digui4(leipan, youxipan, x - 1, y + 1, x1, y1);
digui4(leipan, youxipan, x, y - 1, x1, y1);
digui4(leipan, youxipan, x, y + 1, x1, y1);
digui4(leipan, youxipan, x + 1, y - 1, x1, y1);
digui4(leipan, youxipan, x + 1, y, x1, y1);
digui4(leipan, youxipan, x + 1, y + 1, x1, y1);
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
void digui4(int leipan[X11][Y11], char youxipan[X11][Y11], int x, int y, int x1, int y1)
{
int m = 0;
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
中级模式函数库(源文件):
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
void chushihua2(int leipan[X22][Y22], char youxipan[X22][Y22], int x22, int y22, int x2, int y2, int lei2)
{
int i = 0, j = 0;
for (i = 0; i <= (x22 - 1); ++i)
{
for (j = 0; j <= (y22 - 1); ++j)
{
leipan[i][j] = 0;
}
}//雷盘初始化 0表示安全 1表示有雷
for (i = 0; i <= (x22 - 1); ++i)
{
for (j = 0; j <= (y22 - 1); ++j)
{
youxipan[i][j] = '*';
}
}//游戏盘未被扫的区域为O
int a = 0;//计雷数
while (a < lei2)
{
int x = (rand() % x2 + 1);
int y = (rand() % y2 + 1);
if (leipan[x][y] == 0)
{
a++;
leipan[x][y] = 1;
}
}
}
void dayin12(char youxipan[X22][Y22], int x1, int y1)//打印游戏盘
{
int i = 0, j = 0;
for (j = 0; j <= (y1); ++j)
{
if (j == 0)
printf(" | ");
else if (j < 9)
printf("%d ", j);
else if (j == 9)
printf("%d ", j);
else printf(" %d ", j);
}
printf("\n");//行号
for (j = 0; j <= (y1); ++j)
{
if (j < y1)
printf("----");
else
printf("---");
}
printf("\n");//下划线
for (i = 1; i <= x1; ++i)
{
printf("%-2d| ", i);
for (j = 1; j <= y1; ++j)
{
printf("%c | ", youxipan[i][j]);
}
printf("\n");
}
printf("\n");
}
void dayin22(int leipan[X22][Y22], int x1, int y1)//打印雷盘
{
int i = 0, j = 0;
for (j = 0; j <= (y1); ++j)
{
if (j == 0)
printf(" | ");
else if (j < 9)
printf("%d ", j);
else if(j==9)
printf("%d ", j);
else printf(" %d ", j);
}
printf("\n");//行号
for (j = 0; j <= (y1); ++j)
{
if (j < y1)
printf("----");
else
printf("---");
}
printf("\n");//下划线
for (i = 1; i <= x1; ++i)
{
printf("%-2d| ", i);
for (j = 1; j <= y1; ++j)
{
printf("%d | ", leipan[i][j]);
}
printf("\n");
}
printf("\n");
}
int player2(int leipan[X22][Y22], char youxipan[X22][Y22], int x11, int y11, int x1, int y1, int lei, int* biaoleishu, int* biaoleishu1)//出游戏结果了返回0 未出返回1
{
int a = 0;
int n = 0;
do {
while (1)
{
printf("\n*************************************\n");
printf("** 1打开该位置 2标记问号 3标记雷 **\n");
printf("*************************************\n");
printf("** 4取消标记的雷 5取消标记的问号 **\n");
printf("*************************************\n");
printf("请选择你需要进行的操作->:");
scanf("%d", &a);
if ((a == 1) || (a == 2) || (a == 3) || (a == 4) || (a == 5))
break;
else
printf("\n输入有误,请重新选择:\n");
}
printf("\n返回上一步 请输入0 继续则输入1 ->:");
scanf("%d", &n);
} while (!n);
int x = 0, y = 0;
while (1)
{
dayin12(youxipan, X2, Y2);
printf("\n请输入你需要操作的位置->:");
scanf("%d %d", &x, &y);
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
printf("\n你输入的坐标是(%d,%d)\n", x, y); break;
}
else
printf("\n你输入的坐标不在棋盘范围,请重新输入:\n");
}
switch (a)
{
case 1:
{
if (youxipan[x][y] == '*')
{
if (leipan[x][y] == 1)
{
printf("该位置有雷,很遗憾,你输了.下次一定可以的!!!\n\n\n"); return 0;
}
else
{
saolei2(leipan, youxipan, x, y, x1, y1);//游戏盘显示雷数
break;
}
}
else
{
printf("\n操作失败,该位置已被操作\n"); break;
}
}
case 2:
{
if (youxipan[x][y] == '*')
{
youxipan[x][y] = '?'; break;
}
else
{
printf("\n操作失败,该位置已被操作\n"); break;
}
}
case 3:
{
if (youxipan[x][y] == '*')
{
if ((*biaoleishu) < lei)
{
youxipan[x][y] = 'X';
*biaoleishu = ((*biaoleishu) + 1);
if (leipan[x][y] == 1)
*biaoleishu1 = (*biaoleishu1) + 1;
if ((*biaoleishu1) == lei)
{
printf("\n恭喜你,找到了全部的的雷\n闯关成功!!!\n");
return 0;
}
break;
}
else
{
printf("\n操作失败,目前已经标了%d颗雷,无法在继续标记\n", lei);
break;
}
}
else
{
printf("\n操作失败,该位置已被操作\n"); break;
}
}
case 4:
{
if (youxipan[x][y] == 'X')
{
youxipan[x][y] = '*';
break;
}
else
{
printf("\n\n操作失败,该位置未被标记'X'\n\n"); break;
}
}
case 5:
{
if (youxipan[x][y] == '?')
{
youxipan[x][y] = '*';
break;
}
else
{
printf("\n\n操作失败,该位置未被标记'?'\n\n"); break;
}
}
}
return 1;
}
void saolei2(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1)
{
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
int m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1)) //递归不动 栈溢出
{
digui12(leipan, youxipan, x - 1, y, x1, y1);//用函数代替递归四次
digui12(leipan, youxipan, x - 1, y - 1, x1, y1);
digui12(leipan, youxipan, x - 1, y + 1, x1, y1);
digui12(leipan, youxipan, x, y - 1, x1, y1);
digui12(leipan, youxipan, x, y + 1, x1, y1);
digui12(leipan, youxipan, x + 1, y - 1, x1, y1);
digui12(leipan, youxipan, x + 1, y, x1, y1);
digui12(leipan, youxipan, x + 1, y + 1, x1, y1);
}
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
void digui12(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1)
{
int m = 0;
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
digui22(leipan, youxipan, x - 1, y, x1, y1);
digui22(leipan, youxipan, x - 1, y - 1, x1, y1);
digui22(leipan, youxipan, x - 1, y + 1, x1, y1);
digui22(leipan, youxipan, x, y - 1, x1, y1);
digui22(leipan, youxipan, x, y + 1, x1, y1);
digui22(leipan, youxipan, x + 1, y - 1, x1, y1);
digui22(leipan, youxipan, x + 1, y, x1, y1);
digui22(leipan, youxipan, x + 1, y + 1, x1, y1);
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
void digui22(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1)
{
int m = 0;
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
digui32(leipan, youxipan, x - 1, y, x1, y1);
digui32(leipan, youxipan, x - 1, y - 1, x1, y1);
digui32(leipan, youxipan, x - 1, y + 1, x1, y1);
digui32(leipan, youxipan, x, y - 1, x1, y1);
digui32(leipan, youxipan, x, y + 1, x1, y1);
digui32(leipan, youxipan, x + 1, y - 1, x1, y1);
digui32(leipan, youxipan, x + 1, y, x1, y1);
digui32(leipan, youxipan, x + 1, y + 1, x1, y1);
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
void digui32(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1)
{
int m = 0;
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
digui42(leipan, youxipan, x - 1, y, x1, y1);
digui42(leipan, youxipan, x - 1, y - 1, x1, y1);
digui42(leipan, youxipan, x - 1, y + 1, x1, y1);
digui42(leipan, youxipan, x, y - 1, x1, y1);
digui42(leipan, youxipan, x, y + 1, x1, y1);
digui42(leipan, youxipan, x + 1, y - 1, x1, y1);
digui42(leipan, youxipan, x + 1, y, x1, y1);
digui42(leipan, youxipan, x + 1, y + 1, x1, y1);
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
void digui42(int leipan[X22][Y22], char youxipan[X22][Y22], int x, int y, int x1, int y1)
{
int m = 0;
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
高级函数函数库(源文件):
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
void chushihua3(int leipan[X33][Y33], char youxipan[X33][Y33], int x33, int y33, int x3 ,int y3, int lei3)
{
int i = 0, j = 0;
for (i = 0; i <= (x33 - 1); ++i)
{
for (j = 0; j <= (y33 - 1); ++j)
{
leipan[i][j] = 0;
}
}//雷盘初始化 0表示安全 1表示有雷
for (i = 0; i <= (x33 - 1); ++i)
{
for (j = 0; j <= (y33 - 1); ++j)
{
youxipan[i][j] = '*';
}
}//游戏盘未被扫的区域为O
int a = 0;//计雷数
while (a < lei3)
{
int x = (rand() % x3 + 1);
int y = (rand() % y3 + 1);
if (leipan[x][y] == 0)
{
a++;
leipan[x][y] = 1;
}
}
}
void dayin13(char youxipan[X33][Y33], int x1, int y1)//打印游戏盘
{
int i = 0, j = 0;
for (j = 0; j <= (y1); ++j)
{
if (j == 0)
printf(" | ");
else if (j < 9)
printf("%d ", j);
else if (j == 9)
printf("%d ", j);
else printf(" %d ", j);
}
printf("\n");//行号
for (j = 0; j <= (y1); ++j)
{
if (j < y1)
printf("----");
else
printf("---");
}
printf("\n");//下划线
for (i = 1; i <= x1; ++i)
{
printf("%-2d| ", i);
for (j = 1; j <= y1; ++j)
{
printf("%c | ", youxipan[i][j]);
}
printf("\n");
}
printf("\n");
}
void dayin23(int leipan[X33][Y33], int x1, int y1)//打印雷盘
{
int i = 0, j = 0;
for (j = 0; j <= (y1); ++j)
{
if (j == 0)
printf(" | ");
else if (j < 9)
printf("%d ", j);
else if (j == 9)
printf("%d ", j);
else printf(" %d ", j);
}
printf("\n");//行号
for (j = 0; j <= (y1); ++j)
{
if (j < y1)
printf("----");
else
printf("---");
}
printf("\n");//下划线
for (i = 1; i <= x1; ++i)
{
printf("%-2d| ", i);
for (j = 1; j <= y1; ++j)
{
printf("%d | ", leipan[i][j]);
}
printf("\n");
}
printf("\n");
}
int player3(int leipan[X33][Y33], char youxipan[X33][Y33], int x11, int y11, int x1, int y1, int lei, int* biaoleishu, int* biaoleishu1)//出游戏结果了返回0 未出返回1
{
int a = 0;
int n = 0;
do {
while (1)
{
printf("\n*************************************\n");
printf("** 1打开该位置 2标记问号 3标记雷 **\n");
printf("*************************************\n");
printf("** 4取消标记的雷 5取消标记的问号 **\n");
printf("*************************************\n");
printf("请选择你需要进行的操作->:");
scanf("%d", &a);
if ((a == 1) || (a == 2) || (a == 3) || (a == 4) || (a == 5))
break;
else
printf("\n输入有误,请重新选择:\n");
}
printf("\n返回上一步 请输入0 继续则输入1 ->:");
scanf("%d", &n);
} while (!n);
int x = 0, y = 0;
while (1)
{
dayin13(youxipan, X3, Y3);
printf("请输入你需要操作的位置->:");
scanf("%d %d", &x, &y);
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
printf("\n你输入的坐标是(%d,%d)\n", x, y); break;
}
else
printf("\n你输入的坐标不在棋盘范围,请重新输入:\n");
}
switch (a)
{
case 1:
{
if (youxipan[x][y] == '*')
{
if (leipan[x][y] == 1)
{
printf("该位置有雷,很遗憾,你输了.下次一定可以的!!!\n\n\n"); return 0;
}
else
{
saolei3(leipan, youxipan, x, y, x1, y1);//游戏盘显示雷数
break;
}
}
else
{
printf("\n操作失败,该位置已被操作\n"); break;
}
}
case 2:
{
if (youxipan[x][y] == '*')
{
youxipan[x][y] = '?'; break;
}
else
{
printf("\n操作失败,该位置已被操作\n"); break;
}
}
case 3:
{
if (youxipan[x][y] == '*')
{
if ((*biaoleishu) < lei)
{
youxipan[x][y] = 'X';
*biaoleishu = ((*biaoleishu) + 1);
if (leipan[x][y] == 1)
*biaoleishu1 = (*biaoleishu1) + 1;
if ((*biaoleishu1) == lei)
{
printf("\n恭喜你,找到了全部的的雷\n闯关成功!!!\n");
return 0;
}
break;
}
else
{
printf("\n操作失败,目前已经标了%d颗雷,无法在继续标记\n", lei);
break;
}
}
else
{
printf("\n操作失败,该位置已被操作\n"); break;
}
}
case 4:
{
if (youxipan[x][y] == 'X')
{
youxipan[x][y] = '*';
break;
}
else
{
printf("\n\n操作失败,该位置未被标记'X'\n\n"); break;
}
}
case 5:
{
if (youxipan[x][y] == '?')
{
youxipan[x][y] = '*';
break;
}
else
{
printf("\n\n操作失败,该位置未被标记'?'\n\n"); break;
}
}
}
return 1;
}
void saolei3(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1)
{
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
int m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1)) //递归不动 栈溢出
{
digui13(leipan, youxipan, x - 1, y, x1, y1);//用函数代替递归四次
digui13(leipan, youxipan, x - 1, y - 1, x1, y1);
digui13(leipan, youxipan, x - 1, y + 1, x1, y1);
digui13(leipan, youxipan, x, y - 1, x1, y1);
digui13(leipan, youxipan, x, y + 1, x1, y1);
digui13(leipan, youxipan, x + 1, y - 1, x1, y1);
digui13(leipan, youxipan, x + 1, y, x1, y1);
digui13(leipan, youxipan, x + 1, y + 1, x1, y1);
}
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
void digui13(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1)
{
int m = 0;
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
digui23(leipan, youxipan, x - 1, y, x1, y1);
digui23(leipan, youxipan, x - 1, y - 1, x1, y1);
digui23(leipan, youxipan, x - 1, y + 1, x1, y1);
digui23(leipan, youxipan, x, y - 1, x1, y1);
digui23(leipan, youxipan, x, y + 1, x1, y1);
digui23(leipan, youxipan, x + 1, y - 1, x1, y1);
digui23(leipan, youxipan, x + 1, y, x1, y1);
digui23(leipan, youxipan, x + 1, y + 1, x1, y1);
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
void digui23(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1)
{
int m = 0;
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
digui33(leipan, youxipan, x - 1, y, x1, y1);
digui33(leipan, youxipan, x - 1, y - 1, x1, y1);
digui33(leipan, youxipan, x - 1, y + 1, x1, y1);
digui33(leipan, youxipan, x, y - 1, x1, y1);
digui33(leipan, youxipan, x, y + 1, x1, y1);
digui33(leipan, youxipan, x + 1, y - 1, x1, y1);
digui33(leipan, youxipan, x + 1, y, x1, y1);
digui33(leipan, youxipan, x + 1, y + 1, x1, y1);
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
void digui33(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1)
{
int m = 0;
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
digui43(leipan, youxipan, x - 1, y, x1, y1);
digui43(leipan, youxipan, x - 1, y - 1, x1, y1);
digui43(leipan, youxipan, x - 1, y + 1, x1, y1);
digui43(leipan, youxipan, x, y - 1, x1, y1);
digui43(leipan, youxipan, x, y + 1, x1, y1);
digui43(leipan, youxipan, x + 1, y - 1, x1, y1);
digui43(leipan, youxipan, x + 1, y, x1, y1);
digui43(leipan, youxipan, x + 1, y + 1, x1, y1);
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
void digui43(int leipan[X33][Y33], char youxipan[X33][Y33], int x, int y, int x1, int y1)
{
int m = 0;
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
全屏模式函数库(源文件):
#define _CRT_SECURE_NO_WARNINGS
#include"game.h"
void chushihua4(int leipan[X44][Y44], char youxipan[X44][Y44], int x44, int y44, int x4, int y4, int lei4)
{
int i = 0, j = 0;
for (i = 0; i <= (x44 - 1); ++i)
{
for (j = 0; j <= (y44 - 1); ++j)
{
leipan[i][j] = 0;
}
}//雷盘初始化 0表示安全 1表示有雷
for (i = 0; i <= (x44 - 1); ++i)
{
for (j = 0; j <= (y44 - 1); ++j)
{
youxipan[i][j] = '*';
}
}//游戏盘未被扫的区域为O
int a = 0;//计雷数
while (a < lei4)
{
int x = (rand() % x4 + 1);
int y = (rand() % y4 + 1);
if (leipan[x][y] == 0)
{
a++;
leipan[x][y] = 1;
}
}
}
void dayin14(char youxipan[X44][Y44], int x1, int y1)//打印游戏盘
{
int i = 0, j = 0;
for (j = 0; j <= (y1); ++j)
{
if (j == 0)
printf(" | ");
else if (j < 9)
printf("%d ", j);
else if (j == 9)
printf("%d ", j);
else printf(" %d ", j);
}
printf("\n");//行号
for (j = 0; j <= (y1); ++j)
{
if (j < y1)
printf("----");
else
printf("---");
}
printf("\n");//下划线
for (i = 1; i <= x1; ++i)
{
printf("%-2d| ", i);
for (j = 1; j <= y1; ++j)
{
printf("%c | ", youxipan[i][j]);
}
printf("\n");
}
printf("\n");
}
void dayin24(int leipan[X44][Y44], int x1, int y1)//打印雷盘
{
int i = 0, j = 0;
for (j = 0; j <= (y1); ++j)
{
if (j == 0)
printf(" | ");
else if (j < 9)
printf("%d ", j);
else if (j == 9)
printf("%d ", j);
else printf(" %d ", j);
}
printf("\n");//行号
for (j = 0; j <= (y1); ++j)
{
if (j < y1)
printf("----");
else
printf("---");
}
printf("\n");//下划线
for (i = 1; i <= x1; ++i)
{
printf("%-2d| ", i);
for (j = 1; j <= y1; ++j)
{
printf("%d | ", leipan[i][j]);
}
printf("\n");
}
printf("\n");
}
int player4(int leipan[X44][Y44], char youxipan[X44][Y44], int x11, int y11, int x1, int y1, int lei, int* biaoleishu, int* biaoleishu1)//出游戏结果了返回0 未出返回1
{
int a = 0;
int n = 0;
do {
while (1)
{
printf("\n*************************************\n");
printf("** 1打开该位置 2标记问号 3标记雷 **\n");
printf("*************************************\n");
printf("** 4取消标记的雷 5取消标记的问号 **\n");
printf("*************************************\n");
printf("请选择你需要进行的操作->:");
scanf("%d", &a);
if ((a == 1) || (a == 2) || (a == 3) || (a == 4) || (a == 5))
break;
else
printf("\n输入有误,请重新选择:\n");
}
printf("\n返回上一步 请输入0 继续则输入1 ->:");
scanf("%d", &n);
} while (!n);
int x = 0, y = 0;
while (1)
{
dayin14(youxipan, X4, Y4);
printf("请输入你需要操作的位置->:");
scanf("%d %d", &x, &y);
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
printf("\n你输入的坐标是(%d,%d)\n", x, y); break;
}
else
printf("\n你输入的坐标不在棋盘范围,请重新输入:\n");
}
switch (a)
{
case 1:
{
if (youxipan[x][y] == '*')
{
if (leipan[x][y] == 1)
{
printf("该位置有雷,很遗憾,你输了.下次一定可以的!!!\n\n\n"); return 0;
}
else
{
saolei4(leipan, youxipan, x, y, x1, y1);//游戏盘显示雷数
break;
}
}
else
{
printf("\n操作失败,该位置已被操作\n"); break;
}
}
case 2:
{
if (youxipan[x][y] == '*')
{
youxipan[x][y] = '?'; break;
}
else
{
printf("\n操作失败,该位置已被操作\n"); break;
}
}
case 3:
{
if (youxipan[x][y] == '*')
{
if ((*biaoleishu) < lei)
{
youxipan[x][y] = 'X';
*biaoleishu = ((*biaoleishu) + 1);
if (leipan[x][y] == 1)
*biaoleishu1 = (*biaoleishu1) + 1;
if ((*biaoleishu1) == lei)
{
printf("\n恭喜你,找到了全部的的雷\n闯关成功!!!\n");
return 0;
}
break;
}
else
{
printf("\n操作失败,目前已经标了%d颗雷,无法在继续标记\n", lei);
break;
}
}
else
{
printf("\n操作失败,该位置已被操作\n"); break;
}
}
case 4:
{
if (youxipan[x][y] == 'X')
{
youxipan[x][y] = '*';
break;
}
else
{
printf("\n\n操作失败,该位置未被标记'X'\n\n"); break;
}
}
case 5:
{
if (youxipan[x][y] == '?')
{
youxipan[x][y] = '*';
break;
}
else
{
printf("\n\n操作失败,该位置未被标记'?'\n\n"); break;
}
}
}
return 1;
}
void saolei4(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1)
{
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
int m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1)) //递归不动 栈溢出
{
digui14(leipan, youxipan, x - 1, y, x1, y1);//用函数代替递归四次
digui14(leipan, youxipan, x - 1, y - 1, x1, y1);
digui14(leipan, youxipan, x - 1, y + 1, x1, y1);
digui14(leipan, youxipan, x, y - 1, x1, y1);
digui14(leipan, youxipan, x, y + 1, x1, y1);
digui14(leipan, youxipan, x + 1, y - 1, x1, y1);
digui14(leipan, youxipan, x + 1, y, x1, y1);
digui14(leipan, youxipan, x + 1, y + 1, x1, y1);
}
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
void digui14(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1)
{
int m = 0;
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
digui24(leipan, youxipan, x - 1, y, x1, y1);
digui24(leipan, youxipan, x - 1, y - 1, x1, y1);
digui24(leipan, youxipan, x - 1, y + 1, x1, y1);
digui24(leipan, youxipan, x, y - 1, x1, y1);
digui24(leipan, youxipan, x, y + 1, x1, y1);
digui24(leipan, youxipan, x + 1, y - 1, x1, y1);
digui24(leipan, youxipan, x + 1, y, x1, y1);
digui24(leipan, youxipan, x + 1, y + 1, x1, y1);
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
void digui24(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1)
{
int m = 0;
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
digui34(leipan, youxipan, x - 1, y, x1, y1);
digui34(leipan, youxipan, x - 1, y - 1, x1, y1);
digui34(leipan, youxipan, x - 1, y + 1, x1, y1);
digui34(leipan, youxipan, x, y - 1, x1, y1);
digui34(leipan, youxipan, x, y + 1, x1, y1);
digui34(leipan, youxipan, x + 1, y - 1, x1, y1);
digui34(leipan, youxipan, x + 1, y, x1, y1);
digui34(leipan, youxipan, x + 1, y + 1, x1, y1);
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
void digui34(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1)
{
int m = 0;
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
digui44(leipan, youxipan, x - 1, y, x1, y1);
digui44(leipan, youxipan, x - 1, y - 1, x1, y1);
digui44(leipan, youxipan, x - 1, y + 1, x1, y1);
digui44(leipan, youxipan, x, y - 1, x1, y1);
digui44(leipan, youxipan, x, y + 1, x1, y1);
digui44(leipan, youxipan, x + 1, y - 1, x1, y1);
digui44(leipan, youxipan, x + 1, y, x1, y1);
digui44(leipan, youxipan, x + 1, y + 1, x1, y1);
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
void digui44(int leipan[X44][Y44], char youxipan[X44][Y44], int x, int y, int x1, int y1)
{
int m = 0;
if ((x > 0) && (x <= x1) && (y > 0) && (y <= y1))
{
m = leipan[x - 1][y - 1] + leipan[x - 1][y] + leipan[x - 1][y + 1] + leipan[x][y - 1] + leipan[x][y + 1] + leipan[x + 1][y - 1] + leipan[x + 1][y] + leipan[x + 1][y + 1];
if (m == 0)
{
youxipan[x][y] = ' ';
}
else
youxipan[x][y] = m + '0';//字符1 2 3 用的ASC||码
}
}
实操展示(vs2019环境):