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

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

服务器之家 - 编程语言 - C/C++ - C语言实现扫雷小游戏(适合初学者)

C语言实现扫雷小游戏(适合初学者)

2021-08-30 12:02IRON__MAN__ C/C++

这篇文章主要为大家详细介绍了C语言实现扫雷小游戏,适合初学者练习,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

扫雷小游戏作为初学c语言的小白有很大的帮助,其中用到了函数的定义,函数的声明,循环语句,数组思想等等知识,对于代码理解和设计代码思路有很大的帮助,本文就详细介绍了代码的各个步骤和运行结果。希望给到和我一样的小白一点帮助。

C语言实现扫雷小游戏(适合初学者)

  1. //game.h头文件
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<time.h>
  5. #define ROW 9//定义了界面的长宽,可以直更改ROW,COL的值,避免了程序中数字重复出现
  6. #define COL 9
  7. #define ROWS ROW+2
  8. #define COLS COL+2
  9. #define EASYCOUNT 10//定义了雷的个数,即游戏难度,也可以运用再测试时,比如在通关界面时,直接可以得到结果。
  10. //初始化扫雷棋盘
  11. void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);
  12. void DispalyBoard(char board[ROWS][COLS], int row, int col);
  13. void SetMine(char mine[ROWS][COLS], int row, int col);
  14. void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);
  15. //game.c
  16. #define _CRT_SECURE_NO_WARNINGS 1
  17. #include "game.h"
  18. void InitBoard(char board[ROWS][COLS], int rows, int cols,char set)//该函数的作用是为数组初始化,设计展示的界面
  19. {
  20. int i = 0;
  21. int j = 0;
  22. for (i = 0; i < rows; i++)
  23. {
  24. for (j = 0; j < cols; j++)
  25. {
  26. board[i][j] = set//set可以更改为各种字符,随你喜欢;
  27. }
  28. }
  29. }
  30. void DispalyBoard(char board[ROWS][COLS], int row, int col)//打印数组函数
  31. {
  32. int i = 0;
  33. int j = 0;
  34. for ( i = 0; i <=row; i++)
  35. {
  36. printf("%-2d", i);
  37. }
  38. printf("\n");
  39. for (i = 1; i <= row; i++)
  40. {
  41. printf("%d", i);
  42. for (j = 1; j <= col; j++)
  43. {
  44. printf("%2c", board[i][j]);
  45. }
  46. printf("\n");
  47. }
  48. }
  49. void SetMine(char mine[ROWS][COLS], int row, int col)//布置雷的函数
  50. {
  51. int count = EASYCOUNT//难度,可以在头文件中更改;
  52. while (count)
  53. {
  54. int x = rand() % row + 1;
  55. int y = rand() % col + 1;
  56. if (mine[x][y]=='0')
  57. {
  58. mine[x][y] = '1' ;
  59. count--;
  60. }
  61. }
  62. }
  63. int GetMineCount(char mine[ROWS][COLS], int x, int y)//返回值,即在玩家输入坐标时,判断该坐标有没有雷,如果没有返回周围一圈的雷数
  64. {
  65.  
  66. return (mine[x - 1][y] +
  67. mine[x - 1][y - 1] +
  68. mine[x][y - 1] +
  69. mine[x + 1][y - 1] +
  70. mine[x + 1][y] +
  71. mine[x][y + 1] +
  72. mine[x+1][y + 1] +
  73. mine[x - 1][y + 1] - 8 * '0');
  74. }
  75. void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
  76. {
  77. int x = 0;
  78. int y = 0;
  79. int win = 0;
  80. while (win-row*col-EASYCOUNT)
  81. {
  82. printf("请输入要排查的坐标:>");
  83. scanf("%d%d", &x, &y);
  84. if (x >= 1 && x <= row && y >= 1 && y <= col)
  85. {
  86. if (mine[x][y] == '1')
  87. {
  88. printf("很不幸,你被炸死了\n");
  89. DispalyBoard(mine, row, col);
  90. break;
  91. }
  92. else
  93. {
  94. int count = GetMineCount(mine,x,y);
  95. show[x][y] = count + '0';
  96. DispalyBoard(show, row, col);
  97. win++;
  98. }
  99. if (win == row*col - EASYCOUNT)
  100. {
  101. printf("恭喜你通关了!!!\n");
  102. DispalyBoard(mine, row, col);
  103. }
  104. }
  105. else
  106. {
  107. printf("注意输入范围,请重新输入:>\n");
  108. }
  109. }
  110. }
  111. //paly.c
  112. #define _CRT_SECURE_NO_WARNINGS 1
  113. #include"game.h"
  114. void menu()//菜单功能
  115. {
  116. printf("********************\n");
  117. printf("**** 1.paly ****\n");
  118. printf("********************\n");
  119. printf("**** 0.out ****\n");
  120. }
  121. void game()
  122. {
  123. //雷的信息储存
  124. //1.布置好的雷的信息:
  125. char mine[ROWS][COLS] = { 0 };
  126. //2.排查出的雷的信息:
  127. char show[ROWS][COLS] = { 0 };
  128. //初始化:
  129. InitBoard(mine, ROWS, COLS,'0');
  130. InitBoard(show, ROWS, COLS,'*');
  131. //打印棋盘:
  132. //DispalyBoard(mine, ROW, COL);
  133. //DispalyBoard(show, ROW, COL);
  134. //布置雷:
  135. SetMine(mine, ROW, COL);
  136. //打印布置好的雷
  137. //DispalyBoard(mine, ROW, COL);
  138. DispalyBoard(show, ROW, COL);
  139. //排查雷
  140. FindMine(mine,show, ROW, COL);
  141. }
  142. void test()
  143. {
  144. srand((unsigned)time(NULL));
  145. int input = 0;
  146. do
  147. {
  148. menu();
  149. printf("请根据菜单选择:>\n");
  150. scanf("%d", &input);
  151. switch (input)
  152. {
  153. case 1:
  154. game();
  155. break;
  156. case 0:
  157. printf("退出游戏:>\n");
  158. break;
  159. default:
  160. printf("输入错误,请重新输入:>\n");
  161. break;
  162. }
  163. } while (input);
  164. }
  165. int main()
  166. {
  167. test();
  168. return 0;
  169. }

