扫雷游戏,大家都知道,相信都有一定的了解,规则就不多说了,下面看代码,我尽量的写清楚,写详细。
用 VS2008写的
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<=cols; 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');
}
text.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);
while(win<COLS*ROWS-DEFAULT_COUNT)
{
printf("请输入坐标:>");
display(mine,ROWS,COLS);
if(mine[x][y] == '1')
{
printf("很抱歉你被炸死了\n");
display(mine,ROWS,COLS);
}
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;
}
三个文件的放置
运行的结果: