有趣且简单的扫雷游戏

首先头文件跟定义的值

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define sl 10

#define ROW 9

#define COL 9

#define ROWs ROW+2

#define COLs COL+2

 然后就是主函数部分

int main()
{
    int input;
    srand((unsigned int)time(NULL));
    do
    {
        menu();
        printf("QWQ请做出您的选择QWQ:");
        scanf("%d",&input);
        switch(input)
        {
            case 1:
                game();
                break;
            case 0:
                printf("退出游戏,去打瓦洛兰特咯\n");
                break;
            default:
                printf("选择错误,请重新选择");
                break; 
         } 
    }while(input);
    return 0;

接着就是menu函数作为游戏公屏

void menu()
{
    printf("*********************\n");
    printf("*****1.PLAY *****\n");
    printf("*****2.EXIT *****\n");
    printf("*********************\n");
}

game函数内包含initboard函数display函数setbz函数findbz函数

void game()
{
    char bz[ROWs][COLs];//存放布置好的雷
    char pc[ROWs][COLs];//存放排查好的雷
    //将棋盘初始化 
    initboard(bz,ROWs,COLs,'0');
    initboard(pc,ROWs,COLs,'*');
    //打印棋盘
    displayboard(pc,ROW,COL);
    //布置雷的摆放
    setbz(bz,ROW,COL);
    //排查雷 
    findbz(bz,pc,ROW,COL); 
}

具体的函数内容(其中有getbzboard函数得到坐标周围雷的个数的函数)

//初始化棋盘函数
void initboard(char board[ROWs][COLs],int rows,int cols,char set)
{
    int i=0;
    for( i=0;i<rows;i++)
    {
        int j=0;
        for(j=0;j<cols;j++)
        {
            board[i][j]=set;
        }
    }
 } 
 //打印棋盘函数
 void displayboard(char board[ROWs][COLs],int row,int col)
 {
     int i=0;
     printf("---欢迎来到扫雷游戏---\n");
     for(i=0;i<=col;i++)
     {
         printf("%d ",i);
     }
     printf("\n");
     for(i=1;i<=row;i++)
     {
         printf("%d ",i);
         int j;
         for(j=1;j<=col;j++)
         {
             printf("%c ",board[i][j]);
         }
         printf("\n");
     }
  } 
  //布置雷函数
  void setbz(char board[ROWs][COLs],int row,int col)
  {
      //随机布置十个雷
      int count=sl;
      while(count)
      {
          int x=rand()%row+1;//从1-10中随机一个数
        int y=rand()%col+1;//同理
        if(board[x][y]=='0')
        {
            board[x][y]='1';
            count--;//表示布置好一个雷了 
         } 
       } 
   } 
   //返回所查询位置周围雷的数量
  int getbzcount(char bz[ROWs][COLs],int x,int y)
  {
      return(bz[x-1][y]+bz[x-1][y-1]+bz[x][y - 1]+bz[x+1][y-1]+bz[x+1][y]+ 
        bz[x+1][y+1]+bz[x][y+1]+bz[x-1][y+1] - 8 * '0');
   } 
   //排查雷函数
   void  findbz(char bz[ROWs][COLs],char pc[ROWs][COLs],int row,int col)
   {
       int x=0;
       int y=0;
       int win=0;
       while(win<row*col-sl)//可排查的次数为棋盘的大小-雷数 
    {
       printf("请输入要排查的坐标:");
       scanf("%d %d",&x,&y);
       if(x>=1&&x<=row&&y>=1&&y<=col)
       {
           if(bz[x][y]=='1')
           {
               printf("BOOM,你被炸死了\n");
               displayboard(bz,ROW,COL);
               break;
           }
           else
           {
               //统计该位置周围雷的个数
               int count=getbzcount(bz,x,y);
               pc[x][y]=count+'0';
               displayboard(pc,ROW,COL);
               win++;//排查次数-1 
           }
        } 
        else
        {
            printf("输入坐标不正确,请重新输入");
        }
       }
       if(win==row*col-sl)
       {
           printf("恭喜你,成功了,可以买彩票了\n");
           displayboard(bz,ROW,COL);
       }
   }

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值