扫雷源程序如下;分为3部分,game.h文件里放着所用的头文件,自己定义的头文件,以及实现函数的声明部分;game.c文件里放的是具体函数的实现,tset.c文件里放的是扫雷程序的主逻辑,框架,具体看下面:
game2.h 文件
#ifndef __GAME_H__
#define __GAME_H__
#define DEFAULT_COUNT 30// 设置30颗雷
#define ROWS 10
#define COLS 10
void display(char arr[ROWS+2][COLS+2],int rows,int cols);
void set_mine(char arr[ROWS+2][COLS+2],int rows,int cols);
int get_mine_count(char arr[ROWS+2][COLS+2],int x,int y); //函数的声明
#endif //__GAME__H__
game2.c文件
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include "game2.h"
void display(char arr[ROWS+2][COLS+2],int rows,int cols)
{
int i = 0;
int j = 0;
printf(" ");
for(i=1; i<=rows; i++)
{
printf("%d ",i);
}
printf("\n");
for(i=1; i<=rows; i++)
{
printf("%2d",i);
for(j=1; j<=cols; j++)
{
printf(" %c",arr[i][j]);
}
printf("\n");
}
}
int get_rand_num()
{
return rand()%10+1;
}
void set_mine(char arr[ROWS+2][COLS+2],int rows,int cols)
{
int count=DEFAULT_COUNT;
while(count)
{
int x = get_rand_num();
int y = get_rand_num();
if(arr[x][y] == '0')
{
arr[x][y] = '1';
count--;
}
}
}
int get_mine_count(char arr[ROWS+2][COLS+2],int x,int y)
{
return(arr[x-1][y-1]-'0'+
arr[x][y-1]-'0' +
arr[x+1][y-1]-'0'+
arr[x+1][y]-'0' +
arr[x+1][y+1]-'0'+
arr[x][y+1]-'0' +
arr[x-1][y+1]-'0'+
arr[x-1][y]-'0');
}
test.c文件
#include<stdio.h>
#include<string.h>
#include<time.h>
#include "game2.h"
#include<stdlib.h>
void menu()
{
printf("****************************\n");
printf("******** 1.play ********\n");
printf("******** 0.exit ********\n");
printf("****************************\n");
}
enum Option
{
EXIT,
PLAY
};
void game()
{
int win=0;
int x = 0;
int y = 0;
char mine[ROWS+2][COLS+2]={0};
char show[ROWS+2][COLS+2]={0};
srand((unsigned int)time(NULL));
memset(mine,'0',sizeof(char)*(ROWS+2)*(COLS+2));
memset(show,'*',sizeof(char)*(ROWS+2)*(COLS+2));
display(show,ROWS,COLS);
set_mine(mine,ROWS,COLS);
display(mine,ROWS,COLS);
while(win<COLS*ROWS-DEFAULT_COUNT)
{
printf("请输入坐标:>");
scanf("%d%d",&x,&y);
if(mine[x][y] == '1')
{
printf("很抱歉你被炸死了\n");
break;
}
else
{
int count = 0;
win++;
count = get_mine_count(mine,x,y);
show[x][y]=count + '0';
display(show,ROWS,COLS);
}
}
if(win>=COLS*ROWS-DEFAULT_COUNT)
{
printf("排雷成功\n");
}
}
int main()
{
int input=0;
do
{
menu();
printf("请选择>:");
scanf("%d",&input);
switch(input)
{
case PLAY:
game();
break;
case EXIT:
break;
default:
printf("选择错误,请重新选择!!!\n");
break;
}
}while(input);
return 0;
}