以下是关于扫雷游戏的代码,有什么问题还请大神们指教。
头文件game.h
#ifndef __GAME_H__
#define __GAME_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#define COUNT 10//你布下的雷数
#define COL 9
#define ROW 9
#define COLS COL+2
#define ROWS COL+2
void init_board(char board[ROWS][COLS],char set, int row, int col);
void display_board(char board[ROWS][COLS], int row, int col);
void set_mine(char mine[ROWS][COLS]);
int get_mine_count(char mine[ROWS][COLS], int x, int y);
#endif
源文件game.c
#include"game.h"
void init_board(char board[ROWS][COLS],char set, int row, int col)
{
memset(board,set,row*col*sizeof(board[0][0]));
}
void display_board(char board[ROWS][COLS],int row,int col)
{
int i = 0;
int j = 0;
printf(" ");
for(i=1;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 ",board[i][j]);
}
printf("\n");
}
}
void set_mine(char mine[ROWS][COLS])
{
int x = 0;
int y = 0;
int count = COUNT;
while(count>0)
{
x=rand()%ROW+1;
y=rand()%COL+1;
if(mine[x][y]=='0')
{
mine[x][y]='1';
count--;
}
}
}
get_mine_count(char mine[ROWS][COLS], int x, int y)
{
return mine[x-1][y-1]+ mine[x-1][y]+ mine[x-1][y+1]+ mine[x][y-1]+ mine[x][y+1]+ mine[x+1][y-1]+ mine[x+1][y]+ mine[x+1][y+1]-8*'0';
}
测试模块test.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include"game.h"
void game()
{
char mine[ROWS][COLS]={0};//雷的信息
char show[ROWS][COLS]={0};//排出雷的信息
int x = 0;
int y = 0;
int win = 0;
init_board(mine,'0',ROWS,COLS);
init_board(show,'*',ROWS,COLS);
set_mine(mine);
display_board(mine,ROW,COL);
while(win<ROW*COL-COUNT)
{
printf("输入你排查的坐标\n");
scanf_s("%d%d",&x,&y);
if(((x>=1)&&(x<=9))&&((y>=1)&&(y<=9)))
{
if(mine[x][y]=='1')
printf("game over\n");
else
{
int count=get_mine_count(mine,x,y);
show[x][y]=count+'0';
win++;
display_board(show,ROW,COL);
}
}
else
printf("坐标非法\n");
if(win==ROW*COL-COUNT)//判断雷是否已排完
printf("排雷成功\n");
}
}
void menu()
{
printf("1.play\n");
printf("2.exit\n");
}
void test()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请选择\n");
scanf_s("%d",&input);
switch(input)
{
case 1:
game();
break;
case 2:
break;
default:
printf("选择错误\n");
break;
}
}
while(input);
}
int main()
{
test();
return 0;
}