引言:
不知道大家是否发现大多数的游戏,实现都有大致相同步骤,首先是游戏的入口,通常我们都是以菜单的形式去引导玩家去进入游戏,其次是游戏的主题内容,考虑到大多数的游戏都有多次运行的要求,所以循环在游戏中理所应当是个常客,当然也有很多其他的要求。接下来,让我们看看猜数字游戏是如何实现的呢。
一:游戏的规则:
1:菜单的选择。
2:输入你想查看的坐标。
3:程序会判断你是否猜中雷,如果猜中提示游戏结束,如果没有系统计算并提示此坐标周围雷的个数。
4:玩家把雷全部扫出(找到所有没有雷的坐标),游戏结束。
二:实现构思:
1:菜单的打印,引导玩家
2:设置系统分析,游戏的进行与否
3:棋盘的设置及初始化
4:棋盘及坐标的打印
5:雷的随机布置
6:坐标输入,及对雷排查的实现
三:实现过程:
1:菜单的打印:
void menu()
{
printf("-------------扫雷游戏-----------------\n");
printf("-----输入:1,开始游戏----------------\n");
printf("-----输入:0,退出游戏----------------\n");
}
2:设置系统分析,游戏的进行与否:
int main()
{
int input=0;
do
{
menu();
printf("请输入数字:\n”);
scanf("%d",&input);
switch(input)
{
case 1:
printf("开始游戏\n");
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入:\n");
}
return 0;
}
4:棋盘及坐标的,定义,初始化和打印:
首先在test.c文件中定义两个数组:
void game()
{
char mine [ROWS][COLS];
char show [ROWS][COLS];
}
为了让游戏更具可伸展性,我们引入了 行ROWS和列 COLS,需要在game.h中定义,然后在test.c中加上#include"game.h"即可
#define ROW 9
#define COL 9
# define ROWS ROW+2
#define COLS COL+2
初始化棋盘:
test.c中:
Initboard (mine ,ROWS,COLS,'0');
Initboard (show,ROWS,COLS,'*');
game.h中:
void(char board[ROWS][COLS],int rows,int cols,char set);
game.c中:
void(char board[ROWS][COLS],int rows,int cols,char set)
{
int i,j=0;
for(i=0;i<rows;i++)
{
for(j=0;j<cols;j++)
{
printf("%c",set);
}
}
棋盘的打印:
test.c中:
Displayboard(board,ROWS,COLS);
game.h中 :
Displayboard(char board[ROWS][COLS],int row,int col)
game.c中:
5:雷的随机布置:
test.c中:
Setmine(mine,ROWS,COLS)
记得在main函数中引入srand((unsigned int) time(NULL));
以及包含的头文件 #include<stdlib.h>
#include<time.h>
game.h中:
#define EASY_COUNT 10;
Setmine (char mine[ROWS][COLS],int row,int col);
game.c中
void Setmine(char mine [ROWS][COLS],int row,int col)
{
int a= rand()%row+1;
int b=rand()%col+1;
int count =EASY_COUNT
while(count)
{
if(mine[a][b]=='0')
{
mine [a][b]='1';
count--;
}
}
}
6,坐标的输入,对雷排查的实现:
test.c中:
Findmine(mine,ROWS,COLS)
Findmine(show,ROWS,COLS)
game.h中:
void Findmine(char mine[ROWS][COLS],int row,int col)
void Finemine(char show[ROWS][COLS],int row,int col)
game.c中
void Findmine(char mine[ROWS][COLS],char show[ROWS][COLS],int row,int col)
{
int x,y=0;
printf("开始游戏\n");
int win=0;
do
{
printf("请输入你要排查的坐标:< \n");
scanf("%d %d ",&x,&y);
while(win==row*col-EASY_COUNT)
{
if(x>0&&x<=row&&y>0&&y<=col)
{
if(mine[x][y]=='1')
{
printf("太遗憾了,你被炸死了\n");
Displayboard(mine,ROWS,COLS);
break;
}
else if
{
show[x][y]=Getminecount(mine,x,y);
Displayboard(show,ROWS,COLS);
win++;
}
}
else
{
printf("坐标非法,请重新输入:\n);
}
}
if(win==row*col-EASY_COUNT)
{
printf("恭喜你,完成扫雷游戏\n");
int Getminecount(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];
}