#ifndef _MINE_H__
#define _MINE_H__
#include<stdlib.h>
#include<time.h>
#include<stdio.h>
#include<string.h>
#include<time.h>
#define LINE 10//行
#define COWS 10//列
#define MINE 20//雷
int GameOperation();
void initialize(int n,int arr[LINE][COWS]);//初始化函数
void PutMine(int arr[LINE][COWS]);
void Show(int arr[LINE][COWS]);
int win(int arr[LINE][COWS]);
void maue();
void GetCoordinate(int *p, int *q);//生成随机坐标
int FindMine(int arr1[LINE][COWS], int arr2[LINE][COWS], int x, int y, int count);
void show_0(int arr1[LINE][COWS], int arr2[LINE][COWS], int x, int y);
void show(int arr[LINE][COWS]);
#endif
这是头文件mine.h
#define _CRT_SECURE_NO_WARNINGS 1
#include"mine.h"
int main()
{
GameOperation();
printf("\n");
return 0;
}
这块是test文件
#define _CRT_SECURE_NO_WARNINGS 1
#include"mine.h"
int GameOperation()
{
char judge = ' ';
int SaveMine[LINE][COWS] = { 0 }, ShowMine[LINE][COWS] = { 0 };
do
{
srand((unsigned int)(time(NULL)));
initialize(0, SaveMine);//初始化SaveMine
initialize((int)'*', ShowMine);//初始化ShowMine
maue();//打印菜单
flag1:
judge = ' ';
judge = getchar();
fflush(stdin);
if (judge == '2')
{
break;
}
else if (judge != '1' )
{
printf("输入错误请重新输入\n");
goto flag1;
}
else
{
printf("游戏开始:\n");
}
PutMine(SaveMine);
//show(SaveMine);
show(ShowMine);
int count = 0;
do
{
int x = 0, y = 0;
printf("请输入你要扫的坐标:\n");
scanf("%d%d", &x, &y);
fflush(stdin);
//x += 2;
//y += 2;
int t = FindMine(SaveMine, ShowMine, x, y, count);
//show(SaveMine);
show(ShowMine);
if (t == -1)
{
printf("你输了\n");
break;
}
int s = win(ShowMine);//判断是否胜利或者失败
if(s == -1)
{
printf("你赢了兄弟,老铁666!!!!!\n");
break;
}
count++;
} while (1);
} while (1);
return 0;
}
void initialize(int n, int arr[LINE][COWS])
{
//memset(arr, n, LINE*COWS*sizeof(arr[0][0]));
for (int i = 0; i < LINE; i++)
{
for (int j = 0; j < COWS; j++)
{
arr[i][j] = n;
}
}
}
void maue()
{
printf("*********欢迎来到扫雷********\n");
printf("**********1、开始************\n");
printf("**********2、结束************\n");
printf("*****************************\n");
}
void PutMine(int arr[LINE][COWS])
{
for (int i = 0; i < MINE; i++)
{
int x = 0, y = 0;
do
{
GetCoordinate(&x, &y);
} while (arr[x][y] != 0);
arr[x][y] = 1;
}
}
void GetCoordinate(int *p, int *q)//生成随机坐标
{
*p = (rand() % (LINE - 2)) + 1;
*q = (rand() % (COWS - 2)) + 1;
}
void show(int arr[LINE][COWS])
{
for (int i = 0; i < COWS - 1; i++)
{
if (!i)
{
printf(" ");
}
else
{
printf("%d ",i);
}
}
printf("\n");
for (int i = 1; i < COWS - 1; i++)
{
printf("%d ", i);
for (int j = 1; j < LINE - 1; j++)
{
if (arr[i][j] == '*')
{
printf("* ");
}
else
{
printf("%d ", arr[i][j]);
}
}
printf("\n");
}
}
int FindMine(int arr1[LINE][COWS], int arr2[LINE][COWS], int x, int y, int count)
{
flag2:
if (arr1[x][y] == 0)
{
show_0(arr1, arr2, x, y);
}
else if (count == 0)
{
arr1[x][y] = 0;
int a = 0, b = 0;
do
{
GetCoordinate(&a, &b);
} while (arr1[a][b] != 0);
arr1[a][b] = 1;
goto flag2;
}
else
return -1;
return 0;
}
void show_0(int arr1[LINE][COWS], int arr2[LINE][COWS], int x, int y)
{
int m = arr1[x - 1][y - 1] + arr1[x - 1][y] + arr1[x - 1][y + 1] + arr1[x][y - 1] + arr1[x][y + 1] + arr1[x + 1][y - 1] + arr1[x + 1][y] + arr1[x + 1][y + 1];
arr2[x][y] = m;
if (m == 0)
{
for (int i = -1; i <= 1; i++)
{
for (int j = -1; j <= 1; j++)
{
if ((i != 0 || j != 0) && (x + i) > 0 && (x + i) < LINE && (y + j) > 0 && (y + j) < COWS && arr2[x+i][y+j] == '*')
{
show_0(arr1, arr2, x + i, y + j);
}
}
}
}
}
int win(int arr[LINE][COWS])
{
int count = 0;
for (int i = 1; i < LINE - 1; i++)
{
for (int j = 1; j < COWS - 1; j++)
{
if (arr[i][j] == '*')
{
count++;
}
}
}
if (count == MINE)
{
return -1;
}
return 0;
}这里就是主要的文件了 装逼的都在这 功能基本全都实现了。
有点爽啊