qt的俄罗斯方块游戏移植到OK6410的修改
来源:互联网 发布:sql中% 编辑:程序博客网 时间:2024/04/29 10:07
这几天在学习QT编程,编写过一些基本的qt对话框和简单的界面,对于一些简单的qt库的应用,如button,text,还有layout等界面布局管理。本以为已经可以对qt已经初步掌握了,可是发现离开教程,离开书本等,自己编写的时候又遇到了很多问题,让自己无从下手。它不是基本qt的库函数的应用等,而是整个qt项目的设计的生疏,因为之前都是照着例子打进去,没有仔细考虑过设计的整体思路方法,当时只是为了熟悉qt的库和基本的编程。现在再次学习,发现了其实基本设计的思想也就是c++的面向对象的思路。在此,发表下自己的感想c++在软件设计上真的很重要。qt编程首先整体上把你要显示的整个界面定义成一个class,里面包含可以包含多个构造函数,去建设整个界面,可以包含公有的函数和私有函数等,为了给在信号函数和曹函数里面调用,因为qt是一个很大的界面库,里面自然包含很多类和函数以及发生事件,当我们需要的自己重新编写合适自己的类时,自然也要用到重载函数。在开始学习qt编写的时候,不怎么注意这方面,所以没有关注,不过从自己开始想去编一个俄罗斯方块游戏时,自然会想到该怎么去设计,然后去百度,查阅资料,发现自己的构思与之相差甚远,因此,仔细研究了一下,收获还是颇大的。再次给大家推荐一个博客,里面也讲的很仔细了。但是毕竟是别人的领悟,需要自己先去研究再来看,觉得映像才深,自然也会有一些共鸣,也会增加个人的信心。再次很感谢两位博主给的帮助。
http://www.cnblogs.com/tornadomeet/archive/2012/09/22/2698337.html
http://blog.csdn.net/xj178926426/article/details/7198279
下面说一下自己怎么修改俄罗斯方块游戏来适应是ok6410的屏幕显示吧。因为ok6410的现实屏幕是430*270的,直接把qt_quickly里面的俄罗斯方块游戏移植过去显示的时候是不方便的,看起来很别扭,显示不完,需要拉滚动条,所以需要修改界面的显示,方块组的大小,显示界面大小等。但是由于修改了后会引起方块的无法消除,这个问题纠结了我很久,百度也没有具体解决方案。经过几次排除法的调试总算调好了。它需要调的问题就是出在方块消除和满行上面的方块下移部分,这部分里面的那个for循环是重点,只要参数稍微改下,不适合的话就没有消除的效果。我为了移植到开发板上完全显示出来,把整个框架界面设计为了lcd大小,方块组变为原来的1/2,然而for循环里面的参数不能简单的一位直接缩小一半,这样的话就会出现消除不了的效果了。多说都是废话,还是上图,上代码吧。
#ifndef MYBOX_H#define MYBOX_H#include <QGraphicsObject>#include <QGraphicsItemGroup>// Сclass OneBox : public QGraphicsObject{public: OneBox(const QColor &color = Qt::red); QRectF boundingRect() const; void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); QPainterPath shape() const;private: QColor brushColor;};//class BoxGroup : public QObject, public QGraphicsItemGroup{ Q_OBJECTpublic: enum BoxShape {IShape, JShape, LShape, OShape, SShape, TShape, ZShape, RandomShape}; BoxGroup(); QRectF boundingRect() const; bool isColliding(); void createBox(const QPointF &point = QPointF(0, 0), BoxShape shape = RandomShape); void clearBoxGroup(bool destroyBox = false); BoxShape getCurrentShape() {return currentShape;}protected: void keyPressEvent(QKeyEvent *event);signals: void needNewBox(); void gameFinished();public slots: void moveOneStep(); void startTimer(int interval); void stopTimer();private: BoxShape currentShape; QTransform oldTransform; QTimer *timer;};#endif // MYBOX_H
myview.h#ifndef MYVIEW_H#define MYVIEW_H#include <QGraphicsView>class BoxGroup;// 2-5ӵĴ#include<phonon>class MyView : public QGraphicsView{ Q_OBJECTpublic: explicit MyView(QWidget *parent = 0);// 2-4ӵĴprotected: void keyPressEvent(QKeyEvent *event);public slots: void startGame(); void clearFullRows(); void moveBox(); void gameOver(); // 2-4ӵĴ void restartGame(); void finishGame(); void pauseGame(); void returnGame(); // 2-5ӵĴ void aboutToFinish();private: BoxGroup *boxGroup; BoxGroup *nextBoxGroup; QGraphicsLineItem *topLine; QGraphicsLineItem *bottomLine; QGraphicsLineItem *leftLine; QGraphicsLineItem *rightLine; qreal gameSpeed; QList<int> rows; void initView(); void initGame(); void updateScore(const int fullRowNum = 0); // 2-3ӵĴ QGraphicsTextItem *gameScoreText; QGraphicsTextItem *gameLevelText; // 2-4ӵĴ // QGraphicsWidget *maskWidget; // ְť QGraphicsWidget *startButton; QGraphicsWidget *finishButton; QGraphicsWidget *restartButton; QGraphicsWidget *pauseButton; QGraphicsWidget *optionButton; QGraphicsWidget *returnButton; QGraphicsWidget *helpButton; QGraphicsWidget *exitButton; QGraphicsWidget *showMenuButton; // ı QGraphicsTextItem *gameWelcomeText; QGraphicsTextItem *gamePausedText; QGraphicsTextItem *gameOverText; // 2-5ӵĴ Phonon::MediaObject *backgroundMusic; Phonon::MediaObject *clearRowSound;};#endif // MYVIEW_H
mybox.cpp#include "mybox.h"#include <QPainter>#include <QKeyEvent>#include <QTimer>OneBox::OneBox(const QColor &color) : brushColor(color){}QRectF OneBox::boundingRect() const{ qreal penWidth=0.5; return QRectF(-5-penWidth/2,-5-penWidth/2,10+penWidth,+10+penWidth);}void OneBox::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){ // ΪСʹͼ painter->drawPixmap(-5, -5, 10, 10, QPixmap(":/images/box.gif")); painter->setBrush(brushColor); QColor penColor = brushColor; // ɫȼС penColor.setAlpha(220); painter->setPen(penColor); painter->drawRect(-5, -5, 10, 10);}// ״ȱ߿С0.5أеСŲᷢײQPainterPath OneBox::shape() const{ QPainterPath path; path.addRect(-4.75, -4.75, 9.5, 9.5); return path;}//BoxGroup::BoxGroup(){ setFlags(QGraphicsItem::ItemIsFocusable); // 任
- qt的俄罗斯方块游戏移植到OK6410的修改
- Qt-4.7.3 到OK6410开发板的移植
- Qt做的俄罗斯方块游戏
- Qt做的俄罗斯方块游戏
- ok6410的mplayer移植
- [嵌入式]移植到纯净版本的uboot1.1.6过程--OK6410
- OK6410的Boa服务器移植
- OK6410的u-boot移植
- Qt Creator可执行程序移植到OK6410上
- qt移植到OK6410开发板linux系统过程
- qt在linux与ok6410上的安装移植(4)——插曲:ok6410与ubuntu的nfs共享
- boa移植到OK6410
- Mplayer移植到OK6410
- RTL8192SU移植到ok6410
- pocketsphinx移植到OK6410
- QT -WS俄罗斯方块游戏
- 大一写的俄罗斯方块游戏
- JS 写的俄罗斯方块游戏
- 92.Oracle数据库SQL开发之 修改表内存——数据库事务的事务锁
- Java实现1900年1月1日到2016年5月7日一共多少天?
- opencv学习笔记(二十一)——阈值操作
- 运算符运算等级划分
- 93.Oracle数据库SQL开发之 修改表内存——数据库事务的事务隔离级别
- qt的俄罗斯方块游戏移植到OK6410的修改
- xml特殊实体符号
- 94.Oracle数据库SQL开发之 修改表内存——数据库事务的SERIALIZABLE事务
- 95.Oracle数据库SQL开发之 修改表内存——查询闪回
- DLL文件的说明和使用
- 私人记录
- HDU1039
- 【Leetcode】Flatten Binary Tree to Linked List
- Oracle并行详解