广告位联系
返回顶部
分享到

c++实现扫雷小游戏的代码

C#教程 来源:互联网 作者:秩名 发布时间:2022-02-22 14:10:08 人浏览
摘要

分成两个源文件和一个头文件 注意:这串代码并不完整,不能够实现当所查坐标周围雷的数量为0时,直接展开周围坐标; 头文件:game.h 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #i

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

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

头文件: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

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");  //获得胜利

}


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.51cto.com/u_15500997/5026371
相关文章
  • WPF实现窗体亚克力效果的代码

    WPF实现窗体亚克力效果的代码
    WPF 窗体设置亚克力效果 框架使用大于等于.NET40。 Visual Studio 2022。 项目使用MIT开源许可协议。 WindowAcrylicBlur设置亚克力颜色。 Opacity设置透
  • C#非托管泄漏中HEAP_ENTRY的Size对不上解析

    C#非托管泄漏中HEAP_ENTRY的Size对不上解析
    一:背景 1. 讲故事 前段时间有位朋友在分析他的非托管泄漏时,发现NT堆的_HEAP_ENTRY的 Size 和!heap命令中的 Size 对不上,来咨询是怎么回事?
  • C#中ArrayList 类的使用介绍
    一:ArrayList 类简单说明 动态数组ArrayList类在System.Collecions的命名空间下,所以使用时要加入System.Collecions命名空间,而且ArrayList提供添加,
  • C#使用BinaryFormatter类、ISerializable接口、XmlSeriali

    C#使用BinaryFormatter类、ISerializable接口、XmlSeriali
    序列化是将对象转换成字节流的过程,反序列化是把字节流转换成对象的过程。对象一旦被序列化,就可以把对象状态保存到硬盘的某个位
  • C#序列化与反序列化集合对象并进行版本控制
    当涉及到跨进程甚至是跨域传输数据的时候,我们需要把对象序列化和反序列化。 首先可以使用Serializable特性。 1 2 3 4 5 6 7 8 9 10 11 12 13 14
  • C#事件中关于sender的用法解读

    C#事件中关于sender的用法解读
    C#事件sender的小用法 开WPF新坑了,看了WPF的炫酷界面,再看看winForm实在是有些惨不忍睹(逃)。后面会开始写一些短的学习笔记。 一、什么
  • 在C#程序中注入恶意DLL的方法

    在C#程序中注入恶意DLL的方法
    一、背景 前段时间在训练营上课的时候就有朋友提到一个问题,为什么 Windbg 附加到 C# 程序后,程序就处于中断状态了?它到底是如何实现
  • 基于C#实现一个简单的FTP操作工具
    实现功能 实现使用FTP上传、下载、重命名、刷新、删除功能 开发环境 开发工具: Visual Studio 2013 .NET Framework版本:4.5 实现代码 1 2 3 4 5 6 7
  • C#仿QQ实现简单的截图功能

    C#仿QQ实现简单的截图功能
    接上一篇写的截取电脑屏幕,我们在原来的基础上加一个选择区域的功能,实现自定义选择截图。 个人比较懒,上一篇的代码就不重新设计
  • C#实现线性查找算法的介绍
    线性查找,肯定是以线性的方式,在集合或数组中查找某个元素。 通过代码来理解线性查找 什么叫线性?还是在代码中体会吧。 首先需要一
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计