做一个扫雷需要什么:
1份菜单
void menu()
{
printf("***************************\n");
printf("****** 1. paly **********\n");
printf("****** 0. exit **********\n");
printf("***************************\n");
}
那你是想玩还是退出呢
玩是1,退是0
void test()
{
int input;
srand((unsigned int)time(NULL));
do{
menu();
printf("请选择\n");
scanf_s("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
}
一个扫雷,用二维数组的话
初始化它
void chushihua(char arr[HANGS][LIES], int hang, int lie, char set)
{
int i, j;
for (i = 0; i<hang; i++)
for (j = 0; j<lie; j++)
arr[i][j] = set;
}
顺手打印一下
void print(char arr[HANGS][LIES], int hang, int lie)
{
int i, j;
for (i = 0; i <= HANG; i++)
printf("%-2d ", i);
printf("\n");
for (i = 1; i <= hang; i++)
{
printf("%-2d", i);
for (j = 1; j <= lie; j++)
printf(" %c ", arr[i][j]);
printf("\n");
}
}
放几颗雷到数组里面
void display(char arr[HANGS][LIES], int hang, int lie)
{
int x, y;
int i;
for (i = 0; i<boom;)
{
x = rand() % hang + 1;
y = rand() % lie + 1;
if (arr[x][y] == '0')
{
arr[x][y] = '1';
i++;
}
}
}
当你输入你要扫的位置时,怎么知道周围有几颗雷
int shuliang(char lei[HANGS][LIES], int x, int y)
{
int count = 0;
if (lei[x - 1][y - 1] == '1')
{
count++;
}
if (lei[x - 1][y ] == '1')
{
count++;
}
if (lei[x - 1][y + 1] == '1')
{
count++;
}
if (lei[x ][y - 1] == '1')
{
count++;
}
if (lei[x ][y + 1] == '1')
{
count++;
}
if (lei[x+ 1][y - 1] == '1')
{
count++;
}
if (lei[x +1][y ] == '1')
{
count++;
}
if (lei[x + 1][y + 1] == '1')
{
count++;
}
return count;
}
一颗一颗扫很累的,来直接炸开吧
void zhakai(char lei[HANGS][LIES], char show[HANGS][LIES], int i, int j)
{
if (lei[i][j] == '0'&&i >= 0 && j >= 0 && show[i][j] == '*')
{
show[i][j]=shuliang(lei, i, j)+'0';
}
if (lei[i][j - 1] == '0'&&i >= 0 && j - 1 >= 0 && show[i][j - 1] == '*')
{
show[i][j - 1] = shuliang(lei, i, j - 1) + '0';
if (shuliang(lei, i, j - 1) == 0)
{
zhakai(lei, show, i, j - 1);
}
}
if (lei[i][j + 1] == '0'&&i >= 0 && j + 1 >= 0 && show[i][j + 1] == '*')
{
show[i][j + 1] = shuliang(lei, i, j + 1) + '0';
if (shuliang(lei, i, j + 1) == 0)
{
zhakai(lei, show, i, j + 1);
}
}
if (lei[i - 1][j] == '0'&&i - 1 >= 0 && j >= 0 && show[i - 1][j] == '*')
{
show[i - 1][j] = shuliang(lei, i - 1, j) + '0';
if (shuliang(lei, i - 1, j) == 0)
{
zhakai(lei, show, i - 1, j);
}
}
if (lei[i - 1][j - 1] == '0'&&i - 1 >= 0 && j - 1 >= 0 && show[i - 1][j - 1] == '*')
{
show[i - 1][j - 1] = shuliang(lei, i - 1, j - 1) + '0';
if (shuliang(lei, i - 1, j - 1) == 0)
{
zhakai(lei, show, i - 1, j - 1);
}
}
if (lei[i - 1][j + 1] == '0'&&i - 1 >= 0 && j + 1 >= 0 && show[i - 1][j + 1] == '*')
{
show[i - 1][j + 1] = shuliang(lei, i - 1, j + 1) + '0';
if (shuliang(lei, i - 1, j + 1) == 0)
{
zhakai(lei, show, i - 1, j + 1);
}
}
if (lei[i + 1][j + 1] == '0'&&i + 1 >= 0 && j + 1 >= 0 && show[i + 1][j + 1] == '*')
{
show[i + 1][j + 1] = shuliang(lei, i + 1, j + 1) + '0';
if (shuliang(lei, i + 1, j + 1) == 0)
{
zhakai(lei, show, i + 1, j + 1);
}
}
if (lei[i + 1][j] == '0'&&i + 1 >= 0 && j >= 0 && show[i + 1][j] == '*')
{
show[i + 1][j] = shuliang(lei, i + 1, j) + '0';
if (shuliang(lei, i + 1, j) == 0)
{
zhakai(lei, show, i + 1, j);
}
}
if (lei[i + 1][j - 1] == '0'&&i + 1 >= 0 && j - 1 >= 0 && show[i + 1][j - 1] == '*')
{
show[i+1][j-1]=shuliang(lei, i + 1, j - 1)+'0';
if (shuliang(lei, i + 1, j - 1) == 0)
{
zhakai(lei, show, i + 1, j - 1);
}
}
}
第一次直接死了怎么办,救你一命
void live(char lei[HANGS][LIES], char show[HANGS][LIES], int hang, int lie)
{
int x, y;
int z = 1;
int i, j;
while (z)
{
printf("请输入坐标\n");
scanf_s("%d %d", &x, &y);
if (x > 0 && x <= hang && y > 0 && y <= lie)
{
if (lei[x][y] == '1')
{
lei[x][y] = '0';
zhakai(lei, show, x, y);
print(show, HANG, LIE);
z = 0;
while (1)
{
i = rand() % hang+1;
j = rand() % lie+1;
if (lei[i][j] == '0' && (i!=x || j!=y))
{
lei[i][j] = '1';
print(lei, HANG, LIE);
break;
}
}
}
else
{
z = 0;
zhakai(lei, show, x, y);
print(show, HANG, LIE);
}
}
else
printf("输入错误\n");
}
}
举个例子,9 * 9的格,10个雷,9 * 9-10=71
当 count=71时,你就胜利了,在其他函数中使用
int tiaojian(char show[HANGS][LIES], int hang, int lie)
{
int i, j;
int count=0;
for (i = 1; i <= hang;i++)
for (j = 1; j <= lie; j++)
{
if (show[i][j] != '*')
count++;
}
return count;
}
输入坐标,是生是死都是这个函数,加上上面的count
活着返回1,死了返回0
char play(char lei[HANGS][LIES], char show[HANGS][LIES], int hang, int lie)
{
int a, b;
live(lei, show, hang, lie);
while (1)
{
printf("请输入坐标\n");
scanf_s("%d %d", &a, &b);
if (a > 0 && a <= hang && b > 0 && b <= lie && show[a][b] == '*')
{
if (lei[a][b] == '1')
{
return 0;
}
else if (lei[a][b] == '0')
{
zhakai(lei, show, a, b);
print(show, HANG, LIE);
}
}
else
{
printf("输入错误,请从新输入\n");
}
if (tiaojian(show, hang, lie) >= (over - boom))
{
break;
}
}
return 1;
}
一口气调用所有函数
void test()
{
int input;
srand((unsigned int)time(NULL));
do{
menu();
printf("请选择\n");
scanf_s("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误\n");
break;
}
} while (input);
}
主函数
int main()
{
test();
system("pause");
return 0;
}
再来个头文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define HANG 9
#define LIE 9
#define HANGS HANG+2
#define LIES LIE+2
#define boom 13
void print(char arr[HANGS][LIES], int hang, int lie);
void chushihua(char arr[HANGS][LIES], int hang, int lie, int set);
void display(char arr[HANGS][LIES], int hang, int lie);
int shuliang(char lei[HANGS][LIES], int x, int y);
void live(char lei[HANGS][LIES], char show[HANGS][LIES], int hang, int lie);
void zhakai(char lei[HANGS][LIES], char show[HANGS][LIES], int x, int y);
int tiaojian(char show[HANG][LIE], int hang, int lie);
char play(char lei[HANGS][LIES], char show[HANGS][LIES], int hang, int lie);
void shu(char lei[HANGS][LIES], char show[HANGS][LIES], int x, int y);