百行代码手撸扫雷(下)c/c++

article/2025/9/14 14:08:32
  • 在上一篇文章中已经带大家如何搭建开发环境了

需求分析

  • 这里是一个8*8的地图
    在这里插入图片描述

地雷随机分布数字表示周围一共有多少颗雷

在这里插入图片描述

数字1表示红色区域内有1课雷,2表示有两颗

在这里插入图片描述

在这里插入图片描述

如何显示数字

在这里插入图片描述
右上角没有如何判断呢?行加1或列加一不就越界了吗,所以为了帮面条件判断我们把8行8列改成10行10列

在这里插入图片描述

游戏实现

  • 先包含头文件

  • #include <SFML/Graphics.hpp>

  • #include <SFML/Audio.hpp>

  • 初始化窗口大小,就类似于我们要搭台唱戏一样,需要一个舞台这个舞台大小需要多大,我们需要指定一下舞台大小,不指定怎么知道需要多大的舞台呢?这就是初始化

  • 初始化窗口: RenderWindow window(VideoMode(800, 800), “Canxin-MINE”);

  • RenderWindow window(VideoMode(窗口宽度,窗口高度),“窗口右上角的描述信息”);
    宽为x坐标,高为y坐标;

在这里插入图片描述

  • 获取当前鼠标点击的x坐标和y坐标

  • Vector2i pos = Mouse::getPosition(window);

  • 我们要把鼠标的x坐标和y坐标转化成行和列,就需要鼠标的x坐标除以方块的像素宽度,y坐标也是一样

  • 在这里插入图片描述

#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include <time.h>using namespace sf;#define SIZE 10      //地图宽度enum {NONE_MINE = 0,MINE = 9, //地雷GROUND,  //地面FLAG     //旗帜
};enum {SUCCESS,FAILURE,GOING
};int unitSize = 64;
int mineData[SIZE + 2][SIZE + 2];  // 0:没有雷 9:有雷(以避免和雷的数字提示混淆)
int showData[SIZE + 2][SIZE + 2];
int mineCount = 0;bool success_flag = false;
bool failure_flag = false;void initMine() {//布雷for (int i = 1; i <= SIZE; i++) {for (int j = 1; j <= SIZE; j++) {showData[i][j] = GROUND; // 设置为未点击状态(“地面”)//布雷if (rand() % 5 == 0) {mineData[i][j] = MINE;mineCount++;}else {mineData[i][j] = NONE_MINE;}}}// 计算雷周围位置的数字显示for (int i = 1; i <= SIZE; i++)for (int j = 1; j <= SIZE; j++){int n = 0;if (mineData[i][j] == MINE) continue;if (mineData[i + 1][j] == MINE) n++;if (mineData[i][j + 1] == MINE) n++;if (mineData[i - 1][j] == MINE) n++;if (mineData[i][j - 1] == MINE) n++;if (mineData[i + 1][j + 1] == MINE) n++;if (mineData[i - 1][j - 1] == MINE) n++;if (mineData[i - 1][j + 1] == MINE) n++;if (mineData[i + 1][j - 1] == MINE) n++;mineData[i][j] = n;}
}int check(RenderWindow* window) {int count = 0;for (int i = 1; i <= SIZE; i++) {for (int j = 1; j <= SIZE; j++) {if (mineData[i][j] == MINE && showData[i][j] == FLAG) {count++;continue;}else if (mineData[i][j] == MINE && showData[i][j] == MINE) {failure_flag = true;return FAILURE;}}}if (count == mineCount) {success_flag = true;return SUCCESS;}return GOING;
}int main()
{srand(time(0));RenderWindow window(VideoMode(800, 800), "Canxin-MINE");    //初始化窗口//加载图片Texture t;t.loadFromFile("images/tiles2.jpg");Sprite s(t);//布雷initMine();Texture t1, t2;t1.loadFromFile("images/victory.png");t2.loadFromFile("images/fail.png");Sprite spriteVictory(t1);Sprite spriteFail(t2);Sound soundOK;SoundBuffer buff1;buff1.loadFromFile("OK.wav");soundOK.setBuffer(buff1);Sound soundFail;SoundBuffer buff2;buff2.loadFromFile("bom.wav");soundFail.setBuffer(buff2);while (window.isOpen()){// 获取鼠标在游戏窗口内的位置坐标Vector2i pos = Mouse::getPosition(window);int x = pos.x / unitSize;int y = pos.y / unitSize;int ret = -1;Event e;while (window.pollEvent(e)){if (x <= 0 || x > SIZE || y <= 0 || y > SIZE) {break;}if (e.type == Event::Closed) //关闭窗口按钮window.close();if (e.type == Event::MouseButtonPressed) {if (e.key.code == Mouse::Left) showData[x][y] = mineData[x][y];else if (e.key.code == Mouse::Right) showData[x][y] = FLAG;ret = check(&window);}}// 清除屏幕window.clear(Color::Yellow);// 绘制雷区的各方块for (int i = 1; i <= SIZE; i++) {for (int j = 1; j <= SIZE; j++) {if (showData[x][y] == 9) showData[i][j] = mineData[i][j];s.setTextureRect(IntRect(showData[i][j] * unitSize, 0, unitSize, unitSize));s.setPosition(i * unitSize, j * unitSize);window.draw(s);}}//int ret = check(&window);if (success_flag) {spriteVictory.setPosition(250, 250);window.draw(spriteVictory);}if (failure_flag) {spriteFail.setPosition(250, 250);window.draw(spriteFail);}if (ret == FAILURE) {soundFail.play();}else if (ret == GOING) {soundOK.play();}// 刷新显示window.display();}//奇牛学院-残芯return 0;
}

