当前位置:   article > 正文

【C/C++实战项目】扫雷游戏_扫雷游戏c++

扫雷游戏c++

目录

项目分析

外部头文件

初始化

打印

扫雷游戏函数

main函数


项目分析

  • 游戏需要自定义地图的大小、埋雷的数量
  • 通过输入坐标进行扫雷,输入的坐标是埋雷的地方,则游戏失败
  • 输入的坐标未埋雷,则该坐标显示周围8个坐标总共的雷数
  • 游戏初始化两个数组,一个用于埋雷,一个用于打印
  • 控制颜色,提高游戏体验感

效果展示

外部头文件

Windows.h头文件用于清屏和控制颜色

time.h头文件生成随机数埋雷

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <Windows.h>
  4. #include <time.h>

初始化

地图大小的长宽各加一,方便每一次扫雷是计算周围的雷数

  1. #define ROW 8
  2. #define COL 8
  3. #define ROWS (ROW + 2)
  4. #define COLS (COL + 2)
  5. #define BOOM 8
  6. int g_mine[ROWS][COLS] = { 0 };
  7. char g_show[ROWS][COLS] = { 0 };
  8. void Init(char c)
  9. {
  10. int boom = BOOM;
  11. while (boom)
  12. {
  13. int x = rand() % ROW + 1;
  14. int y = rand() % COL + 1;
  15. if (g_mine[x][y] == 0)
  16. {
  17. g_mine[x][y] = 1;
  18. --boom;
  19. }
  20. }
  21. int i, j;
  22. for (i = 1; i <= ROW; ++i)
  23. for (j = 1; j <= COL; ++j)
  24. g_show[i][j] = c;
  25. }

打印

Color函数通过系统的API接口控制输出端颜色

两个打印函数,一个用于游戏中每次操作后打印,一个用于游戏结束后打印初始地图

注:windows系统的颜色接口中,土黄色是6,绿色是10,红色是12,白色是15

  1. void Color(int x)
  2. {
  3. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);
  4. }
  5. void Display()
  6. {
  7. Color(10);
  8. system("cls");
  9. printf("----- Mine Sweeping -----\n");
  10. int i, j;
  11. for (i = 0; i <= COL; ++i)
  12. printf("%2d ", i);
  13. printf("\n");
  14. for (i = 1; i <= ROW; ++i)
  15. {
  16. Color(10);
  17. printf("%2d ", i);
  18. for (j = 1; j <= COL; ++j)
  19. {
  20. Color(6);
  21. printf(" %c ", g_show[i][j]);
  22. }
  23. printf("\n");
  24. }
  25. }
  26. void ShowMine()
  27. {
  28. Color(10);
  29. printf("\n");
  30. int i, j;
  31. for (i = 0; i <= COL; ++i)
  32. printf("%2d ", i);
  33. printf("\n");
  34. for (i = 1; i <= ROW; ++i)
  35. {
  36. Color(10);
  37. printf("%2d ", i);
  38. for (j = 1; j <= COL; ++j)
  39. {
  40. if (g_mine[i][j] == 1)
  41. {
  42. Color(12);
  43. printf(" B ");
  44. }
  45. else
  46. {
  47. Color(6);
  48. printf(" * ");
  49. }
  50. }
  51. printf("\n");
  52. }
  53. }

扫雷游戏函数

GetMineCount函数获取周围雷数,并将其转化为char类型返回

Sweep是扫雷函数,通过循环控制

  1. char GetMineCount(int x, int y)
  2. {
  3. return g_mine[x - 1][y - 1] +
  4. g_mine[x][y - 1] +
  5. g_mine[x + 1][y - 1] +
  6. g_mine[x - 1][y] +
  7. g_mine[x + 1][y] +
  8. g_mine[x - 1][y + 1] +
  9. g_mine[x][y + 1] +
  10. g_mine[x + 1][y + 1] + '0';
  11. }
  12. void Sweep()
  13. {
  14. int count = ROW * COL - BOOM;
  15. while (count)
  16. {
  17. Color(15);
  18. printf("请输入坐标扫雷: ");
  19. int x, y;
  20. scanf("%d%d", &x, &y);
  21. if (x < 1 || x > ROW || y < 1 || y > COL)
  22. {
  23. Color(15);
  24. printf("输入错误,请重新输入\n");
  25. continue;
  26. }
  27. if (g_mine[x][y] == 1)
  28. {
  29. Color(15);
  30. printf("很遗憾,你踩到了地雷\n");
  31. ShowMine();
  32. return;
  33. }
  34. else
  35. {
  36. if (g_show[x][y] == '*')
  37. {
  38. g_show[x][y] = GetMineCount(x, y);
  39. Display();
  40. --count;
  41. }
  42. else
  43. {
  44. Color(15);
  45. printf("该坐标已经标记过,请重新输入\n");
  46. }
  47. }
  48. if (count == 0)
  49. {
  50. Color(15);
  51. printf("\n恭喜你,扫雷成功!\n");
  52. ShowMine();
  53. }
  54. }
  55. }
  56. void Game()
  57. {
  58. Init('*');
  59. Display();
  60. Sweep();
  61. }

main函数

  1. void Menu()
  2. {
  3. printf("\n");
  4. printf("-------------------\n");
  5. printf("-------------------\n");
  6. printf("---- 1. Game ----\n");
  7. printf("---- 0. Exit ----\n");
  8. printf("-------------------\n");
  9. printf("-------------------\n");
  10. printf("请选择:");
  11. }
  12. int main()
  13. {
  14. srand((unsigned int)time(NULL));
  15. int input;
  16. do
  17. {
  18. Color(15);
  19. Menu();
  20. scanf("%d", &input);
  21. switch (input)
  22. {
  23. case 1:
  24. Game();
  25. break;
  26. case 0:
  27. system("cls");
  28. printf("退出游戏\n");
  29. return 0;
  30. default:
  31. printf("输入错误, 请重新选择\n");
  32. }
  33. } while (input);
  34. return 0;
  35. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/90833
推荐阅读
相关标签
  

闽ICP备14008679号