1.这是test.c//主要函数
#include "game.h"//将函数声明等全放在头文件中再调用
void menu()
{
printf("**********************\n");
printf("****** 1.paly ******\n");
printf("****** 0.exit ******\n");
printf("**********************\n");
}
void game()
{
char mine[ROWS][COLS];//定义一个统计雷的数组
char show[ROWS][COLS];//展示的棋盘的数组
//初始化棋盘;
initboard(mine, ROWS, COLS,'0'); //'0'
initboard(show, ROWS, COLS,'*'); //'*'//减少代码重复
//打印棋盘;
dispalyboard(show, ROW, COL);
// dispalyboard(mine, ROW, COL);
//布置雷
setmine(mine, ROW, COL);
//dispalyboard(mine, ROW, COL);
//排查雷
findmine(mine,show ,ROW, COL);
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));//设置随机值要#include<time.h>
do
{
menu();//循环打印菜单,可以重复玩游戏
printf("请输入:");
scanf_s("%d", &input);
switch (input)
{
case 1:
game();//游戏的函数
break;
case 0:
printf("退出游戏");
break;
default:
printf("选择错误,重新选择");
break;
}
} while (input);
return 0;
}
2.这是game.h//主要是用来归类库函数,函数声明,以及定义全局变量。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define easycount 50
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
void initboard(char arr[ROWS][COLS], int rows, int cols,char set);
void dispalyboard(char arr[ROWS][COLS], int row, int col);
void setmine(char arr[ROWS][COLS], int row, int col);
void findmine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
static int getminecount(char mine[ROWS][COLS], int x, int y);
3.这是game.c//主要写那些功能函数
#include "game.h"
void initboard(char arr[ROWS][COLS], int rows, int cols,char set)
{
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
arr[i][j] = set;
}
}
}
void dispalyboard(char arr[ROWS][COLS], int row, int col)
{
for (int i = 0; i <= row; 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 ", arr[i][j]);
}
printf("\n");
}
}
void setmine(char arr[ROWS][COLS], int row, int col)
{
//布置十个雷
int count = easycount;//雷的个数
while (count)
{
int x = rand()%row + 1;//要先用srand还要#include<stdlib.h>
int y = rand()%col + 1;
if (arr[x][y] == '0')
{
arr[x][y] = '1';
count--;
}
}
}
static int getminecount(char mine[ROWS][COLS], int x, int y)
{
int c=mine[x - 1][y] + mine[x - 1][y + 1] + mine[x - 1][y - 1] + mine[x][y - 1] + mine[x][y + 1] + mine[x + 1][y] + mine[x + 1][y + 1] + mine[x + 1][y - 1]-8*'0';//因为相加的都是'1'或'0'所以要减去'0'才能得到数字
return c;
}
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- easycount)
{
printf("输入排查的坐标:");
scanf_s("%d%d", &y, &x);
if (x >= 1 && x <= row && y >= 1 && y <= col)
{
if (mine[x][y] == '1')
{
printf("很遗憾,你死了\n");
dispalyboard(mine, ROW, COL);
break;
}
else
{
//统计坐标附近雷的数量;
int n=getminecount(mine, x, y);
show[x][y] = n + '0';
dispalyboard(show, ROW, COL);
win++;
}
}
else
{
printf("坐标非法,请重新输入");
}
}
if (win == row * col - easycount)
{
printf("恭喜你排雷成功");
dispalyboard(mine, ROW, COL);
}
}
4.运行截图
5.总结
注:用其他文件时要在自身文件前引用
#include"文件名"//如文中#include"game.c".
将不同功能的函数或文件声明等放在不同的文件中可以让你写的代码更容易读懂.
可以通过修改 easycount的数量来调整难度.
好了,以上就是小编今天分享的全部内容了。我以后也会经常更新,欢迎大家观看。如果有什么不妥的地方欢迎评论指导。