在这里插入图片描述


http://chatgpt.dhexx.cn/article/eaacMk0r.shtml

相关文章

面向祖传代码 Debug,我挽回了一位准备跑路的程序员

交流群的风格突然骤变&#xff0c;没有了往日的灌水扯淡&#xff0c;居然聊起了技术。 看了大家的全部的聊天记录&#xff0c;发现问题并没解决。群里难得这么多人聊技术&#xff0c;抱着问答不断&#xff0c;必有回响的原则&#xff0c;主动勾搭一起看看是什么问题。 大概了解…

第一次敲代码的感受

上图 打了2遍才成功&#xff0c;吐了&#x1f92e; 第一遍错了好几次&#xff0c;最后还是不知道那错了&#xff0c;发给同学都可以运行&#xff0c;我这电脑确不可以运行&#xff01; 最后第二遍终于成功了 &#xff0c;花费一个小时&#xff0c;也不知道还行不&#xff1f…

程序员想知道代码是怎样跑起来的

某一天&#xff0c;程序员使用Java语言实现累加求和的方法&#xff0c;将文件命名为Sample.java。 public class Sample {public static void main(String[] args) {System.out.println(sum(10));}private static int sum(int n) {int res 0;for (int i 1; i < n; i) {res…

从前有一个程序员,成天写代码,后来。。。

之前这里是网易云音乐 的外链&#xff0c;许巍演唱版本的《执着》&#xff0c;我们搞IT 的多少都有些执着&#xff0c;后来网页没有了版权&#xff0c;我只好放上来歌词了。 如果对文章没有太多兴趣&#xff0c;可以只读一遍歌词&#xff0c;或者听一遍歌&#xff0c;哈哈。 每…

开发10年程序员,坐标北京,今天我硬气一回把老板炒了!!!

我的情况 随着越来越多的零基础非专业跳槽人员以及大学计算机专业学生越来越多,导致程序员找工作门槛也越来越高。虽然有着三年的开发经验,也自认为自己能解决很多问题。但是从找工作的这段时间才发现,自己的解决问题的能力是有,但是技术深度不够扎实。 通过对比自己和中…

低代码起势,程序员闷头开发的日子结束了

对于“低代码”的宣传其实已经很久很广泛了&#xff0c;但是争议从来都没有停止。“低代码将会取代程序员”的说法也很荒谬&#xff0c;今天系统整理了低代码&#xff0c;希望能对大家有启示&#xff0c;同时也欢迎各位在评论区指正探讨。 何方神圣&#xff1f; 所谓的低代码开…

程序员的炫技代码写法

程序员的炫技代码写法 程序员&#xff0c;这个职业总是让人感到神秘而又充满魅力。他们手中的代码常常充满了令人惊叹的炫技操作&#xff0c;让人不禁感叹他们的技术能力之高。在这篇博客中&#xff0c;我想和大家分享一些我所知道的程序员的炫技代码写法。 一、代码美感——…

一串代码让你成为机房最靓的仔

1.创建一个记事本文件 2.编辑文件内容 语法格式 color 背景色字体颜色 echo 输出的内容 %0&#xff08;无线循环&#xff09;例如在文件中输入以下内容并保存 color 1a echo 666666 color 2b echo 666666 color 3c echo 666666 color 4d echo 666666 color 5e echo 666666 c…

我爸嘲讽我,写破代码一年才挣十几万,他在工地带50个工人,一个月仅人头费就挣3万多,让我滚回去跟他干工地!...

