一堆头文件
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASYCOUNT 80
#include<stdio.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
void game();
void Initboard(char board[ROWS][COLS] ,int row ,int col ,char set);
void Displayboard(char board[ROWS][COLS] ,int row ,int col);
void Setmine(char board[ROWS][COLS] ,int row ,int col);
void Findmine(char mine[ROWS][COLS] ,char show[ROWS][COLS] ,int row ,int col);
void Openmine(char mine[ROWS][COLS] ,char show[ROWS][COLS] ,int row ,int col ,int x,int y,int win);
//游戏主体
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
//菜单
void menu()
{
printf("****************************************\n");
printf("*****1.start time 0. exit game******\n");
printf("****************************************\n");
}
//游戏主体
void game()
{
//printf("扫雷游戏,开始!\n");
//1.布置好的雷的信息
char mine[ROWS][COLS] = {0};
//2.排查出的雷的信息
char show[ROWS][COLS] = {0};
//3.初始化数组
Initboard(mine ,ROWS ,COLS ,'0');
Initboard(show ,ROWS ,COLS ,'*');
//4.设定雷
Setmine(mine ,ROW ,COL);
//5.打印
Displayboard(mine ,ROW ,COL);
printf("\n");
Displayboard(show ,ROW ,COL);
//6.寻找雷
Findmine(mine , show ,ROW ,COL);
printf("WIN ! end game\n");
}
void test()
{
int input=0;
srand((unsigned) time(NULL));
do
{
menu();
printf("请选择:->");
scanf("%d" ,&input);
switch(input)
{
case 0:
{
printf("EXIT GAME! \n");
break;
}
case 1:
{
printf("START GAME! \n");
game();
break;
}
default:
{
printf("PLEASE INPUT AGAIN CORRECTLY! \n");
break;
}
}
}while(input);
}
int main()
{
test();
return 0;
}
//游戏算法函数
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
void Initboard(char board[ROWS][COLS] ,int row ,int col ,char set)
{
int i = 0;
int j = 0;
for(i = 0 ;i < row ;i++)
{
for(j = 0 ;j < col ;j++)
{
board[i][j] = set;
}
}
}
void Displayboard(char board[ROWS][COLS] ,int row ,int col)
{
int i = 0;
int j = 0;
for(i = 0 ;i <= row ;i++)
{
printf("%d " ,i);
}
printf("\n");
for(i = 1 ;i <= row ;i++)
{
printf("%d " ,i);
for(j = 1 ;j <= col ;j++)
{
printf("%c " ,board[i][j]);
}
printf("\n");
}
}
void Setmine(char board[ROWS][COLS] ,int row ,int col)
{
int count = EASYCOUNT;
int x = 0;
int y = 0;
while(count)
{
x = rand() % row + 1;
y = rand() % col + 1;
if(board[x][y] == '0')
{
board[x][y] = '1';
count--;
}
}
}
int MINE_COUNT(char mine[ROWS][COLS] ,int x ,int y)
{
int count = 0;
count = mine[x-1][y] +
mine[x-1][y-1] +
mine[x][y-1] +
mine[x+1][y-1] +
mine[x+1][y] +
mine[x+1][y+1] +
mine[x][y+1] +
mine[x-1][y+1] - 8*'0';
return count;
}
void Openmine(char mine[ROWS][COLS] ,char show[ROWS][COLS] ,int row ,int col ,int x,int y,int win)
{
int m = 0;
m = MINE_COUNT(mine ,x ,y );
if(m == 0)
{
show[x][y] = '0';
win++;
if(x-1>=1 && x-1<=row && y-1>=1 && y-1<=col && show[x-1][y-1] == '*')
{
Openmine(mine ,show ,row ,col ,x-1 ,y-1 ,win);
}
if(x>=1 && x<=row && y-1>=1 && y-1<=col && show[x][y-1] == '*')
{
Openmine(mine ,show ,row ,col ,x ,y-1 ,win);
}
if(x+1>=1 && x+1<=row && y-1>=1 && y-1<=col && show[x+1][y-1] == '*')
{
Openmine(mine ,show ,row ,col ,x+1 ,y-1 ,win);
}
if(x+1>=1 && x+1<=row && y>=1 && y<=col && show[x+1][y] == '*')
{
Openmine(mine ,show ,row ,col ,x+1 ,y ,win);
}
if(x+1>=1 && x+1<=row && y+1>=1 && y+1<=col && show[x+1][y+1] == '*')
{
Openmine(mine ,show ,row ,col ,x+1 ,y+1 ,win);
}
if(x>=1 && x<=row && y+1>=1 && y+1<=col && show[x][y+1] == '*')
{
Openmine(mine ,show ,row ,col ,x ,y+1 ,win);
}
if(x-1>=1 && x-1<=row && y+1>=1 && y+1<=col && show[x-1][y+1] == '*')
{
Openmine(mine ,show ,row ,col ,x-1 ,y+1 ,win);
}
if(x-1>=1 && x-1<=row && y>=1 && y<=col && show[x-1][y] == '*')
{
Openmine(mine ,show ,row ,col ,x-1 ,y ,win);
}
}
else
show[x][y] = MINE_COUNT(mine ,x ,y ) + '0';
}
void Findmine(char mine[ROWS][COLS] ,char show[ROWS][COLS] ,int row ,int col)
{
int x = 0;
int y = 0;
int win = 0;
//printf("请输入排雷坐标-> ");
while(win < ((row * col) - EASYCOUNT))
{
printf("请输入排雷坐标-> ");
scanf("%d%d" ,&x ,&y);
if(x>=1 && x<=row && y>=1 &&y<=col)
{
if(mine[x][y] == '1')
{
printf("炸死你! \n");
break;
}
else
{
show[x][y] = MINE_COUNT(mine ,x ,y) + '0';
Openmine(mine ,show ,row ,col ,x, y, win);
//break;
Displayboard(show ,row ,col);
win++;
}
}
else
{
printf("坐标非法,请重新输入->");
}
}
}