猜猜看软件-学习总结(不定时更新)

原创 2015年07月10日 19:32:16

学习总结

物联网 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#,大家都麻木了吧,没有一个更加专业和针对性的专业培养方案,作为一个普通的学生很容易迷茫。

软件学习经验总结

前言:以下观点纯属个人的观点,对自己大学四年摸索,迷茫的总结。(不同意勿喷!)        软件学院大部分的人应该都和我一样,大一刚进来的时候对编程从未接触。对于墙外面的人来说,编程的世界充满好...
  • wegoteam
  • wegoteam
  • 2014年05月23日 13:54
  • 443

C#课程设计:《猜猜看》游戏开发总结

信管1121,201211671117,聂双燕 第一部分:开发要求(完整要求见课程考核说明编程组和游戏说明) 1. 随机显示 一个名字 与 3张相片,选择正确的相片; 2. 随机显示 一张相片 ...
  • sunshinegyan
  • sunshinegyan
  • 2015年07月04日 23:08
  • 1445

JDBC总结(不定时更新)

那些名词: JDBC API:应用程序开发者使用的api. JDBC驱动管理器:Sun公司为第三方驱动程序提供的驱动管理器. JDBC驱动程序:由第三方供应商提供的java与数据库连接的桥梁. JDB...
  • cafune
  • cafune
  • 2015年04月25日 14:19
  • 106

软件工程期末总结

软件工程期末总结 软件工程的确是一门令人印象深刻的课程,特别是大作业。回想起来,还是有一点感慨的。 虽然作业已经结束了,不过我的工作到底怎么样,也还暂时不能盖棺定论,只希望不会出现什么恶性bug。...
  • KangGuangLi125
  • KangGuangLi125
  • 2018年01月07日 15:10
  • 33

AI学习总结

AI学习总结 快捷键整理 打开文件 Ctrl+O 新建窗口 Ctrl+N 原位粘贴到原图层前层 Ctrl+F 原位粘贴到原图层后层 Ctrl+B 锁定选择对象 Ctrl+2 全部解锁 Ctr...
  • qq_41579802
  • qq_41579802
  • 2018年01月15日 19:33
  • 23

好用的软件--不定时更新

OCR识别 pdf 可以用福昕的或者迅捷的,但是无一例外OCR识别要么图片大小有要求,要门只能识别文件前5页,下方网站亲测,识别率极高,没有图片大小限制的图片识别网站 https://zhcn.109...
  • Sicily_winner
  • Sicily_winner
  • 2018年01月04日 12:31
  • 39

软件工程之学习总结

软件工程之相关文档。
  • Dongle_74
  • Dongle_74
  • 2015年11月04日 21:14
  • 1034

笔记(不定时更新)

1、java.lang.UnsupportedOperationException 今天开发时遇到了这样一个异常java.lang.UnsupportedOperationException ...
  • gcz564539969
  • gcz564539969
  • 2012年11月07日 09:52
  • 372

代码规范(不定时更新)

转别人的或者自己总结的 http://www.jianshu.com/p/430e67045220
  • u012904691
  • u012904691
  • 2017年07月28日 16:35
  • 79

vim命令【不定时更新】

移动光标 上一行:k 下一行:j 上一字符:h 下一字符:l 下一个单词的首字母:w 查找替换 查找: :/keyword 替换: 全文替换: :%s /src/dst/g 文本操作...
  • Handsome2734
  • Handsome2734
  • 2014年03月31日 10:54
  • 331
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:猜猜看软件-学习总结(不定时更新)
举报原因:
原因补充:

(最多只允许输入30个字)