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);
}
-----------------------------------