先看xue_c1.内容,在对着自定义函数名去test.c查找具体函数,最后看game.h
//game.h(用于存放自定义函数声明)
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//定义常量的符号
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define EASY_COUNT 10//简单版本为10个雷
//函数声明
//棋盘初始化
void InitBoard(char boardROWSCOLS, int r, int c,char set);
//菜单
void menu();
//布置雷
void SetMine(char mineROWSCOLS, int r, int c);
//打印棋盘
void DisplayBoard(char boardROWSCOLS,int r,int c);
//排查雷
void FindMine(char mineROWSCOLS, char showROWSCOLS, int r, int c);
//排查出该坐标周围雷的个数
int GetMine(char mineROWSCOLS, int x, int y);
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
//test.c(自定义函数具体内容)
//菜单
void menu()
{
printf("********************\n");
printf("*****1.开始游戏*****\n");
printf("*****0.退出游戏*****\n");
printf("********************\n");
}
//棋盘初始化
void InitBoard(char boardROWSCOLS, int r, int c,char set)
{
int i = 0;
for (i = 0; i < r; i++)
{
int j = 0;
for (j = 0; j < c; j++)
{
boardij = set;
}
}
}
//随机布置10个雷
void SetMine(char mineROWSCOLS,int r,int c)
{
int cound = EASY_COUNT;
while (cound)//cound设置为10,则if语句必须成立10次,才能输出0,结束while循环(表示该循环至少循环10次以上)
{
int x = rand() % r + 1;//每调用一次rand(),就会重新生成一个随机数
int y = rand() % c + 1;
if (minexy == '0')
{
minexy = '1';
cound--;
}
}
}
//打印棋盘
void DisplayBoard(char boardROWSCOLS, int r, int c)
{
printf("----------扫雷----------\n");
int i = 0;
for (i = 0; i <= r; i++)
{
printf("%d ", i);
}//目的是打印一行0~9的一个坐标显示,方便玩
printf("\n");
for (i = 1; i <= r; i++)
{
printf("%d ", i);//打印棋盘的第一列打印1~9的数字
int j = 0;
for (j = 1; j <= c; j++)
{
printf("%c ", boardij);//这里要为%c,因为打印的是字符类型
}
printf("\n");
}
}
//统计一下该坐标周围有几个雷
static int GetMine(char mineROWSCOLS, int x, int y)//static修饰全局变量,让该函数只能在本文件使用
{
/*return minexy + 1 + minexy - 1 + minex - 1y + minex - 1y - 1 +
minex - 1y + 1 + minex + 1y + minex + 1y - 1 + minex + 1y + 1 - 8*'0';*///这种方法是返回一个整型
//优化一下
int i = 0;
int j = 0;
int c = 0;
for (i = -1; i <= 1; i++)
{
for (j = -1; j <= 1; j++)
{
if (minex + iy + j == '1')
c++;
}
}
return c;
}
//排查雷
void FindMine(char mineROWSCOLS, char showROWSCOLS, int r, int c)
{
int x = 0;
int y = 0;
int win = 0;
while (win < (ROW*COL - EASY_COUNT))
{
printf("请输入排查雷的坐标:");
scanf("%d %d", &x, &y);
if (x >= 1 && x <= r && y >= 1 && y <= c)
{
//判断是否为雷
if (minexy == '0')
{
if (showxy == '*')
{
//统计一下该坐标周围有几个雷
int c = GetMine(mine, x, y);
showxy = c + '0';//输入整型c;
DisplayBoard(show, ROW, COL);
win++;
}
else
printf("该坐标已被排查,请重新输入:");
}
else if (minexy == '1')
{
printf("该坐标为雷,你被炸嘎了\n");
DisplayBoard(mine, ROW, COL);//打印出布置好雷的坐标
break;
}
}
else
printf("输入坐标错误,请重新输入\n");
}
if (win == (ROW * COL - EASY_COUNT))
{
printf("恭喜你,排雷成功,你就是排雷天才\n");
DisplayBoard(mine, ROW, COL);
}
}
//xue_c1.c(整个游戏测试运行的总流程)
#define _CRT_SECURE_NO_WARNINGS 1
#include"game.h"
//数组和函数实践;扫雷游戏
void game()
{
//完成扫雷游戏
char mineROWSCOLS = { 0 };//定义,存放好布置雷的信息
char showROWSCOLS = { 0 };//定义,存放排查出雷的信息
//棋盘初始化
//mine数组初始化全为0
//show数组初始化全为*
InitBoard(mine, ROWS, COLS,'0');//这里一定要打双引号,因为输出的是字符类型,不是整型,不然打印结果为48
InitBoard(show, ROWS, COLS,'*');
//布置10个雷
SetMine(mine,ROW,COL);
//打印棋盘
//DisplayBoard(mine, ROW, COL);//布置雷的一个演示
DisplayBoard(show, ROW, COL);
//排查雷
FindMine(mine, show, ROW, COL);
//统计一下该坐标周围有几个雷
//GetMine(mine, ROW, COL);
}
int main()
{
int i = 0;
srand((unsigned int)time(NULL));//生成一个随机数为rand(),头文件有stdlib.h,time.h
do
{
menu();//菜单
printf("请输入:");
scanf("%d", &i);
switch (i)
{
case 1:
{
game();//进入玩游戏
break;
}
case 0:
{
printf("退出游戏");
break;
}
default:
{
printf("输入错误,请重新输入:\n");
break;
}
}
} while (i);
return 0;
}