我在vs studio2019中创建了,game.h,game.c,test.c三个文件
game.h//存放相关声明和头文件
#define _CRT_SECURE_NO_WARNINGS 1
#define row 9
#define col 9
#define rows row+2
#define cols col+2
#define sum_mine 10
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<Windows.h>
void menu();
void playgame();
void board_mine_init(int arr[rows][cols]);
void board_init(char arr[rows][cols]);
void board_mine_show(int arr[rows][cols]);
void board_show(char arr[rows][cols]);
void setup_mine(int arr[rows][cols]);
int mine_num(int arr[rows][cols], int x, int y);
char find_mine(int arr1[rows][cols], char arr2[rows][cols]);
void iswin(int arr1[rows][cols], char arr2[rows][cols]);
game.c游戏运行的关键信息
#include "game.h"
void menu() {
printf("****************\n");
printf("1.玩游戏 0.退出\n");
printf("****************\n");
}
void board_mine_init(int arr[rows][cols]) {//初始化地雷标记棋盘
int i = 0, j = 0;
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
arr[i][j] = 0;
}
}
}
void board_init(char arr[rows][cols]) {//初始化游戏显示棋盘
int i = 0, j = 0;
for (i = 0; i < rows; i++) {
for (j = 0; j < cols; j++) {
arr[i][j] = '*';
}
}
}
void board_mine_show(int arr[rows][cols]) {//显示地雷标记棋盘
int i = 0, j = 0;
for (j = 0; j <=col;j++) {
printf(" %d ", j);
}
printf("\n");
for (i = 1; i <=row; i++) {
printf(" %d ", i);
for (j = 1; j <= col; j++) {
printf(" %d ",arr[i][j]);
}
printf("\n");
}
}
void board_show(char arr[rows][cols]) {//显示游戏显示棋盘
int i = 0, j = 0;
for (j = 0; j <=col; j++) {
printf(" %d ", j);
}
printf("\n");
for (i = 1; i <=row; i++) {
printf(" %d ", i);
for (j = 1; j <= col; j++) {
printf(" %c ",arr[i][j]);
}
printf("\n");
}
}
void setup_mine(int arr[rows][cols]) {//电脑设置地雷
int count = sum_mine;
while (count) {
int x = rand()%row + 1;
int y = rand()%col + 1;
if (arr[x][y]==0) {
arr[x][y] = 1;
count--;
}
}
}
int mine_num(int arr[rows][cols],int x, int y) {//判断玩家输入坐标周围八个有几个雷
int sum = 0;
sum = arr[x - 1][y - 1] + arr[x - 1][y] + arr[x - 1][y + 1]
+ arr[x][y - 1] + arr[x][y + 1] +
+arr[x + 1][y - 1] + arr[x + 1][y] + arr[x + 1][y + 1]+48;
return sum;
}
char find_mine(int arr1[rows][cols], char arr2[rows][cols]) {//玩家输入坐标,有雷则返回f无雷返回c
int x=0, y=0;
printf("请输入坐标");
scanf("%d %d", &x, &y);
while (1) {
if (x > 0 && x <=row && y>0 && y <=col && arr2[x][y] == '*') {
if (arr1[x][y] == 1) {
return 'f';
}
else {
arr2[x][y] = mine_num(arr1, x, y);
return 'c';
}
}
else {
printf("输入错误请重新输入");
}
scanf("%d %d", &x, &y);
}
}
void iswin(int arr1[rows][cols], char arr2[rows][cols]) {//判断输赢
int count=0;
do {
char a = find_mine(arr1, arr2);
system("CLS");
//board_mine_show(arr1);
printf("-----------------------------\n");
board_show(arr2);
if (a == 'c') {
count++;
}
else if (a == 'f') {
printf("你被炸,输了!!\n");
break;
}
} while(count<(row * col- sum_mine));//所有非雷被找出则赢
if (count == (row * col - sum_mine)) {
printf("赢了\n");
}
}
void playgame(){
srand((unsigned int)time(NULL));
int arr1[rows][cols] = { 0 };
char arr2[rows][cols] = { 0 };
board_mine_init(arr1);
board_init(arr2);
printf("-----------------------------\n");
board_show(arr2);
setup_mine(arr1);
printf("-----------------------------\n");
//board_mine_show(arr1);
iswin(arr1, arr2);
}
test.c控制游戏的开始结束
#include "game.h"
int main() {
int input = 1;
do {
menu();
printf("请输入:");
scanf("%d", &input);
switch (input) {
case 1:
playgame();
break;
case 0:
return;
default:
printf("输入错误请重新输入");
break;
}
} while (1);
return 0;
}
运行截图太麻烦可以看下主页的视频