猜猜看软件-学习总结(不定时更新)
学习总结
物联网 201211672109 黄润明
成果展示:
源码可以到我的百度云盘下载 http://pan.baidu.com/s/1qW9Qqo0
,用5以上的qt版本才能跑
建议手动将图片放到debug之后的源目录下
主界面
做一个简要的说明,游戏的界面如下图,点击start随机读取图片,图片下面有对应的按钮,中间会显示一个人的名字,选择你认为正确的图片点解下面的按钮。
开发过程介绍:
这个小游戏因为时间的关系并没有太完善,耗时大概4-6小时。开发环境是C++qt5.4,creator3.3.
老师你没看错,就是C++,然而我真的没有打算去学C#,,先跟老师你道个歉。
然而C#真的是门好语言,然而对我来说实在是没有必要去学。
回归正题,开发游戏还是一件十分有趣的事情,这个游戏我还是会去慢慢完善的。
总体思路是这样的,建立3个Qlabel类的标签用于显示图片,用Qpixmap类来读取图片,用一个
QString类的QVector存放照片的名字,利用C/C++自带的随机函数从QVector中摇出对应字符串;
猜对错只是用了一个普通的判断,名字相同就猜对,否则反之。其实我是知道老师不太想看我写这些的,总体思路还是要说一下的。
Debug部分才是关键,当然有些问题到现在还没有处理好,例如图片如何去适应label的尺寸大小,图片没办法完成分辨率的缩放。
这次猜猜看并没有用数据库,而是采用本地文件流读取的方法。这样会遇到有些bug,例如还没有按start的时候,按下图片按钮会导致程序崩溃,后来想了一下,是因为没有start的时候QVector并没有初始化
里面的值是不可知的,进行匹配会导致出错。也有图片没有成功读取的问题,根本原因是图片名字的不匹配,因为每个输入法的编码的方法都不一样,Qt要求都用标准的utf8字符,必须要使用文字格式的转换才能保证图片都能被顺利读取。
代码解读
信号和槽机制是 Qt 的核心机制,可以让编程人员将互不相关的对象绑定在一起,实现对象之间的通信。
就我个人来理解,信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁。
A对象声明信号(signal),B对象实现与之参数相匹配的槽(slot),通过调用connect进行连接,合适的时机A对象使用emit把信号带上参数发射出去,B对象的槽会就接收到响应。
信号槽机制有一些特点:
1. 类型安全:只有参数匹配的信号与槽才可以连接成功(信号的参数可以更多,槽会忽略多余的参数)。
2. 线程安全:通过借助QT自已的事件机制,信号槽支持跨线程并且可以保证线程安全。
3. 松耦合:信号不关心有哪些或者多少个对象与之连接;槽不关心自己连接了哪些对象的哪些信号。这些都不会影响何时发出信号或者信号如何处理。
4. 信号与槽是多对多的关系:一个信号可以连接多个槽,一个槽也可以用来接收多个信号。
下面是代码
<span style="font-size:12px;">void game::on_pushButton_clicked()//按下start下面这些就开始执行了~
{QVector<QString> a;<span style="color:#FF0000;"><span style="background-color: rgb(204, 204, 204);"> //手动加入的照片名~其实可以用迭代器设一个for循环,考虑到要修改照片名还是算了</span></span>a.push_back(tr("201211671103陈柏安.jpg"));a.push_back(tr("201211671102蔡小莹.jpg"));a.push_back(tr("201211671101蔡济屹.jpg"));a.push_back(tr("201211671105冯黄怡.jpg"));a.push_back(tr("201211671107何燕玲.jpg"));a.push_back(tr("201211671108黄春妹.jpg"));a.push_back(tr("201211671109黄立沛.jpg"));a.push_back(tr("201211671110赖嘉仁.jpg"));a.push_back(tr("201211671111黎绮霞.jpg"));a.push_back(tr("201211671112李思婷.jpg"));a.push_back(tr("201211671113练晓发.jpg"));a.push_back(tr("201211671115刘仙妹.jpg"));a.push_back(tr("201211671116卢泳蓬.jpg"));a.push_back(tr("201211671217彭政.jpg"));a.push_back(tr("201211671218戚水仙 .jpg"));a.push_back(tr("201211671219阮文栅.jpg"));a.push_back(tr("201211671220施学剑.jpg"));srand((int)time(0)); <span style="color:#FF0000;">//用当前时间设置随机种子</span>int x1,x2,x3;x1=random(16); <span style="color:#FF0000;"> //从0-15随机选取一个数值</span>x2=random(16);x3=random(16);while(x1==x2||x2==x3)<span style="color:#FF0000;"> //假如随机到的数字相同,那就在随机一遍呗</span>x2=random(16);while(x3==x1||x2==x3)x3=random(16);QPixmap pixmap(a[x1]); <span style="color:#FF0000;">//存储读取到的图片</span>ui->pic1->setPixmap(pixmap);<span style="color:#FF0000;"> //显示图片</span>//ui->pic1->resize(pixmap.width(),pixmap.height());ui->pic1->show();QPixmap pixmap1(a[x2]);ui->pic2->setPixmap(pixmap1);//ui->pic2->resize(pixmap.width(),pixmap.height());ui->pic2->show();QPixmap pixmap2(a[x3]);ui->pic3->setPixmap(pixmap2);//ui->pic3->resize(pixmap.width(),pixmap.height());ui->pic3->show();QVector<QString> b;b.push_back(a[x1]);b.push_back(a[x2]);b.push_back(a[x3]);ui->name->setText(b[rand()%3]); <span style="color:#FF0000;">//在随机到的3个图片中随机选取一个作为答案</span>a1=a;y1=x1;y2=x2;y3=x3;
}void game::on_pushButton_2_clicked()
<span style="color:#FF0000;">//按下图片对应按钮就知道你的答案到底对不对了</span>
{ if(ui->name->text()==a1[y1]){Dialog *d=new Dialog;d->show();}else{Dialog1 *d1=new Dialog1;d1->show();}
}</span>
收获
老师的要求里面有一些相当有趣的想法,但是具体还没有去实现,例如分数,排行榜,概率统计之类的功能。我以前就没有想过这些问题,以前总想写个猜猜看还不简单么,然后就直接无视了。其实能把简单的事都做好,那就是不简单了。作为一个程序员,我觉得最需要的品质之一就是学会创新,看了一下老师对于这个猜猜的想法,顿时发现自己太low了,自己也许太自以为是了一点。前段时间一直在投简历,找单位,复习。现在发现做个猜猜看确实是个很好的放松的方式,能使自己乐在其中。希望自己以后能找到个对口的工作,这样人生才不会太无趣。
学期初的时候选了两门编程类的mooc,是网易的,一门是C++初级程序设计,一门是paython,只能说水太深,我学c++也有一段时间了,然而那门初级C++我并不能轻松应付,一方面是我的基础确实不扎实,另一方面,他们的系统并不完善,许多方面需要改进,都是一些枯燥无趣的练习,完全没有坚持下去的动力,后来发现证书要交钱,100也确实不是个小数目,也就弃了,paython的话还是有在看的,视频质量还是相当不错的。
其实对本专业用C++作为第一语言感到非常的不解,难度不是一般的大,而且并没有真的把这门语言用上来。后来C51和stm32的课程都是使用C语言,到数据库课程要求的java,大部分人对此一无所知。至于后来的C#,大家都麻木了吧,没有一个更加专业和针对性的专业培养方案,作为一个普通的学生很容易迷茫。
猜猜看软件-学习总结(不定时更新)相关推荐
- 树莓派学习【不定时更新】
1.选择有很多一行一个关机方法. sudo shutdown -h nowshutdown -h 3:01sudo haltsudo poweroffsudo init 0 图形界面中选择shutdo ...
- linux学习笔记-不定时更新
手工添加Linux防火墙端口: 在Linux实际操作中经常需要对防火墙进行修改,比如经常要修改或添加相关端口,下面以添加运行Tomcat所需8080端口为例: (以下命令操作均为root用户) 1.编 ...
- Microsoft Office PPT 编程(VBA)学习 (不定时更新,正在学习 ing)
一.打开 控件工具箱 office 2003-2007:视图-->工具栏-->控件工具箱 office 2010:文件-->选项-->自定义功能区-->勾选右边的&qu ...
- 《猜猜看》游戏的开发总结
<猜猜看>游戏的开发总结 1.最终成果 1.1课程设计的目的 把软件工程中规范的软件开发方法应用到本次教师认识学生软件"猜猜看"的开发过程中,以经济地开发出高质量的软件 ...
- AirSim学习和踩坑记录(不定时更新)
版权声明:本文为博主原创文章,遵循Creative Commons - Attribution-ShareAlike 4.0 International - CC BY-SA 4.0版权协议,转载请附 ...
- 软件编程学习网站汇总——持续更新中
持续更新各种国内外关于编程语言学习及讨论的网站,有时间我会添加介绍,不过相信很多网站你们都熟悉了,喜欢的可以收藏,我也留着等以后需要的时候翻阅. 若链接有错误,提醒我下,我来改正.有其他好的站也可以推 ...
- fpga/嵌入式硬件初级工程师必备链接(不定时更新)
因为刚开始做FPGA这一块,工作不久,把遇到的好一些的资料整理下来,不定时更新,方便自己查看的同时,希望能给大家带来帮助,如果觉得有用的话请给个赞,谢谢. 1.工具使用类: 01.示波器使用方法: h ...
- JavaSE学习笔记(持续更新)
这里写目录标题 JavaSE学习笔记(持续更新) Java跨平台原理与核心机制 1.跨平台原理: 2.两种核心机制: JDK11的安装流程 Java程序开发的三个步骤(无编辑器版) Eclipse安装 ...
- Java开发面试高频考点学习笔记(每日更新)
Java开发面试高频考点学习笔记(每日更新) 1.深拷贝和浅拷贝 2.接口和抽象类的区别 3.java的内存是怎么分配的 4.java中的泛型是什么?类型擦除是什么? 5.Java中的反射是什么 6. ...
最新文章
- springMvc的执行流程(源码分析)
- ubuntu16.04安装cuda8./9.
- Jsp Spring Security 权限管理系统
- css中一些必要的公共样式
- K8S架构设计及工作流程分析
- Bootstrap 警告框
- linux getline参数,[置顶]linux getline()函数
- Linux命令--- /dev/null和/dev/tty
- html生成小窗口,用JS制作9种弹出小窗口(HTML)
- cmd 命令操纵文件管理器、创建(删除)多级文件夹
- CE安装时的报错处理
- PCM开发板模块实验指导--2.4G无线通讯模块NRF24L01实验
- 长沙地铁一号线大客流运输组织优化研究
- 安装gin和mod使用
- 麦肯锡问题分析与解决技巧 - 高杉尚孝
- 计算圆周率π的C++实现(任意精度)
- 金立m5android经常自启,金立M5(全网通)一键救砖教程,轻松刷回官方系统
- 使用Hexo构架个人网站
- Win10系统VS2022开发环境中(X86)Win32汇编(MASM32)环境配置和一些示例源码及解释
- 2017.10.27涩会题大乱斗部分题解
热门文章
- meltdown linux 内核,内核开发者称应更新Linux内核应对 Meltdown 和 Spectre漏洞
- 《谁说菜鸟不会数据分析》学习笔记 第五章数据分析
- dispose方法和setvisible方法的区别和使用
- jsp中request.getAttribute()和 request.getParameter()有何区别
- 《重新认识你自己》——拒绝向导,认识自己
- JAVA识别PDF和OFD电子发票并解析为java对象
- lightgbm java_LightGBM模型java部署
- 网络布线与综合布线系统学习
- 01卷起来啊,未末家的张先生(初章)
- 少有人走的路 读书笔记二