服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - c++实现扫雷小游戏代码分享

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

2022-09-28 18:05LazyEveryday C/C++

这篇文章主要介绍了c++实现扫雷小游戏并附上代码分享,代码不能够实现当所查坐标周围雷的数量为0时,直接展开周围坐标,但有一点的知识性参考价值,需要的小伙伴可以参考一下

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

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

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

头文件:game.h

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#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++实现扫雷小游戏内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.51cto.com/u_15500997/5026371

延伸 · 阅读

精彩推荐
  • C/C++c语言程序调试方法整理

    c语言程序调试方法整理

    在本篇文章里小编给大家正里的是关于c语言程序调试方法整理内容,需要的朋友们可以学习下。...

    angryTom11262021-08-20
  • C/C++关于C++STL string类的介绍及模拟实现

    关于C++STL string类的介绍及模拟实现

    这篇文章主要介绍了关于C++STL string类的介绍及模拟实现的相关资料,需要的朋友可以参考下面具体的文章内容...

    世_生6202021-12-31
  • C/C++C语言 一级指针与二级指针详细介绍

    C语言 一级指针与二级指针详细介绍

    这篇文章主要介绍了C语言 一级指针与二级指针详细介绍的相关资料,需要的朋友可以参考下...

    一米王子3912021-04-18
  • C/C++快速了解Boost.Asio 的多线程模型

    快速了解Boost.Asio 的多线程模型

    这篇文章主要介绍了Boost.Asio 的多线程模型的相关知识,文中代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...

    Boblim7802021-09-09
  • C/C++C/C++获取目录下的文件列表信息

    C/C++获取目录下的文件列表信息

    在C/C++编程时,需要获取目录下面的文件列表信息,下面把代码分享一下...

    C语言程序设计11122021-01-15
  • C/C++C++/Php/Python 语言执行shell命令的方法(推荐)

    C++/Php/Python 语言执行shell命令的方法(推荐)

    下面小编就为大家带来一篇C++/Php/Python 语言执行shell命令的方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看...

    aizhan11092021-05-06
  • C/C++浅谈Qt信号与槽的各种连接方式

    浅谈Qt信号与槽的各种连接方式

    信号和槽是Qt特有的信息传输机制,本文主要介绍了浅谈Qt信号与槽的各种连接方式,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小...

    lucky-billy9292021-12-27
  • C/C++详解CLion配置openMP的方法

    详解CLion配置openMP的方法

    这篇文章主要介绍了CLion配置openMP的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    古人诚不我欺9282021-10-22