话不多说上代码本人写的功能少但是也是能用的(纯属小白大牛勿喷)
Game.h 文件用作与声明
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <Windows.h>
#define _CRT_SECURE_NO_WARNINGS 1
//棋盘大小
#define X 10
#define Y 10
//菜单
void menu();
//附近雷提示
int Investigation(int arr1[][X], int arr2[][X], int CoorX, int CoorY);
//埋雷
void LayingMines(int arr[][Y], int Number);
//填充棋盘
void PadDing(char str,int arr[][Y]);
//打印棋盘
void Print(int arr[][Y]);
Game.c 用作与定义
#include "Game.h"
//打印菜单
void menu()
{
printf("***************\n");
printf("**** 1开始 ****\n");
printf("**** 0退出 ****\n");
printf("***************\n");
printf("请输入你要的游戏模式>");
}
//附近雷提示
int Investigation(int arr1[][X], int arr2[][X], int CoorX, int CoorY)
{
int ThunderNumber = 0;//区域雷数
//核心算法(数学很菜算了半天.......)
if (arr2[CoorX - 1][CoorY - 1] == '*')
{
ThunderNumber++;
}
if (arr2[CoorX - 1][CoorY] == '*')
{
ThunderNumber++;
}
if (arr2[CoorX-1][CoorY+1] == '*')
{
ThunderNumber++;
}
if (arr2[CoorX][CoorY - 1] == '*')
{
ThunderNumber++;
}
if (arr2[CoorX][CoorY - 1] == '*')
{
ThunderNumber++;
}
if (arr2[CoorX][CoorY + 1] == '*')
{
ThunderNumber++;
}
if (arr2[CoorX + 1][CoorY - 1] == '*')
{
ThunderNumber++;
}
if (arr2[CoorX + 1][CoorY] == '*')
{
ThunderNumber++;
}
if (arr2[CoorX + 1][CoorY + 1] == '*')
{
ThunderNumber++;
}
arr1[CoorX][CoorY] = ThunderNumber + '0';//将整数转换成单个字符返回去
if (arr2[CoorX][CoorY] == '*')
{
return 0;//被炸死了
}
return 1;//没有被炸死
}
//埋雷
void LayingMines(int arr[][Y],int Number)
{
int CoorX, CoorY;
srand(time(NULL));//把时间作为随机数的生成种子
for (int i = 0; i < Number; i++)
{
//生成0到9的随机数
CoorX = rand() % 10;
CoorY = rand() % 10;
//生成完毕后返回雷
arr[CoorX][CoorY] = '*';
}
}
//填充棋盘
void PadDing(char str, int arr[][Y])
{
//没什么好介绍的。。。。。
int i, j;
for (i = 0; i < X; i++)
{
for (j = 0; j < Y; j++)
{
arr[i][j] = str;
}
}
}
//打印棋盘
void Print(int arr[][Y])
{
//没什么好介绍的
int i, j;
for (i = 0;i < X;i++)
{
printf("%d ", i);
for (j = 0; j < Y; j++)
{
printf("%c", arr[i][j]);
}
printf("\n");
}
}
main.c 使用刚才封装好的函数来实现一个扫雷
#include "Game.h"
int CoorX;//坐标X
int CoorY;//坐标Y
int Flag;//模式输入的接收值
int main() {
home:
menu();
scanf("%d", &Flag);
if (Flag == 1)
{
int arr[X][Y];
int arr2[X][Y];
PadDing('?', arr);//给玩家展示的棋盘
PadDing('0', arr2);//功能性棋盘用来埋雷
LayingMines(arr2, 10);//埋10个雷
Print(arr2);//打印埋雷棋盘仅用参考测试
while (1)
{
scanf("%d %d", &CoorX, &CoorY);//输入xy坐标判断周围雷的数量
int flag = Investigation(arr, arr2, CoorX, CoorY);//如果返回值为1说明被炸死了
if (flag == 0)//死亡就返回游戏菜单那里
{
printf("您被炸死了\r\n");
Sleep(300);
system("cls");
goto home;
}
Print(arr);//打印棋盘
}
}
else if(Flag == 0)//菜单输入0退出
{
printf("\n");
printf("程序已退出!!!\n");
return 0;
}
else if (Flag != 0 || Flag != 1)//菜单输入不等于0或1说明输入错误跳回去重新输入
{
printf("输入有误\n");
Sleep(100);
system("cls");
goto home;
}
}