1.函数声明
文件名:game.h
代码
#pragma once
//这里放函数声明
#include<stdio.h>
#define ROW 9 //放雷行
#define ROWS ROW+2 //棋盘行
#define COL 9 //放雷列
#define COLS COL+2 //棋盘列
#define MineCount 10 //雷的个数
void menu();
void test();
void game();
void print();
void SetMine(char mine[ROWS][COLS], int x, int y);
void InitBoard(char arr[ROWS][COLS], int x, int y, char set);
void DisplayBoard(char arr[ROWS][COLS], int x, int y);
int SurroundMine(char mine[ROWS][COLS], int x, int y);
void FindMind(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y);
2.函数定义
文件名:game.c
代码
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
void menu()
{
printf("******************\n");
printf("**** 1.开玩 ******\n");
printf("**** 0.退出 ******\n");
printf("******************\n");
}
void test()
{
int input = 0;
do
{
menu();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("游戏结束,退出游戏,请手动关闭窗口\n");
break;
default:
printf("选择错误,重新选择\n");
break;
}
} while (input);
}
void SetMine(char mine[ROWS][COLS], int x, int y)
{
srand((unsigned int)time(NULL));
int n = MineCount;
while (n)
{
int row = rand() % x + 1;
int col = rand() % y + 1;
if (mine[row][col] == '0')
{
mine[row][col] = '1';
n--;
}
}
}
void InitBoard(char arr[ROWS][COLS], int x, int y, char set)//x对应ROWS,y对应COLS
{
int i = 0;
for (i = 0; i < x; i++)
{
int j = 0;
for (j = 0; j < y; j++)
{
arr[i][j] = set;
}
}
}
void DisplayBoard(char arr[ROWS][COLS], int x, int y)//x对应ROW,y对应COL
{
int i = 0;
int j = 0;
for (i = 0; i <= x; i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1; i <= x; i++)
{
printf("%d ", i);
for (j = 1; j <= y; j++)
{
printf("%c ", arr[i][j]);//%c打印字符
}
printf("\n");
}
printf("\n");
}
int SurroundMine(char mine[ROWS][COLS], int x, int y)
{
int i = 0;
int count = 0;
for (i = x - 1; i <= x + 1; i++)
{
int j = 0;
for (j = y - 1; j <= y + 1; j++)
{
count += (mine[i][j] - '0');
}
}
return count ;
}
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y)
{
int win = x * y - MineCount;
while (win)
{
int i = 0;
int j = 0;
printf("请输入你选择的行列:");
scanf("%d %d", &i, &j);
if ((i > 0) && (i <= x) && (j > 0) && (j <= y))
{
if(show[i][j]=='*')
{
if (mine[i][j] == '0')
{
show[i][j] = SurroundMine(mine, i, j) + '0';
print();
DisplayBoard(show, ROW, COL);
//print();
//DisplayBoard(mine, ROW, COL);
}
else
{
printf("很遗憾,你选到了炸弹,游戏结束\n");
printf("\n炸弹位置图:\n");
DisplayBoard(mine, ROW, COL);
break;
}
}
else
{
printf("\n该坐标已被排查,请重新选择:\n");
}
}
else
{
printf("选择超出范围,请重新选择:\n");
}
win--;
}
if (win == 0)
{
printf("恭喜你排雷成功\n");
}
}
void print()
{
printf("********棋盘*******\n");
}
3.游戏测试
文件名:test.c
代码
#define _CRT_SECURE_NO_WARNINGS
#include "game.h"
#include<time.h>
void game()
{
//先将棋盘整出来,从理念改为实际数据
//雷,隐藏的
char mine[ROWS][COLS] = { 0 };//整个棋盘11*11
//格子,表面的
char show[ROWS][COLS] = { 0 };
//初始化棋盘,表面用*,隐藏的为0(安全)与1(mine)
InitBoard(show, ROWS, COLS, '*');
InitBoard(mine, ROWS, COLS, '0');
//布置雷
SetMine(mine, ROW, COL);
//打印棋盘
print();
DisplayBoard(show, ROW, COL);//打印表面棋盘
//print();
//DisplayBoard(mine, ROW, COL);//打印炸弹棋盘
//排雷
FindMine(mine, show, ROW, COL);
}
int main()
{
test();//开始游戏
}
4.总结
先写个主函数,需要什么呢往里面加,先把游戏大体写出来,能运行就行,优化之后再说。