<pre name="code" class="objc">#ifndef __MINE_H__
#define __MINE_H__
#define LINES 11 // 棋盘的行
#define ROWS 11 // 棋盘的列
#define mine_MAX 10 // 雷的数目
#define EAXY 3 // 简单显示的范围
#define COMMON 2 // 普通显示的范围
#define DIFFICULT 1 // 困难显示的范围
enum op
{
EXIT,
PLAY
};
void game(char mine[LINES][ROWS],char text[LINES][ROWS],int lines,int rows); //游戏基本实现函数
void init_mine(char mine[LINES][ROWS],char text[LINES][ROWS],int lines,int rows);// 初始化棋盘函数
void play_EAXY_game(char mine[LINES][ROWS],char text[LINES][ROWS]); // 简单游戏函数
void play_COMMON_game(char mine[LINES][ROWS],char text[LINES][ROWS]) ; //普通游戏函数
void play_DIFFICULT_game(char mine[LINES][ROWS],char text[LINES][ROWS]) ; //困难游戏函数
void mine_EAXY_sweep(char mine[LINES][ROWS],char text[LINES][ROWS]); //简单扫雷实现
void mine_COMMON_sweep(char mine[LINES][ROWS],char text[LINES][ROWS]); //普通扫雷实现
void mine_DIFFICULT_sweep(char mine[LINES][ROWS],char text[LINES][ROWS]) ; //困难扫雷实现
void print(char tab[LINES][ROWS]); //打印棋盘
#endif
#include<stdio.h>
#include"mine.h"
#include<stdlib.h>
#include<time.h>
void init_mine(char mine[LINES][ROWS],char text[LINES][ROWS],int lines,int rows) //初始化显示棋盘和雷盘
{
int i;
int j;
int a;
int b;
int count=0;
for(i=1; i<LINES-1;i++) //初始化显示棋盘
{
for(j=1; j<ROWS-1;j++)
{
text[i][j]='*';
}
}
for(i=1; i<LINES-1;i++) //初始化雷盘
{
for(j=1; j<ROWS-1;j++)
{
mine[i][j]='1';
}
}
srand((unsigned)time(NULL)); //随机产生两个数
while(count<mine_MAX)
{
a = rand()%9 + 1;
b = rand()%9 + 1;
if(mine[a][b]!='0')
{
mine[a][b]='0'; //定义雷为字符 0
count++;
}
}
}
void print(char tab[LINES][ROWS]) //打印棋盘函数
{
int i; //行
int j; //列
for(i=0;i<LINES-1;i++) //定义第一行的打印
{
printf("%d ",i);
}
printf("\n");
for(i=1; i<LINES-1;i++) //输出棋盘
{
printf("%d",i);
printf("%c",'|');
for(j=1; j<ROWS;j++)
{
printf("%c ",tab[i][j]);
}
printf("\n");
}
}
void mine_EAXY_sweep(char mine[LINES][ROWS],char text[LINES][ROWS]) //简单整个游戏进程
{
int a;
int b;
int count = 0; // 雷的个数
do //是否将雷全部扫完
{
int i;
int j;
int x;
int y;
print(text);
print(mine);
flag: printf("请输入坐标=》");
scanf("%d %d",&a,&b);
if(a>(LINES-2) || a<0 || b<0 || b>(ROWS-2) || text[a][b]!='*')
{
printf("输入不合法!\n");
goto flag;
}
else
if(mine[a][b]=='0') //判断是否触雷
{
printf("您踩雷了!\n");
break;
}
else
{
for(i=(a-EAXY);i<=(a+EAXY);i++)
{
for(j=(b-EAXY);j<=(b+EAXY);j++)
{
if(mine[i][j]=='1')
{
int x=0; //周围雷的数量
if(mine[i-1][j-1]=='0')
{
x++;
}
if(mine[i-1][j]=='0')
{
x++;
}
if(mine[i-1][j+1]=='0')
{
x++;
}
if(mine[i][j-1]=='0')
{
x++;
}
if(mine[i][j+1]=='0')
{
x++;
}
if(mine[i+1][j-1]=='0')
{
x++;
}
if(mine[i+1][j]=='0')
{
x++;
}
if(mine[i+1][j+1]=='0')
{
x++;
}
text[i][j]=(x+'0');
}
}
}
}
for(x=1;x<=(LINES-2);x++)
{
for(y=1;y<=(ROWS-2);y++)
{
if(text[x][y]=='*')
count++;
}
}
}while(count>mine_MAX);
if(count==mine_MAX)
{
printf("恭喜你 扫雷成功!\n");
}
}
void mine_COMMON_sweep(char mine[LINES][ROWS],char text[LINES][ROWS]) //普通整个游戏进程
{
int a;
int b;
int count;
do //是否将雷全部扫完
{
int i;
int j;
int x;
int y;
count = 0; // 雷的个数
print(text);
print(mine);
flag: printf("请输入坐标=》");
scanf("%d %d",&a,&b);
if(a>(LINES-2) || a<0 || b<0 || b>(ROWS-2) || text[a][b]!='*')
{
printf("输入不合法!\n");
goto flag;
}
else
if(mine[a][b]=='0') //判断是否触雷
{
printf("您踩雷了!\n");
break;
}
else
{
for(i=(a-COMMON);i<=(a+COMMON);i++)
{
for(j=(b-COMMON);j<=(b+COMMON);j++)
{
if(mine[i][j]=='1')
{
int x=0; //周围雷的数量
if(mine[i-1][j-1]=='0')
{
x++;
}
if(mine[i-1][j]=='0')
{
x++;
}
if(mine[i-1][j+1]=='0')
{
x++;
}
if(mine[i][j-1]=='0')
{
x++;
}
if(mine[i][j+1]=='0')
{
x++;
}
if(mine[i+1][j-1]=='0')
{
x++;
}
if(mine[i+1][j]=='0')
{
x++;
}
if(mine[i+1][j+1]=='0')
{
x++;
}
text[i][j]=(x+'0');
}
}
}
print(text);
}
for(x=1;x<=(LINES-2);x++)
{
for(y=1;y<=(ROWS-2);y++)
{
if(text[x][y]=='*')
count++;
}
}
}while(count>mine_MAX);
if(count==mine_MAX)
{
printf("恭喜你 扫雷成功!\n");
}
}
void mine_DIFFICULT_sweep(char mine[LINES][ROWS],char text[LINES][ROWS]) //困难整个游戏进程
{
int a;
int b;
int count ; // 雷的个数
do //是否将雷全部扫完
{
int i;
int j;
int x;
int y;
count = 0;
print(text);
print(mine);
flag: printf("请输入坐标=》");
scanf("%d %d",&a,&b);
if(a>(LINES-2) || a<0 || b<0 || b>(ROWS-2) || text[a][b]!='*')
{
printf("输入不合法!\n");
goto flag;
}
else
if(mine[a][b]=='0') //判断是否触雷
{
printf("您踩雷了!\n");
break;
}
else
{
for(i=(a-DIFFICULT);i<=(a+DIFFICULT);i++)
{
for(j=(b-DIFFICULT);j<=(b+DIFFICULT);j++)
{
if(mine[i][j]=='1')
{
int x=0; //周围雷的数量
if(mine[i-1][j-1]=='0')
{
x++;
}
if(mine[i-1][j]=='0')
{
x++;
}
if(mine[i-1][j+1]=='0')
{
x++;
}
if(mine[i][j-1]=='0')
{
x++;
}
if(mine[i][j+1]=='0')
{
x++;
}
if(mine[i+1][j-1]=='0')
{
x++;
}
if(mine[i+1][j]=='0')
{
x++;
}
if(mine[i+1][j+1]=='0')
{
x++;
}
text[i][j]=(x+'0');
}
}
}
print(text);
}
for(x=1;x<=(LINES-2);x++)
{
for(y=1;y<=(ROWS-2);y++)
{
if(text[x][y]=='*')
count++;
}
}
}while(count>mine_MAX);
if(count==mine_MAX)
{
printf("恭喜你 扫雷成功!\n");
}
}
#include<stdio.h>
#include"mine.h"
#include<time.h>
void emun()
{
printf("***********************\n");
printf("******* 1.play ******\n");
printf("******** 0.exit ******\n");
printf("***********************\n");
}
void emun_dift() //选择难度菜单
{
printf("*********************\n");
printf("****** 1.简单 *******\n");
printf("****** 2.普通 *******\n");
printf("****** 3.困难 *******\n");
printf("*********************\n");
}
void play_EAXY_game(char mine[LINES][ROWS],char text[LINES][ROWS]) //玩简单游戏
{
time_t t_start,t_end;
printf("计时开始!!\n");
t_start = time(NULL); //开始计时
mine_EAXY_sweep(mine,text);
t_end = time(NULL); //计时结束
printf("您所用时间为:%.0f \n",difftime(t_end,t_start));
}
void play_COMMON_game(char mine[LINES][ROWS],char text[LINES][ROWS]) //玩普通游戏
{
time_t t_start,t_end;
printf("计时开始!!\n");
t_start = time(NULL); //开始计时
mine_COMMON_sweep(mine,text);
t_end = time(NULL); //计时结束
printf("您所用时间为:%.0f \n",difftime(t_end,t_start));
}
void play_DIFFICULT_game(char mine[LINES][ROWS],char text[LINES][ROWS]) //玩困难游戏
{
time_t t_start,t_end;
printf("计时开始!!\n");
t_start = time(NULL); //开始计时
mine_DIFFICULT_sweep(mine,text);
t_end = time(NULL); //计时结束
printf("您所用时间为:%.0f \n",difftime(t_end,t_start));
}
void game()
{
int input = 0;
int flout = 0;
char mine[LINES][ROWS]={0}; //定义雷盘
char text[LINES][ROWS]={0}; //定义显示盘
init_mine(mine,text,LINES,ROWS); //初始化雷盘
do
{
emun();
init_mine(mine,text,LINES,ROWS); //初始化雷盘
printf("请选择=》");
scanf("%d",&input);
switch(input)
{
case PLAY:
{
emun_dift();
printf("请选择=》");
scanf("%d",&flout);
switch(flout)
{
case 1:
play_EAXY_game(mine,text);
break;
case 2:
play_COMMON_game(mine,text);
break;
case 3:
play_DIFFICULT_game(mine,text);
break;
}
}
break;
case EXIT:
break;
}
}while(input);
}
int main()
{
game();
return 0;
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有