QT笔记

经过漫长的假期,开学了。第二周实训QT。

首先是介绍,什么是QT。

QT:是一个跨平台C++图形用户界面应用程序开发框架。可以开发GUI程序,非GUI程序。

实训主要是写一个俄罗斯方块。未学过C++,前两天先介绍QT的基本使用,后两天老师带着敲俄罗斯方块代码,第四天直接根据给好的代码修改,实现给定的功能。

习题:

 1) 给游戏添加得分功能,消掉一行就得 100分

 2) 给游戏添加暂停,继续功能;

 3) 给游戏添加显示下一个方块组的功能

 4) 给游戏增加等级功能

 5) 发现重大BUG并解决掉,也给加分

 6) 自己增加其他特色功能,也给加分

完成功能1,2,4。

运行截图

附上代码。

grpbox.h

#ifndef GRPBOX_H
#define GRPBOX_H

#include <QObject>
#include <QVector>
#include <QPoint>

#include <QPainter>

#define  COL_NUM        15   //列数,X方向方块的个数
#define  ROW_NUM        25   //行数,Y方向方块的个数
#define  BOX_WIDTH      20   //方块的宽度

#define  AREA_WIDTH    (COL_NUM*BOX_WIDTH) //定义游戏区域的宽度
#define  AREA_HEIGHT   (ROW_NUM*BOX_WIDTH) //定义游戏区域的高度

//定义方块组的类型
enum ITEM_TYPE
{
    ITEM_1 = 0,		//长条
    ITEM_2,			//山字形
    ITEM_3,			//手枪形1
    ITEM_4,			//手枪形2
    ITEM_5,			//田
    ITEM_6,			//Z字形1
    ITEM_MAX,
};


class GrpBox : public QObject
{
    Q_OBJECT
public:
    explicit GrpBox(QObject *parent = 0);

    ~GrpBox();  //声明析构函数

    //在当前位置绘制方块组
    void DrawBoxGrp(QPainter& painter);
    void InitBoxGrp(ITEM_TYPE item, int style);

    //申明移动方块组的函数
    void MoveLeft(void);
    void MoveRight(void);
    void MoveDown(void);

    void CancelMoveDown(void); //取消方块组下移

    //改变方块组的形状
    void ChangeShape(void);

    //判断方块组是否左右越界
    bool HitSide(void);

    //判断方块组是否到达游戏底部
    bool HitBottom(void);

    //判断方块组是否碰到游戏区域的顶部
    bool HitTop(void);



public:
    QVector<QPoint>  mPoints;  //方块组包含的方块的坐标
    QPoint mCurPos;   //当前方块组位置,单位小方块个数

    ITEM_TYPE  mType; //保存方块组的类型
    int mCurStyle;    //保存方块组的样式,旋转角度 0 ~ 3

private:
    //声明创建不同类型的方块组的函数,nStyle 表示方块组的旋转角度
    void SetupItem1(int nStyle);  //长条型
    void SetupItem2(int nStyle);  //山字形
    void SetupItem3(int nStyle);  //手枪形1
    void SetupItem4(int nStyle);  //手枪形2
    void SetupItem5(int nStyle);  //田
    void SetupItem6(int nStyle);  //Z字形1


signals:

public slots:


};

#endif // GRPBOX_H

russboxwigdet.h

#ifndef RUSSBOXWIGDET_H
#define RUSSBOXWIGDET_H

#include <QWidget>

#include "grpbox.h"

#include <QVector>
#include <QPoint>

#include <QTimer>


#define  COL_NUM        15   //列数,X方向方块的个数
#define  ROW_NUM        25   //行数,Y方向方块的个数
#define  BOX_WIDTH      20   //方块的宽度

#define  AREA_WIDTH    (COL_NUM*BOX_WIDTH) //定义游戏区域的宽度
#define  AREA_HEIGHT   (ROW_NUM*BOX_WIDTH) //定义游戏区域的高度



namespace Ui {
class RussBoxWigdet;
}

class RussBoxWigdet : public QWidget
{
    Q_OBJECT

public:
    explicit RussBoxWigdet(QWidget *parent = 0);
    ~RussBoxWigdet();

    //绘制游戏区域
    void DrawGameArea(void);
    void CreateGrpBox(void);  //随机创建一个方块组

    void DrawGameGrpBox(void); //绘制当前方块组

    //将当前方块组添加到背景图案
    void AddCurGrpBack(void);
    void DrawGameBack(void); //绘制游戏背景图案

    //判断当前方块组的方块是否与背景图案重叠,如果重叠返回真,否则返回假
    bool CurBoxCoverBack(void);

    //判断是否满行,如果满行,就返回真,否则返回假 nRow为行号
    bool IsFullLine(int nRow);

    //消除满行的功能
    void DelFullLine(void);

    //删除背景图案中指定的行
    void DeleteLine(int nRow);

    //方块组下移处理
    void GrpMoveDownProcess(void);

    //下一组
    void DrawNextGrp(void);

    //比较成绩显示等级

    void ScoreCompare(void);


public slots:
    void BtnStartSlot(void); //声明开始游戏槽函数
    void RunTimeoutSlot(void); //定时器超时槽函数
    void StopSlot(void);//声明暂停游戏槽函数

private:
    Ui::RussBoxWigdet *ui;

    QTimer *pRunTimer;

    QVector<QPoint>  mBackPoints;  //保存游戏过程中的方块背景

    GrpBox *pCurGrpBox;  //指向当前方块组

    QPixmap *pAreaPixmap;  //保存游戏区域的图片
    QPixmap *pAreaPixmap1;//下一个

protected:
    //重新实现按键事件处理函数
    void keyPressEvent(QKeyEvent *e);
    long score;
    bool Pause;

};

#endif // RUSSBOXWIGDET_H

grpbox.cpp

#include "grpbox.h"

GrpBox::GrpBox(QObject *parent) : QObject(parent)
{

    //初始化方块组的起始位置为0
    mCurPos.setX(0);
    mCurPos.setY(0)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值