现在码农的地位有多低&#xff1f; 一位程序员讲述自己被父亲鄙视的经过&#xff1a; 我爸嘲讽我&#xff0c;说我天天写这破代码有啥用&#xff0c;一年就拿十多万死工资。他在工地带 50 个工人&#xff0c;一个人一天抽 20 块钱人头费&#xff0c;一个月都能抽 3 万多&#x…

电视剧中的程序员,是真的敲代码吗?

今天是1024程序员节&#xff0c;今天不聊技术&#xff0c;聊一聊电视剧中出现过的敲代码片段&#xff0c;从咱程序员的视角看看代码是不是真的在写代码哦~ 1. 码不出来&#xff0c;公司要完 从知乎上看到的 用word写代码&#xff1f;放弃吧&#xff0c;写不写得出来&#xff…

给2500万行代码修复bug的程序员都怎么上班?

通常说&#xff0c;一个人造的、很庞大的事物&#xff0c;会给人很厉害的感觉。 比如说摩天大楼⬇️ 或者巨型水坝⬇️ 看着这种东西&#xff0c;世超不禁想到这几个字&#xff1a; “ 人类工程学奇迹 ” 。 但是欣赏归欣赏&#xff0c;这种巨型工程项目如果出了啥子问题&…

感受野与权值共享

什么是全连接&#xff1f; 若有一幅100x100的图像&#xff0c;隐层有100个神经元&#xff0c;每个神经元与每个像素全部连接&#xff0c;则有100*100*100个连接&#xff0c;这就叫做全连接。 什么是局部连接&#xff1f; 若有一幅100x100的图像&#xff0c;隐层有100个神经元…

感受野浅析

感受野的讲解&#xff0c;我在网上查了好多都是错误的&#xff0c;浪费了大量时间&#xff0c;后来总结下来避免大家入坑 一、感受野的概念 感受野&#xff08;Receptive Field&#xff09;的定义&#xff1a;卷积神经网络每一层输出的特征图&#xff08;feature map&#xf…

CNN感受野计算

笔试过程中遇到了感受野计算的问题&#xff0c;赶快把不牢固的知识复习一下。 1 感受野的概念 在卷积神经网络中&#xff0c;感受野的定义是 卷积神经网络每一层输出的特征图&#xff08;feature map&#xff09;上的像素点在原始图像上映射的区域大小。 2 感受野大小的计算…

目标检测和感受野的总结和想法

点击上方“计算机视觉工坊”&#xff0c;选择“星标” 干货第一时间送达 作者丨pprp知乎&#xff08;已授权&#xff09; 来源丨https://zhuanlan.zhihu.com/p/108493730 编辑丨极市平台 导读 经典的目标检测如Faster R-CNN, YOLOv3等都用到了Anchor&#xff0c;本文详细介绍了…

感受野 深度理解

知乎是个好东西&#xff0c;深入理解一些理念&#xff0c;靠博客是不行的。 感受野计算和理解的内容参考自&#xff1a;https://zhuanlan.zhihu.com/p/44106492 / https://zhuanlan.zhihu.com/p/40267131 后两个卷积的内容参考自&#xff1a; https://www.zhihu.com/question…

卷积神经网络感受野的计算

1 到底什么是“感受野”&#xff08;接受野&#xff09;&#xff1f;——Receptive Field “感受野”的概念来源于生物神经科学&#xff0c;比如当我们的“感受器”&#xff0c;比如我们的手受到刺激之后&#xff0c;会将刺激传输至中枢神经&#xff0c;但是并不是一个神经元就…

深度学习-感受野与有效感受野

文章目录 感受野增加感受野有效感受野与反卷积的区别总结 感受野 卷积核的大小(高度和宽度)定义了一个区域的空间范围&#xff0c;改区域可以被卷积核在每个卷积步骤中修改&#xff0c;因而卷积核的大小称为卷积核的“感受野”。 感受野(receptive field, RF)&#xff0c;卷积…

3.3.2 感受野

3.3.2 感受野 1962年Hubel和Wiesel通过对猫视觉皮层细胞的研究&#xff0c;提出了感受野(receptive field)的概念&#xff0c;Fukushima基于感受野概念提出的神经认知机(neocognitron)可以看作是卷积神经网络的第一个实现网络。 3.3.6 卷积网络的感受野Receptive field (RF)以…

目标检测和感受野的总结

目录 1、感受野 2、理论感受野计算 2.1、自上而下感受野计算 2.2、自下而上的计算方法 3、作用 4、关系 5、总结 6、参考文献 经典目标检测和最新目标跟踪都用到了RPN(region proposal network)&#xff0c;锚框(anchor)是RPN的基础&#xff0c;感受野(receptive field…