【QT】历时两个月,用QT实现超级玛丽,谁说QT不能写游戏?【附源码】

简介: 【QT】历时两个月,用QT实现超级玛丽,谁说QT不能写游戏?【附源码】


【写在前面,些许感慨】 
        c++课设做的项目,历时两个多月,写了4000余行代码,最终终于用QT从底层实现了超级玛丽。由于我能力有限,参考了一个大神的源代码(大神传送门),不过他是用VS写的,我是用QT写的,在一些方面还是有很大的差距。刚开始很绝望,项目重写了5、6次,以至于一度怀疑自己要不要写一个这样的项目(这就是刚开始规划的重要性),不过当我参考着源代码写完碰撞盒的时候,我就知道这个项目我可以做出来了。后面的代码都是我随意发挥,即兴挥毫。 

        相较于其他用平台做的也很好的同学,我花费的时间和代码量应该是他们的两到三倍(宿舍的一个大神,用平台写的特牛,但我看他也就1000多行)。难点在哪?第一就是碰撞盒的搭建,这是重中之重,当你处理好碰撞盒的时候,你的项目也就完成了一半。第二就是图片的处理,本项目参考了任天堂的做法,采用了拆图在拼图的方法。如下图马里奥的图片集合,无非就是用"截图"的方式,把用到的马里奥一个个抠出来,然后在拼装到合适的位置,我觉得这个步骤占据了我80%的时间,因为对这个图片掌握不是很详细,所以只能一步步尝试,一个坐标一个坐标的尝试,就像一个很简单的界面,功能很简单,但是由于图片拼装非常麻烦,所以100来行却花了两个多小时,诸如此类。难点不想再写了,要是想写,又是洋洋洒洒几千字,但我觉得没啥意义,最烦写报告了(一笑)。

        尽管用底层写一款游戏费的时间特别长,代码量又大,再加上用的是QT,非常不方便。但是通过这次游戏的开发,让我完整的走完了一遍游戏开发的流程,对游戏开发有了更深的感悟(发自内心的一句话,却有种套话的感觉),那些用平台以至于引擎写的同学不会体会到底层的浩瀚(嘿嘿)。

【写在前面,项目缺陷】 
碰撞盒:碰撞盒处理的不是很到位,所以碰撞有点问题,所以设置的马里奥是无敌的,不过死亡动画也写了。不信你按S。
流程的处理:刚开始连界面都没写(),后来我给补上了。但是死亡之后不会重新开始,这好像也挺简单,但就是没写。验收的时候老师也没说啥,毕竟写底层的就我一个人(帅气)。
由于当时图省事,大多数路径用的都是绝对路径,所以如果运行该项目,需要把路径替换成自己的,如下图路径。

【项目操作】
        估计都不用写吧。↓←→分别控制下蹲、移动。X 跳跃 Z发射子弹 

        骚操作:S 死亡 T 升级

【项目show】
放不了视频,贴几张GIF吧

 

 

 

 

 【QT知识的总结】
写给自己的,这次项目也遇到了一些QT知识的问题,整理一下。

1、强制类型转换(父转子)
TortoiseKing M = dynamic_cast<TortoiseKing>(b);
 b是父类的实例,TortoiseKing类是子类

2、计算时间戳
QDateTime::currentMSecsSinceEpoch();//13位,精确到毫秒
QDateTime::currentSecsSinceEpoch();//10位,精确到秒
long long int Level::calcTime()
{
// 计算当前的时间戳

return QDateTime::currentMSecsSinceEpoch();

}
3、图片翻转
pix = horFilp((pix.toImage());
QPixmap Level::horFilp(QImage image)
{

image = image.mirrored(true, false);
QPixmap pix1 =   QPixmap::fromImage(image);
return pix1;

}

 如上,将面向左的翻转成面向右的,反之。

4、图片截取
marioPix = QPixmap(s);
marioPix = marioPix.copy(x + j mx, y + i ny, width, heigh);
marioPix = marioPix.scaled(width2.5,heigh2.5);
 解析:把s这张图片赋予marioPix,copy(a,b,c,d)的作用:从marioPix这张图片的a,b位置开始截取,截取c*d大小的图片。scaled(a,b),宽高分别放大a、b倍

一个多月了,其他的还有一些,不整理了。

【写在后面】
QT确实不太适合做游戏......绘图事件都不好弄,所以只写了一个绘图事件,但是难度就给了全局变量的设置。不过底层实现对于学生而言还是比较牛掰的,所以课设成绩还不错。前三!

【源码】
链接:https://pan.baidu.com/s/1fKZbTg6HQUNZAInXu-cFLw?pwd=qtnb 
提取码:qtnb

相关文章
|
C++ Python
Qt+C++桌面计算器源码
Qt+C++桌面计算器源码
157 0
Qt+C++桌面计算器源码
|
2月前
|
编解码 开发工具 UED
QT Widgets模块源码解析与实践
【9月更文挑战第20天】Qt Widgets 模块是 Qt 开发中至关重要的部分,提供了丰富的 GUI 组件,如按钮、文本框等,并支持布局管理、事件处理和窗口管理。这些组件基于信号与槽机制,实现灵活交互。通过对源码的解析及实践应用,可深入了解其类结构、布局管理和事件处理机制,掌握创建复杂 UI 界面的方法,提升开发效率和用户体验。
151 12
|
2月前
|
Windows
QT源码拾贝6-11(qwindowswindow)
这篇文章深入探讨了Qt源码中与窗口激活相关的函数,QDebug运算符重载,vscode的变量提示,Windows常用类型名,获取所有窗体的方法,以及QSharedPointer智能指针的使用。
QT源码拾贝6-11(qwindowswindow)
|
2月前
|
存储 Java C++
QT源码拾贝0-5(qimage和qpainter)
这篇文章介绍了在Qt源码中qimage和qpainter的使用,包括线程池的使用、智能指针的存储、std::exchange函数的应用、获取类对象的方法以及QChar字节操作。
QT源码拾贝0-5(qimage和qpainter)
|
3月前
|
存储 C++
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
【C++】C++ 基于QT实现散列表学生管理系统(源码+数据+课程论文)【独一无二】
|
3月前
|
存储 算法 C++
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】
|
3月前
从源码角度分析Qt元对象系统2
从源码角度分析Qt元对象系统
54 0
|
3月前
|
存储
从源码角度分析Qt元对象系统1
从源码角度分析Qt元对象系统
76 0
|
3月前
|
存储 C++
【C++】C++ QT实现 学生信息管理系统(QT源码)【独一无二】
【C++】C++ QT实现 学生信息管理系统(QT源码)【独一无二】
|
4月前
|
JSON 自然语言处理 网络协议
基于QT实现的词典(附源码)
主要用到的技术:JSON字符串,堆栈窗体(方便以后加新功能),QTcpSocket,LcdNumber,时间戳的转换。 通信用的是TCP通信,将TCP封在了一个头文件中,哪个文件想去通过TCP链接发送消息就可以使用头文件 QT端写的是客户端,服务器还是在我笔记上次的Linux系统下写的服务器,做了一些小修改