扫雷游戏的实现

引言:

  不知道大家是否发现大多数的游戏,实现都有大致相同步骤,首先是游戏的入口,通常我们都是以菜单的形式去引导玩家去进入游戏,其次是游戏的主题内容,考虑到大多数的游戏都有多次运行的要求,所以循环在游戏中理所应当是个常客,当然也有很多其他的要求。接下来,让我们看看猜数字游戏是如何实现的呢。

一:游戏的规则:

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];
}

快去尝试写出你的扫雷游戏吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值