经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
c++实现扫雷小游戏代码分享
来源:jb51  时间:2022/2/22 15:52:35  对本文有异议

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

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

头文件:game.h

  1. #include <stdio.h>
  2.  
  3.  
  4. #define count 10 //雷的数量
  5.  
  6. //定义 行-ROW,列-COL
  7. #define ROW 9
  8. #define COL 9
  9. #define ROWS ROW+2 //多加一些,方便代码
  10. #define COLS COL+2
  11.  
  12. //初始化棋盘,声明的函数均在game.c中实现
  13. void InitBoard(char board[ROWS][COLS],int rows,int cols);
  14.  
  15. //打印棋盘
  16. void DisplayBoard(char board[ROW][COL],int row.int col);
  17.  
  18. //布置雷
  19. void SetMine(char board[ROW][COLS],int row,int col);
  20.  
  21. //找雷
  22. void FindMine(char mine[][COLS],char show[][COLS],int row,int col);

第一个源文件:saolei.c

  1. #include "game.h" ?//需要包含和声明的东西在game.h中完成
  2.  
  3. void menu()
  4. {?
  5. ? printf(" ? ? ? ? ? ? ? ? ?\n");
  6. ? printf(" ? ? ? 1.play ? ? \n");
  7. ? printf(" ? ? ? 0.exit ? ? \n");
  8. ? printf(" ? ? ? ? ? ? ? ? ?\n");
  9. }
  10.  
  11. void game()
  12. {?
  13. ? // ROW and COL 在game.h中定义
  14. ? char mine[ROWS][COLS]; ?// 地雷埋藏的棋盘
  15. ? char show[ROWS][COLS]; ?// 展示出的棋盘
  16. ? //初始化棋盘
  17. ? //game()中的函数在game.h中声明,在game.c中实现
  18. ? InitBoard(mine,ROWS,COLS,'0'); ? //0代表无雷,1代表有雷
  19. ? InitBOard(show,ROWS,COLS,'*');
  20. ? //打印棋盘
  21. ? DisplayBoard(show,ROW,COL);
  22. ? //布置雷
  23. ? SetMine(mine,ROW,COL);
  24. ? //找雷
  25. ? FindMine(mine,show,ROW,COL);
  26. ??
  27. }
  28.  
  29.  
  30. int main()
  31. {
  32. ? srand((unsigned int) time(NULL));//生成随机数
  33. ? int input = 0;
  34. ? do ? ? ? ? ? ? ?//do-while循环
  35. ? {
  36. ? ? menu(); ? ?//(1--play ? 0--exit)也是do-while循环的条件
  37. ? ? printf("请选择:");
  38. ? ? scanf("%d",&input);
  39. ? ? switch(input)
  40. ? ? {?
  41. ? ? case 1:
  42. ? ? ? ? printf("开始游戏\n");
  43. ? ? ? ? game();
  44. ? ? ? ? break;
  45. ? ? ?case 0:
  46. ? ? ? ? printf("退出游戏");
  47. ? ? ? ? break;
  48. ? ? ?default: ??
  49. ? ? ? ? printf("选择错误,请重新输入");
  50. ? ? ? ? break;
  51. ? ? }
  52. ? }while(input)
  53. ??
  54. ? return 0;
  55. }

第二个源文件:game.c

  1. #include "game.h"
  2.  
  3. void InitBoard(char board[ROWS][COLS],int rows,int cols,char set)
  4. {
  5. ? int i = 0;
  6. ? int j = 0;
  7. ? for(i = 0;i < rows;i++)
  8. ? {
  9. ? ? for(j = 0;j < cols;j++)
  10. ? ? {
  11. ? ? ? board[i][j] = set;
  12. ? ? }
  13. ? }
  14. ??
  15. }
  16.  
  17. void DisplayBoard(char board[ROWS][COLS],int row,int col)
  18. {
  19. ? int i = 0;
  20. ? int j = 0;
  21. ? for(i = 0;i <= row;i++)
  22. ? {
  23. ? ? printf("%d",i);
  24. ? }
  25. ? printf("\n");
  26. ? for(i = 1;i <= row;i++)
  27. ? {
  28. ? ? printf("%d"i)
  29. ? ? for(j = 1;j <= col;j++)
  30. ? ? {
  31. ? ? ? printf(" %c ",board[i][j]);
  32. ? ? }
  33. ? ? printf("\n");
  34. ? }
  35. ??
  36. }
  37.  
  38. void SetMine(char board[ROW][COL],int row,int col)
  39. {
  40. ? int x = 0;
  41. ? int y = 0;
  42. ? while(count) //count-雷的数量
  43. ? {
  44. ? ? x = rand()%row + 1;//因为在1-row中布置雷,边缘一排不用,最后为了记录
  45. ? ? y = rand()%col + 1;//周围雷的数量方便,同时代码方便
  46. ? ? if( board[x][y] == '0')
  47. ? ? {
  48. ? ? ? board[x][y] = '1';
  49. ? ? ? count--;
  50. ? ? }
  51. ? }
  52. }
  53.  
  54. //算出周围雷的个数
  55. int get_mine_count(mine[ROWS][COLS],int row,int col)
  56. {
  57. ? int i = 0;
  58. ? int j = 0;
  59. ? int mine_count = 0;
  60. ? for( i = -1;i <= 1; i++ )
  61. ? {
  62. ? ? for( j = -1;j <= 1; j++ )
  63. ? ? {
  64. ? ? ? if( mine[i][j] == '1')
  65. ? ? ? {
  66. ? ? ? ? mine_count++;
  67. ? ? ? }
  68. ? ? }
  69. ? }
  70. ? return mine_count;
  71. }
  72.  
  73. void FindMine(char mine[][COLS],char show[][COLS],int row,int col)
  74. {
  75. ? int x = 0;
  76. ? int y = 0;
  77. ? int ret = 0;//已经查找过的位置的数量
  78. ? while(ret < row * col - count)//当还剩下count的数量时,赢得游戏
  79. ? {?
  80. ? ? printf("请输入查找位置下标:");
  81. ? ? scanf("%d%d",&x,&y);
  82. ? ? if(x >= 1 && x <= row && y >= 1 && y <= col)
  83. ? ? {
  84. ? ? ? if(mine[x][y] == '0')
  85. ? ? ? {
  86. ? ? ? ? //当所查坐标的位置不是雷时,将该坐标展示成周围雷的个数
  87. ? ? ? ? int c = get_mine_count(mine,ROW,COL);
  88. ? ? ? ? mine[x][y] = c + '0';//返回值为int型,数组为char型,因此+'0'
  89. ? ? ? ? ret++;
  90. ? ? ? ? DisplayBoard(show,ROW,COL);
  91. ? ? ? }
  92. ? ? ? else
  93. ? ? ? {
  94. ? ? ? ? printf("YOU LOSE\n");
  95. ? ? ? ? break;
  96. ? ? ? }
  97. ? ? }
  98. ? ? else
  99. ? ? {
  100. ? ? ? printf("输入非法,请重新输入\n");
  101. ? ? }
  102. ? }
  103. ? printf("VICTORY\n"); ?//获得胜利
  104. }

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号