将游戏实现分文件。防止文件臃肿,使其目录结构清晰
头文件(game.h),主函数文件(主入口),和函数实现文件(game.c)
一、主函数文件(主入口)
#include "game.h"
void menu() {
printf("1 play, 0 exit\n\n\n");
}
void game() {
/*printf("扫雷\n");*/
//布置类的信息
char Mine[Rows][Cols] = { 0 };//11*11
//排查类的信息
char Show[Rows][Cols] = { 0 };
//初始化
Inta(Mine, Rows, Cols,'0');
/*视图*/
Inta(Show, Rows, Cols,'*');
//打印布局
/* BoardView(Mine, Row, Col);*/
BoardView(Show, Row, Col);
//布置雷
Setmine(Mine, Row, Col);
/* BoardView(Mine, Row, Col);*/
Findmine(Mine, Show, Row, Col);
}
void test() {
//生成随机值
srand((unsigned int)time(NULL));
int input = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("选择错误\n");
break;
}
} while (input);
};
int main(){
test();
return 0;
}
二、头文件(game.h)
1.引入库
代码如下(示例):
#pragma once
#include <stdio.h>
#define Row 9
#define Col 9
#define Rows Row+2
#define Cols Col+2//增大2因为判断的时候怕越界的问题带来的if语句的问题
#define Easy 8//雷的个数
#include <stdlib.h>
#include<time.h>
void Inta(char board[Rows][Cols], int rows, int cols,char set);
void BoardView(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);
三,头文件函数实现文件(game.c)
代码如下(示例):
#include "game.h"
// '1'-'0'=1;
// '3'-'0'=3;3的acll码为51,0的acll码为48;
//判断周围是雷的个数
int getMinecount(char mine[Rows][Cols],int x, int y)
{
return 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';
}
void Inta(char board[Rows][Cols], int rows, int cols,char set)
{
for(int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
board[i][j] = set ;
}
}
}
void BoardView(char board[Rows][Cols], int row, int col) {
//打印列号
for (int i = 0; i <= col; i++)
{
printf("%d ",i);
}
printf("\n");
for (int i = 1; i <=row; i++)
{
//打印行号
printf("%d ", i);
for (int j = 1; j <=col; j++)
{
printf("%c ", board[i][j]);
}
printf("\n");
}
}
void Setmine(char board[Rows][Cols], int row, int col) {
int cunt = Easy;
while (cunt)
{
int x = rand() % row;//1-9%x=0-x-1的数字
int y = rand() % col;
if (board[x][y]=='0')
{
board[x][y] = '1';
cunt--;
}
}
}
void Findmine(char mine[Rows][Cols], char show[Rows][Cols], int row, int col)
{
int x = 0;int y = 0;int win = 0;
while (win<row*col-Easy)
{
printf("输入排雷坐标");
scanf("%d %d", &x, &y);
if (x>=1&&x<=row && y >= 1 && y <=col)
{
//第一种情况扫到雷了
if (mine[x][y] == '1')
{
printf("你扫到雷了!!!你死了\n在这里插入图片描述
");
BoardView(mine, row, col);
break;
}
//不是雷
else
{
int con= getMinecount (mine, x, y);
show[x][y] = con + '0';
BoardView(show, row, col);
win++;
}
}
else
{
printf("坐标非法!!!!\n");
}
}
if (win = row * col - Easy)
{
printf("通关成功!!!!");
}
}
把雷扫完就赢了 1为雷,0为空
srand((unsigned int)time(NULL));
库函数,srand 可以查找相关用法
x = rand() % row;//srand 生成值太大的时候%,使其生成想要的随机值
y = rand() % col;
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200824121306971.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0FsaWNlc2E=,size_16,color_FFFFFF,t_70#pic_center)