菜单界面:

C语言实现扫雷小游戏(适合初学者)

运行时的扫雷界面(参考坐标为玩家提供方便):

C语言实现扫雷小游戏(适合初学者)

假如踩雷,游戏失败界面:

C语言实现扫雷小游戏(适合初学者)

排雷完毕游戏通关的界面:

C语言实现扫雷小游戏(适合初学者)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

原文链接:https://blog.csdn.net/IRON__MAN__/article/details/105169093

延伸 · 阅读

精彩推荐
  • C/C++OpenCV实现拼接图像的简单方法

    OpenCV实现拼接图像的简单方法

    这篇文章主要为大家详细介绍了OpenCV实现拼接图像的简单方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    iteye_183805102021-07-29
  • C/C++深入C++拷贝构造函数的总结详解

    深入C++拷贝构造函数的总结详解

    本篇文章是对C++中拷贝构造函数进行了总结与介绍。需要的朋友参考下...

    C++教程网5182020-11-30
  • C/C++c/c++内存分配大小实例讲解

    c/c++内存分配大小实例讲解

    在本篇文章里小编给大家整理了一篇关于c/c++内存分配大小实例讲解内容,有需要的朋友们可以跟着学习参考下。...

    jihite5172022-02-22
  • C/C++C语言实现双人五子棋游戏

    C语言实现双人五子棋游戏

    这篇文章主要为大家详细介绍了C语言实现双人五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    两片空白7312021-11-12
  • C/C++C语言main函数的三种形式实例详解

    C语言main函数的三种形式实例详解

    这篇文章主要介绍了 C语言main函数的三种形式实例详解的相关资料,需要的朋友可以参考下...

    ieearth6912021-05-16
  • C/C++使用C++制作简单的web服务器(续)

    使用C++制作简单的web服务器(续)

    本文承接上文《使用C++制作简单的web服务器》,把web服务器做的功能稍微强大些,主要增加的功能是从文件中读取网页并返回给客户端,而不是把网页代码...

    C++教程网5492021-02-22
  • C/C++关于C语言中E-R图的详解

    关于C语言中E-R图的详解

    今天小编就为大家分享一篇关于关于C语言中E-R图的详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看...

    Struggler095962021-07-12
  • C/C++c/c++实现获取域名的IP地址

    c/c++实现获取域名的IP地址

    本文给大家汇总介绍了使用c/c++实现获取域名的IP地址的几种方法以及这些方法的核心函数gethostbyname的详细用法,非常的实用,有需要的小伙伴可以参考下...

    C++教程网10262021-03-16