当前位置:   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. }
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/blog/article/detail/90833
推荐阅读
  • import{Button,Icon,Form,Row,Col,Input,Tag,Modal}from"antd";importReact,{Component}from"react";constFormItem=Form.Item;co... [详细]

  • 首先打开菜单栏-编辑-项目设置找到平台-window里面默认RHI选择DierctX12再在左边往上拉找到渲染设置。_ue很酷设置ue很酷设置首先打开菜单栏-编辑-项目设置 找到平台-window里面默认RHI... [详细]

  • <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>第一个three.js文件_WebGL三维场景<... [详细]

  • 针对软文发布类别的选择,小红书商业笔记普通笔记区别究竟什么,今天为大家带来的详细分析,告诉你该如何用最少的成本,做出“爆文”。有的人,会对内容介绍的非常详细,搭配美观的排版,能带给读者极好的观感。那么很显然,如果我们发布笔记的目的为了... [详细]

  • 解决饿了么组件库el-dialog弹框组件设置custom-class样式不生效问题_el-dialogcustom-classel-dialogcustom-class文章目录问题描述解决方法问题描述<template> &l... [详细]

  • 断线重连是一项非常重要的网络编程技术。Python提供了socket模块来方便地实现这项功能。通过socket模块,可以简单地建立网络连接,并实现不间断的数据传输。本文介绍了断线重连的原理和Python中的实现方法,希望能够对读者有所帮助。... [详细]

  • Input类中的方法:一、获取鼠标输入:1.Input.GetMouseButton(0);//当鼠标按住左键时2.Input.GetMouseButtonDown(0);//当鼠标按下左键时3.Input.GetMouseButtonUp... [详细]

  • 天空盒是在三维场景中模拟天空和背景的技术,为用户提供了更加逼真和沉浸式的体验。天空盒包裹了整个场景,用于模拟自然环境,快速营造场景氛围。在实际项目应用中,我们发现原来版本提供的天空盒范例会出现一个问题:不管放大缩小场景,即使将视角拉高到太空... [详细]

  • 1.环境准备1.1LayaAirIDE1.7.14版本才开始集成微信小游戏开发1.2微信小游戏开发工具微信小游戏开发工具是小游戏开发与测试的环境,由于LayaAir引擎的开发者完全可以使用LayaAirIDE进行项目开发,那么安装这个小游戏... [详细]

  • 点击蓝字关注我们AITIME欢迎每一位AI爱好者的加入!9月15日,由智谱AI支持,北京市科委、中关村管委会科普专项经费资助的系列栏目“科普大佬说”第九期于AITIME开讲,本次讲座邀请了清华大学计算机系长聘教授/博士生导师、清华大学人工智... [详细]

  • 提到游戏的UI开发,几乎没人没听说过MVC吧?MVC最早是为软件架构设计的框架,这里不打算讲MVC的演变过程,需要的了解的可以参考大神的文章,传送门你对MVC、MVP、MVVM三种组..._slg游戏框架slg游戏框架提到游戏的UI开发,... [详细]

  • 本文给大家带来的是分类损失SlideLoss、VFLoss、FocalLoss损失函数,我们之前看那的那些IoU都是边界框回归损失,和本文的修改内容并不冲突,所以大家可以知道损失函数分为两种一种是分类损失另一种是边界框回归损失,上一篇文章里... [详细]

  • 本篇博文深入研究了在使用ElementUI构建表单时的一项常见挑战——即便表单项被隐藏,仍然会进行验证。这个问题的出现源于Vue的v-show指令。我们提出了两种创新策略和对应的代码示例来克服这个问题:首先,我们引入Vue的v-if指令来控... [详细]

  • 本节课将创建一个新的虚幻引擎项目,并为它配置使用Steam平台在线子系统。UE5_C++多人TPS完整教程学习笔记7——P8为项目配置SteamConfiguringAProjectforSteam本文为B站系列教学视频UE5... [详细]

  • 1、载最新版本的chromedriver,因为深度系统自带的谷歌浏览器一般也是最新的。然后将第二步得到的“chromedriver”可执行文件移动到“/usr/bin/”目录。5、至此,seleniumchromedriver安装完成... [详细]

  • for循环语句的对象是可迭代对象,可迭代对象需要实现__iter__或iter方法,并返回一个迭代器,什么是迭代器呢?迭代器只需要实现__next__或next方法。现在来验证一下列表为什么支持迭代:x=[1,2,3]its=iter(x)... [详细]

  • Zookeeper作为一个分布式协调框架,内部存储了一些分布式系统运行时的状态的数据,比如master选举、比如分布式锁。对这些数据的操作会直接影响到分布式系统的运行状态。因此,为了保证zookeeper中的数据的安全性,避免误操作带来的影... [详细]

  • 基于ENVI提取灰度共生矩阵特征_envi纹理特征提取envi纹理特征提取目录1、加载图像2、打开灰度共生矩阵提取工具3、选择要处理的影像4、设置:5、结果:6、对比显示:1、加载图像2、打开灰度共生矩阵提取工具3、选择要处理的影像4、设置... [详细]

  • 在选择归一化方法时,需要考虑数据的分布、特征之间的相关性以及模型的稳定性等因素。_归一化方法归一化方法除了之前提到的线性归一化、非线性归一化和标准化,还有以下几种常用的归一化处理方法:Min-Max归一化:将数据缩放到[0,1]区间,该... [详细]

  • 效果图:源码如下: