Game.h
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#define LINE 10
#define LIST 10
void Init(char arr[LINE][LIST],int line, int list, char s);
void print(char arr[LINE][LIST],int line, int list);
void SetMine(char arr[LINE][LIST],int line, int list);
void FindMine(char arr1[LINE][LIST],char arr2[LINE][LIST],int line, int list);
#endif //__GAME_H_
Game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
int main()
{
void test();
test();
return 0;
}
void test()
{
int input = 0;
do
{
srand((unsigned int)time(NULL));
void screen();
void game();
screen();
printf("请选择:>\n");
scanf("%d", &input);
switch (input)
{
case 0: break;
case 1:game(); break;
default:printf("输入错误\n");break;
}
} while (input);
}
void screen()
{
printf("---------------------------\n");
printf("----1.play----0.exit--------\n");
printf("---------------------------\n");
}
void game()
{
char arr1[LINE + 1][LIST + 1];
char arr2[LINE][LIST];
Init(arr1, LINE + 1, LIST + 1, ' ');
Init(arr2, LINE, LIST, '*');
SetMine(arr1, LINE, LIST);
/*print(arr1, LINE, LIST);*/ //检测时取消注释
FindMine(arr1, arr2, LINE, LIST);
}
void Init(char arr[LINE][LIST],int line,int list,char s) //自定义初始化二维数组
{
int i = 0;
int j = 0;
for (i = 0; i < line; i++)
{
for (j = 0; j < list; j++)
{
arr[i][j] = s;
}
}
}
void print(char arr[LINE][LIST],int line,int list) //打印棋盘
{
int i = 0;
int j = 0;
printf(" ");
for (i = 0; i < line; i++)
{
printf(" %d ", i + 1);
}
printf("\n");
i = 0;
for (i = 0; i < line; i++)
{
printf("------------------------------------------\n");
printf("%2d", i + 1);
for (j = 0; j < list; j++)
{
printf(" %c |", arr[i][j]);
}
printf("\n");
}
printf("------------------------------------------\n");
}
void SetMine(char arr[LINE][LIST],int line,int list) //置雷
{
int x = 0;
int y = 0;
int count = 0;
while (count<=10)
{
x = rand() % line + 1;
y = rand() % list + 1;
if (arr[x][y] ==' ')
{
arr[x][y] = '1';
count++;
}
}
}
void FindMine(char arr1[LINE][LIST],char arr2[LINE][LIST],int line,int list)//排雷
{
int i = 0;
int j = 0;
int m = 0;
int q = 0;
int p = 0;
int count(char arr[LINE][LIST],int i, int j);
print(arr2, LINE, LIST);
while (m < 10)
{
printf("请玩家输入坐标:\n");
scanf("%d,%d", &i, &j);
i = i - 1;
j = j - 1;
if ((i >= 0 && i < line) && (j >= 0 && j < list))
{
flag:
if (arr1[i][j] ==' ')
{
arr2[i][j] = count(arr1, i, j) + 48;
m++;
print(arr2, LINE, LIST);
}
else if (arr1[i][j] =='1')
{
p = i;
q = j;
if (m == 0) //若第一步踩到雷,移走雷。
{
arr1[i][j] = ' ';
while (1)
{
if (i == 10)
{
++j;
if (arr1[i][j] ==' ')
{
arr1[i][j] = '1';
break;
}
}
else if (j == 10)
{
++i;
if (arr1[i][j] ==' ')
{
arr1[i][j] = '1';
break;
}
}
else
{
++i;
if (arr1[i][j] ==' ')
{
arr1[i][j] = '1';
break;
}
}
}
/*print(arr1, LINE, LIST);*/ //检测时取消注释
i = p;
j = q;
goto flag;
}
printf("此处有雷,你踩中了!\n");
print(arr1, LINE, LIST);
break;
}
if (m == 10)
{
printf("恭喜,排雷成功!\n");
}
}
}
}
}
int count(char arr[LINE][LIST],int i, int j) //计算周围雷个数
{
int count = 0;
count = (arr[i - 1][j - 1] == '1') + (arr[i - 1][j] =='1') + (arr[i - 1][j + 1] == '1') +
(arr[i][j - 1] == '1') + (arr[i][j + 1] =='1') +
(arr[i + 1][j - 1] == '1') + (arr[i + 1][j] =='1') + (arr[i + 1][j + 1] == '1');
return count;
}
欢迎指导与交流!