game.h

//声明

#define _CRT_SECURE_NO_WARNINGS 1

#define ROW 9                  

#define COL 9

#define ROWS ROW+2

#define COLS COL+2

#define set_count 10

#include<stdio.h>

#include<stdlib.h>

#include<time.h>

void Initboard(char mine[ROWS][COLS],int rows,int cols,char set);//初始化

void Displayboard(char mine[ROWS][COLS],int row,int col);//打印棋盘

void setboard(char mine[ROWS][COLS],int row,int col);//布置雷

void playmineboard(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col);//扫雷

game.c

//游戏实现

#include"game.h"

初始化棋盘

void Initboard(char mine[ROWS][COLS],int rows,int cols,char set)
{
int i=0;
int j=0;
for(i=0;i<rows;i++)
{
for(j=0;j<cols;j++)
{
mine[i][j]=set;
}
}
}

打印棋盘

void Displayboard(char mine[ROWS][COLS],int row,int col)
{
int i=0;
int j=0;
for(i=0;i<=col;i++)
{
printf("%d ",i);
}
printf("\n");
for(i=1;i<=row;i++)
{
printf("%d ",i);
for(j=1;j<=col;j++)
{
printf("%c ",mine[i][j]);
}
printf("\n");
}
}

布置雷

void setboard(char mine[ROWS][COLS],int row,int col)
{
int x=0;
int y=0;
int count=set_count;
while(count)
{
x=rand()%row+1;
y=rand()%col+1;
if(mine[x][y]=='0')
{
{
mine[x][y]='1';
count--;
}
}
}
}

判断坐标周围雷的数量

int set_mine_count(char mine[ROWS][COLS],int x,int y)
{
return mine[x][y-1]+
mine[x-1][y-1]+
mine[x-1][y]+
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 playmineboard(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{
int rmp=row*col-set_count;
int x=0;
int y=0;
int count=0;
while(1)
{
printf("请输入坐标>:");
scanf("%d%d",&x,&y);
if(x>0&&x<=row&&y>0&&y<=col)
{
if(mine[x][y]=='0')
{


int count=set_mine_count(mine,x,y);
show[x][y]=count+'0';

                       Displayboard(show,ROW,COL);
}
else
{
printf("很不幸,你被炸死了\n");
Displayboard(mine,ROW,COL);
break;
}
}
else
{
printf("输入坐标非法,请重新输入\n");
}
if(count==rmp)
{
printf("恭喜你,扫雷成功\n");
break;
}
}
}

test.c

//主程序

#define _CRT_SECURE_NO_WARNINGS 1

#include"game.h"

具体实现步骤

void game()
{
char mine[ROWS][COLS]={0};//创建数组
char show[ROWS][COLS]={0};
Initboard(mine,ROWS,COLS,'0');//初始化棋盘
Initboard(show,ROWS,COLS,'*');
//Displayboard(mine,ROW,COL);//打印棋盘
Displayboard(show,ROW,COL);
setboard(mine,ROW,COL);//布置雷
//Displayboard(mine,ROW,COL);
playmineboard(mine,show,ROW,COL);//扫雷
}

创建一个菜单

void menu()
{
printf("*********************************************\n");
printf("*********** 1. play ***************\n");
printf("*********** 0. exlt ***************\n");
printf("*********************************************\n");
}

主程序

void test()
{
int input=0;
do
{
menu();
printf("请输入\n");
scanf("%d",&input);
switch(input)
{
case 1:
{
game();
break;
}
case 0:
{
printf("退出游戏\n");
break;
}
default :
{
printf("输入数字不合法,请重新输入\n");
break;
}
}
}while(input);
}