经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
C语言实现简单的扫雷功能
来源:jb51  时间:2021/11/9 15:10:00  对本文有异议

这是我跟着学习视频完成的第一个小游戏,运用到的知识不多都是数组相关的知识,重要的是思路,在设计的时候要先绘制出大概的框图,要知道游戏的根本,这样会让你写程序的时候更加方便。

下面看代码:

test.c

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include"game.h"
  3. void test();
  4. void menu();
  5. void game();
  6. int main()
  7. {
  8. test();
  9. return 0;
  10. }
  11. void menu()
  12. {
  13. printf("*************************\n");
  14. printf("****** 1.play ******\n");
  15. printf("****** 0.exit ******\n");
  16. printf("*************************\n");
  17. }
  18. void test()
  19. {
  20. int input = 0;
  21. srand((unsigned int)time(NULL));
  22. do
  23. {
  24. menu();
  25. printf("请选择: ");
  26. scanf("%d", &input);
  27. switch (input)
  28. {
  29. case 1:
  30. printf("扫雷游戏!\n");
  31. game();
  32. break;
  33. case 0:
  34. printf("已退出游戏!\n");
  35. break;
  36. default:
  37. printf("输入错误,请重新输入!\n");
  38. break;
  39. }
  40. } while (input);
  41. }
  42. void game()
  43. {
  44. //雷的信息存储
  45. //1.布置雷的信息
  46. char mine[ROWS][COLS] = { 0 }; //11*11
  47. //2.排查出的雷的信息
  48. char show[ROWS][COLS] = { 0 };
  49. //初始化
  50. InitBoard(mine, ROWS, COLS, '0');
  51. InitBoard(show, ROWS, COLS, '*');
  52. //打印棋盘
  53. DisplyBoard(mine, ROW, COL);
  54. //DisplyBoard(show, ROW, COL);
  55. //布置雷
  56. SetMine(mine, ROW, COL);
  57. DisplyBoard(mine, ROW, COL);
  58. //扫雷
  59. FindMine(mine, show, ROW, COL);
  60. }

game.c

  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include"game.h"
  3. //'1'-'0'=1
  4. //'3'-'0'=3
  5. int get_mine_count(char mine[ROWS][COLS], int x, int y)
  6. {
  7. return mine[x - 1][y - 1] - '0' +
  8. mine[x][y - 1] - '0' +
  9. mine[x + 1][y - 1] - '0' +
  10. mine[x + 1][y] - '0' +
  11. mine[x + 1][y + 1] - '0' +
  12. mine[x][y + 1] - '0' +
  13. mine[x - 1][y + 1] - '0' +
  14. mine[x - 1][y] - '0';
  15. }
  16. void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
  17. {
  18. int i = 0;
  19. int j = 0;
  20. for (i = 0; i < rows; i++)
  21. {
  22. for (j = 0; j < cols; j++)
  23. {
  24. board[i][j] = set;
  25. }
  26. }
  27. }
  28. void DisplyBoard(char board[ROWS][COLS], int row, int col)
  29. {
  30. int i = 0;
  31. int j = 0;
  32. //打印列号
  33. for (i = 0; i <= row; i++)
  34. {
  35. printf("%d ", i);
  36. }
  37. printf("\n");
  38. for (i = 1; i <= row; i++)
  39. {
  40. //打印行号
  41. printf("%d ", i);
  42. for (j = 1; j <= col; j++)
  43. {
  44. printf("%c ", board[i][j]);
  45. }
  46. printf("\n");
  47. }
  48. }
  49. void SetMine(char board[ROWS][COLS], int row, int col)
  50. {
  51. int count = COUNT;
  52. while (count)
  53. {
  54. int x = rand() % row + 1;
  55. int y = rand() % col + 1;
  56. if (board[x][y] == '0')
  57. {
  58. board[x][y] = '1';
  59. count--;
  60. }
  61. }
  62. }
  63. void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
  64. {
  65. int x = 0;
  66. int y = 0;
  67. int win = 0;
  68. while (win < ROW * COL - COUNT)
  69. {
  70. printf("请输入坐标: ");
  71. scanf("%d%d", &x, &y);
  72. if (x >= 1 && x <= row && y >= 1 && y <= col)
  73. {
  74. //坐标合法
  75. //1.踩雷
  76. if (mine[x][y] == '1')
  77. {
  78. printf("你被炸死了!!!\n");
  79. DisplyBoard(mine, row, col);
  80. break;
  81. }
  82. //不是雷
  83. else
  84. {
  85. //计算x,y坐标周围有几个雷
  86. int count = get_mine_count(mine, x, y);
  87. show[x][y] = count + '0';
  88. DisplyBoard(show, row, col);
  89. win++;
  90. }
  91. }
  92. else
  93. {
  94. printf("坐标非法,请重新输入!");
  95. }
  96. }
  97. if (win == ROW * COL - COUNT)
  98. {
  99. printf("恭喜你,排雷成功!!!\n");
  100. DisplyBoard(mine, row, col);
  101. }
  102. }

game.h

  1. #define ROW 9
  2. #define COL 9
  3. #define ROWS ROW+2
  4. #define COLS COL+2
  5. #define COUNT 80
  6. #include<stdio.h>
  7. #include<stdlib.h>
  8. #include<time.h>
  9. void InitBoard(char board[ROWS][COLS], int rows, int cols, char set);
  10. void DisplyBoard(char board[ROWS][COLS], int row, int col);
  11. void SetMine(char board[ROWS][COLS], int row, int col);
  12. void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持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号