c++实现扫雷小游戏代码分享

 更新时间:2022年02月22日 11:23:58   作者:LazyEveryday  
这篇文章主要介绍了c++实现扫雷小游戏并附上代码分享,代码不能够实现当所查坐标周围雷的数量为0时,直接展开周围坐标,但有一点的知识性参考价值,需要的小伙伴可以参考一下

分成两个源文件和一个头文件

注意:这串代码并不完整,不能够实现当所查坐标周围雷的数量为0时,直接展开周围坐标;

头文件:game.h

#include <stdio.h>


#define count 10 //雷的数量

//定义 行-ROW,列-COL
#define ROW 9
#define COL 9
#define ROWS ROW+2 //多加一些,方便代码
#define COLS COL+2

//初始化棋盘,声明的函数均在game.c中实现
void InitBoard(char board[ROWS][COLS],int rows,int cols);

//打印棋盘
void DisplayBoard(char board[ROW][COL],int row.int col);

//布置雷
void SetMine(char board[ROW][COLS],int row,int col);

//找雷
void FindMine(char mine[][COLS],char show[][COLS],int row,int col);

第一个源文件:saolei.c

#include "game.h"  //需要包含和声明的东西在game.h中完成

void menu()
{ 
  printf("                  \n");
  printf("       1.play     \n");
  printf("       0.exit     \n");
  printf("                  \n");
}

void game()
{ 
  // ROW and COL 在game.h中定义
  char mine[ROWS][COLS];  // 地雷埋藏的棋盘
  char show[ROWS][COLS];  // 展示出的棋盘
  //初始化棋盘
  //game()中的函数在game.h中声明,在game.c中实现
  InitBoard(mine,ROWS,COLS,'0');   //0代表无雷,1代表有雷
  InitBOard(show,ROWS,COLS,'*');
  //打印棋盘
  DisplayBoard(show,ROW,COL);
  //布置雷
  SetMine(mine,ROW,COL);
  //找雷
  FindMine(mine,show,ROW,COL);
  
}


int main()
{
  srand((unsigned int) time(NULL));//生成随机数
  int input = 0;
  do              //do-while循环
  {
    menu();    //(1--play   0--exit)也是do-while循环的条件
    printf("请选择:");
    scanf("%d",&input);
    switch(input)
    { 
    case 1:
        printf("开始游戏\n");
        game();
        break;
     case 0:
        printf("退出游戏");
        break;
     default:   
        printf("选择错误,请重新输入");
        break;
    }
  }while(input)
  
  return 0;
}

第二个源文件:game.c

#include "game.h"

void InitBoard(char board[ROWS][COLS],int rows,int cols,char set)
{
  int i = 0;
  int j = 0;
  for(i = 0;i < rows;i++)
  {
    for(j = 0;j < cols;j++)
    {
      board[i][j] = set;
    }
  }
  
}

void DisplayBoard(char board[ROWS][COLS],int row,int col)
{
  int i = 0;
  int j = 0;
  for(i = 0;i <= row;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 SetMine(char board[ROW][COL],int row,int col)
{
  int x = 0;
  int y = 0;
  while(count) //count-雷的数量
  {
    x = rand()%row + 1;//因为在1-row中布置雷,边缘一排不用,最后为了记录
    y = rand()%col + 1;//周围雷的数量方便,同时代码方便
    if( board[x][y] == '0')
    {
      board[x][y] = '1';
      count--;
    }
  }
}

//算出周围雷的个数
int get_mine_count(mine[ROWS][COLS],int row,int col)
{
  int i = 0;
  int j = 0;
  int mine_count = 0;
  for( i = -1;i <= 1; i++ )
  {
    for( j = -1;j <= 1; j++ )
    {
      if( mine[i][j] == '1')
      {
        mine_count++;
      }
    }
  }
  return mine_count;
}

void FindMine(char mine[][COLS],char show[][COLS],int row,int col)
{
  int x = 0;
  int y = 0;
  int ret = 0;//已经查找过的位置的数量
  while(ret < row * col - count)//当还剩下count的数量时,赢得游戏
  { 
    printf("请输入查找位置下标:");
    scanf("%d%d",&x,&y);
    if(x >= 1 && x <= row && y >= 1 && y <= col)
    {
      if(mine[x][y] == '0')
      {
        //当所查坐标的位置不是雷时,将该坐标展示成周围雷的个数
        int c = get_mine_count(mine,ROW,COL);
        mine[x][y] = c + '0';//返回值为int型,数组为char型,因此+'0'
        ret++;
        DisplayBoard(show,ROW,COL);
      }
      else
      {
        printf("YOU LOSE\n");
        break;
      }
    }
    else
    {
      printf("输入非法,请重新输入\n");
    }
  }
  printf("VICTORY\n");  //获得胜利
}

到此这篇关于c++实现扫雷小游戏代码分享的文章就介绍到这了,更多相关c++实现扫雷小游戏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 快速入门的一些C\C++书籍

    快速入门的一些C\C++书籍

    这篇文章为大家精心推荐了一些快速入门的一些C\C++书籍,希望大家可以喜欢,对这门语言可以产生兴趣,需要的朋友可以参考下
    2015-12-12
  • C语言如何把浮点数转换为字符串

    C语言如何把浮点数转换为字符串

    这篇文章主要介绍了C语言如何把浮点数转换为字符串方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • C++中VTK9.3.0刻度标签重叠的问题记录

    C++中VTK9.3.0刻度标签重叠的问题记录

    这篇文章主要介绍了C++中VTK9.3.0刻度标签重叠的问题,本文采用VTK9.3.0版本,其他版本如VKT8.0亦有同样的问题,需要的朋友可以参考下
    2024-06-06
  • C++中友元的实例详解

    C++中友元的实例详解

    这篇文章主要介绍了C++中友元的实例详解的相关资料,希望通过本文大家能掌握友元的使用方法,需要的朋友可以参考下
    2017-09-09
  • C++卸载程序功能示例

    C++卸载程序功能示例

    用C++写一个自己的卸载程序来完成程序的卸载工作,同时运行后要删除卸载程序本身,并删除卸载程序所在的文件夹
    2013-11-11
  • C++修炼之拷贝构造函数

    C++修炼之拷贝构造函数

    这篇文章主要内容是6个默认成员函数之一的拷贝构造函数的认识与学习,让同学们充分理解浅拷贝与深拷贝,感兴趣的小伙伴可以参考阅读
    2023-04-04
  • C语言超详细文件操作基础下篇

    C语言超详细文件操作基础下篇

    这篇文章主要为大家详细介绍了C语言的文件操作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • C++ 实现线程安全的频率限制器(推荐)

    C++ 实现线程安全的频率限制器(推荐)

    这篇文章主要介绍了在 C++ 中实现一个线程安全的频率限制器,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 深入探索C++中stack和queue的底层实现

    深入探索C++中stack和queue的底层实现

    这篇文章主要介绍了C++中的stack和dequeue的底层实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • 四个例子说明C语言 全局变量

    四个例子说明C语言 全局变量

    这篇文章主要介绍了四个例子说明C语言 全局变量,全局变量是C语言语法和语义中一个很重要的知识点,首先它的存在意义需要从三个不同角度去理解,下面来看看这三个不同的内容分别是什么吧
    2022-04-04

最新评论