首页 > 代码库 > 桌面冰球游戏总结说明

桌面冰球游戏总结说明

桌面冰球游戏说明

 

桌面冰球游戏中使用的类与对象说明

 

Ball 类:

class Ball:public QGraphicsItem

成员属性:

Speed:速度

Angle:运动方向

Ratio:图形比例

Radius:球的半径

操作属性:

Advance:根据单位采样时间前进;

    xvel =speed*1.0/FRECUENCY *qCos(angle);

      yvel = speed*1.0/FRECUENCY *qSin(angle);

    collisionCalcualte(collisionType direction)//计算碰撞后的速度和方向

    setPos():设置位置

    void setSpeed(qreal);

    void setAngle(qreal);

 

GraphWidget

成员属性:

    GameWidget * game;创建父对象的指针,便于传递信息

    QPointF ballPosition;球的位置

    QPointF HandlePosition; 操作手柄的位置

    timerId; 定时器id,定时器用于产生基本的更新时间周期

    Ball *ballmove; 冰球

    Frame *frame; 边框

    Frame * frameUp;

    Frame * frameLeft;

    Frame * frameDown;

    Frame * frameRight;

userHandle * userhandle;  手柄

    QGraphicsScene *scene;场景对象,将item加入其中

    gameScoreText:得分文本

 

    操作属性:

timerEvent:定时器回应函数:

获取当前ballHandle位置信息,传递给上层gamewidget

进行碰撞检测:获取碰撞信息传递给Ball用于更新速度

     获取碰撞信息,决定游戏状态

运动物体的运动更新ballmove->advance();

 

GameWidget

    成员属性:

    QLabel *labelBall

    QLabel *labelHandle

    QLineEdit *editBall:显示当前球的坐标(单位:像素)

    QLineEdit *editHandle:显示当前Handle的坐标(单位:像素)

 

GraphWidget *showwidget:游戏动画界面对象

    操作属性:

    setPosition():获取下一级成员showwidgetposition属性,显示到界面上

 

 

 

动作:

 

等待开始:

暂停:

 

进球之后触发的事件:

球的位置复原;

更新分数;

 

 

重置:

球的位置复原;

分数重置;

 

 

编程技巧与错误总结:

基本的编程语法要熟悉,比如if语句,case语句,语句的排列顺序暗含了一定的优先级,if...if if...else if 是不同的,在代码段中加上returncontinuebreak等语句可能产生不同的效果。

固定的可更改的参数,例如周期频率、弧度PI等可以用宏定义实现,方便更改。

一系列的状态可以用enum枚举类型实现,字面意义很明确

 

充分利用Qt的信号与槽机制,完成数据的共享与信息的传递,自身的信号和槽能够和另外的一个类的信号与槽连接。单向的信息传递只需要用简单的信号与槽的连接实现。

不认识的类与函数要主动在网上查询。不断尝试看帮助文档,许多的类属性功能的特点都是类似的,甚至是可以猜测出来的,逻辑都十分清楚。函数功能不一定要记住,但是应该基本熟悉,掌握套路。书本上和官方的例程。

不同的功能用不同的类实现,特定的功能放置在相应的类中实现。

在有一定的基础的前提下,可以预先设计相应的类,写出想要的属性和操作,不同的类之间减少耦合,独享和共享的数据分离开,信号的传递方向要明确。

 

 

桌面冰球游戏总结说明