QT5实现贪吃蛇使用图形视图构架
2016-10-19 17:22
225 查看
最近学了一段时间QT,写个程序巩固一下所学。
这个贪吃蛇程序参考了很多Qt学习之路2的代码,我把里面有些我看不懂的部分换成了自己写的,总体功能还是实现了,但有很多Bug,希望各位指正。
首先是QGraphicsView,因为我希望能够,自定义背景,所有我写了个Map类继承了它,然后重写了他的drawBackground(),这样就可以自定义不同的图片来做背景了。同时也不用担心尺寸大小的问题,关于尺寸的我都用了.width(),.height()。函数取的所有尺寸会跟着图片大小变。
重点是蛇的移动这样我看不懂,我用了个QList来存储蛇的身体,然后takelast()取出最后一个值,然后加到头取,实现移动。如果吃到food就不会用takelast()了,直接在头insert()对应的点。
QGraphicsItem的碰撞函数cooidingItems()还是很屌的,蛇自己吃到自己我本来想用自己碰撞自己,然后读他的data()(事先设置了),发现读不出来好像自己碰撞自己检测不出来,用的是QList自带的contains(),要记得去掉头。
Timer和advance()的使用是写这个游戏的关键,有点像滴答定时器,可以设置这个游戏每秒多少帧。
因为主显示是个继承QMainWindow的类就在工具栏加了两个工具按钮实现结果如图:
建议使用大点的显示器。
代码的下载如下:
http://download.csdn.net/detail/u013239402/9658160
这个贪吃蛇程序参考了很多Qt学习之路2的代码,我把里面有些我看不懂的部分换成了自己写的,总体功能还是实现了,但有很多Bug,希望各位指正。
首先是QGraphicsView,因为我希望能够,自定义背景,所有我写了个Map类继承了它,然后重写了他的drawBackground(),这样就可以自定义不同的图片来做背景了。同时也不用担心尺寸大小的问题,关于尺寸的我都用了.width(),.height()。函数取的所有尺寸会跟着图片大小变。
重点是蛇的移动这样我看不懂,我用了个QList来存储蛇的身体,然后takelast()取出最后一个值,然后加到头取,实现移动。如果吃到food就不会用takelast()了,直接在头insert()对应的点。
QGraphicsItem的碰撞函数cooidingItems()还是很屌的,蛇自己吃到自己我本来想用自己碰撞自己,然后读他的data()(事先设置了),发现读不出来好像自己碰撞自己检测不出来,用的是QList自带的contains(),要记得去掉头。
Timer和advance()的使用是写这个游戏的关键,有点像滴答定时器,可以设置这个游戏每秒多少帧。
因为主显示是个继承QMainWindow的类就在工具栏加了两个工具按钮实现结果如图:
建议使用大点的显示器。
代码的下载如下:
http://download.csdn.net/detail/u013239402/9658160
相关文章推荐
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- 使用视图链接功能 实现IAdaptable接口
- 使用Eclipse RCP创建视图并实现视图间消息传递(二)
- 使用Eclipse RCP创建视图并实现视图间消息传递
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- 使用cvCopy实现对不规制图形的提取【转】
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- 使用SVG实现3D图形显示,移动和旋转
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(二)----使用方法
- C++--如何实现SDI程序使用CSplitterWnd创建的多个视图的动态地显示和关闭视图
- C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(二)
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(二)----使用方法
- 在C#中使用异步Socket编程实现TCP网络服务的C/S的通讯构架(一)----基础类库部分
- C#使用异步Socket实现TCP网络服务的CS的通讯构架(二)使用方法
- 在Java中使用JGraph实现图形绘制
- 【转载】使用GDI+变换矩阵实现图形的平移、缩放及旋转