头文件,包括函数的声明 game.h
#pragma once
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define num1 11
#define num2 9
void setdata(char arr[num1][num1], int);
void print(char arr[num1][num1], int sz);
void setmine(char arr[num1][num1], int sz);
void game();
void menu();
void func(char base[num1][num1], char mine[num1][num1], int row, int col);
int minenums(char arr[num1][num1],int ,int);
void findmine(char base[num1][num1], char mine[num1][num1]);
函数的定义,游戏的具体实现 game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void menu()
{
printf("***************************************\n");
printf("**************1.开始游戏***************\n");
printf("**************2.退出游戏***************\n");
printf("***************************************\n");
printf("————————————————————\n");
}
void setdata(char arr[num1][num1], int sz)
{
for (int i = 0; i < num1; i++)
{
for (int j = 0; j < num1; j++)
{
arr[i][j] = 1;
}
}
}
void setmine(char arr[num1][num1], int sz)
{
int count = sz;
while (count)
{
int i = rand() % num2 + 1;
int j = rand() % num2 + 1;
if (arr[i][j] != '*')
{
arr[i][j] = '*';
count--;
}
}
}
void print(char arr[num1][num1], int sz)
{
printf("-------------------扫雷游戏------------\n");
for (int i = 0; i < sz - 1; i++)
{
printf("%d ", i);
}
printf("\n");
for (int i = 1; i < sz - 1; i++)
{
printf("%d ", i);
for (int j = 1; j < sz - 1; j++)
{
printf("%c ", arr[i][j]);
}
printf("\n");
}
}
int minenums(char arr[num1][num1],int row,int col)
{
if (arr[row][col] == '*')
{
return 1;
}
int count = 48;
if (arr[row+1][col] =='*') count++;
if (arr[row][col-1] == '*') count++;
if (arr[row+1][col+1] == '*') count++;
if (arr[row+1][col-1] == '*') count++;
if (arr[row-1][col+1] == '*') count++;
if (arr[row-1][col-1] == '*') count++;
if (arr[row-1][col] == '*') count++;
if (arr[row][col+1] == '*' ) count++;
return count;
}
void findmine(char base[num1][num1], char mine[num1][num1])
{
int row;
int col;
while (1)
{
print(base, num1);
int temp=0;
for (int i =1 ; i <num1-1; i++)
{
for (int j = 1; j <num1-1; j++)
{
if (base[i][j] == 1)
temp ++;
}
}
if (temp == num1) {
printf("游戏·胜利·!~");
print(mine, num1);
break;
}
//print(mine, num1);
printf("输入你要排查的行列:\n");
scanf("%d %d", &row, &col);
if (mine[row][col] == '*')
{
printf("你死了!\n");
print(mine, num1);
break;
}
else
{
base[row][col] =minenums(mine,row,col);
base[row + 1][col] = minenums(mine, row + 1, col);
base[row][col-1] = minenums(mine, row, col - 1);
base[row+1][col+1] = minenums(mine, row + 1, col + 1);
base[row+1][col-1] = minenums(mine, row + 1, col - 1);
base[row-1][col+1] = minenums(mine, row - 1, col + 1);
base[row-1][col-1] = minenums(mine, row - 1, col - 1);
base[row-1][col] = minenums(mine, row - 1, col);
base[row][col+1] = minenums(mine, row, col + 1);
//func(mine,base,row,col);
print(base, num1);
}
system("cls");
}
return;
}
主函数 test.c
#define _CRT_SECURE_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
void game()
{
menu();
int choose;
while (~scanf("%d", &choose))
{
switch (choose)
{
case 1:
{
system("cls");
char base[num1][num1] = { 0 };//展示给玩家
char mine[num1][num1] = { 0 };//雷的信息
setdata(mine, num1);
setdata(base, num1);
setmine(mine, num1);//设置雷,num1个
//print(mine, num1);
//print(base, num1);
findmine(base, mine);
//print(mine, num1);
break;
}
case 2:
printf("成功退出游戏!");
default:
printf("输入错误,请重新输入:\n");
}
}
}
int main()
{
srand((unsigned int)time(NULL));
game();
return 0;
}