C++(qt)游戏实战项目:坦克大战(前言)

来源:互联网 发布:压缩算法 pdf 编辑:程序博客网 时间:2024/06/08 15:29

坦克游戏,儿时的经典,同样是练手的经典小项目之一!
这里写图片描述

这里写图片描述
准备好开发环境

必须 备注1 备注2 window或linux系统 推荐window QT5.5以上 百度一下就知道

整体框架伪代码描述

游戏开始游戏初始化while(true){从消息队列收集信号signal   swtich(signal){      case: 绘图信号        绘图信号处理函数        break;      case:键盘信号        键盘信号处理函数        break;      case:鼠标信号        鼠标信号处理函数        break;      case:时钟信号        时钟信号处理函数        break;    }}绘图信号处理函数(){地图对象->display();玩家坦克->display();............}地图类::display(){每个地图块对象->display();}键盘信号处理函数(){ if(按下M键)      游戏状态gamestatus设为地图编辑状态mapedit//地图编辑状态//author http://blog.csdn.net/qq_26046771/article/details/72636320if(gamestatus==mapedit){  else if(按下S)      保存地图  else  if(按下l)      载入地图 发送重绘信号  }..................if(gamestatus==gameing){   switch(key){    case:上    玩家坦克->setdir(UP);     break;     .....     ...     case:j     玩家状态设置为攻击状态     break;     defalut:发送重绘信号   }  }}鼠标信号处理函数(){   if(gamestatus=mapedit)  {  .....  }}时钟信号处理函数(){玩家坦克->move();//改变玩家对象的坐标 、碰撞检测等等敌人坦克-move();玩家炮弹->move();敌人炮弹->move();//改变对象的坐标 、碰撞检测等等,如果碰撞到玩家要将玩家的血量减少,全局变量player.downlife();if(玩家坦克处于攻击状态&&gamei%n==0)//gamei表示第几帧,通过调节n可以改变攻击速度玩家->attack();.............}attack(){将一颗炮弹对象加入到炮弹链表}

以上伪代码中主循环信号的收集和派发已经由Qt帮我们封装完成,我们需要完成的是各个信号处理函数和类的编写,类的结构层次如下

类 父类 备注 Wanwu 无 抽出坦克,炮弹,地图块等共性的类 Mapcell Wanwu 地图块类 Gamemap 无 地图类,包含地图块指针的二维矩阵 Tank Wanwu 坦克 PlayTank Tank 玩家坦克 BadTank Tank 敌人坦克类 Boom Wanwu 爆炸类 Bullet Wanwu 子弹类

Wanwu类,先完成我们的万物类

//file:wanhu.h#ifndef WANWU_H#define WANWU_H#include<QPoint>#include<QRect>#include<QPainter>enum Dir { UP, DOWN, LEFT, RIGHT };class Wanwu{ protected:    // 计算势力范围    virtual void CalculateSphere() = 0;    // 位置    QPoint m_pos;    // 势力范围    QRect m_rectSphere;    // 颜色    //QColor m_color;    // 方向    Dir m_dir;    // 存在状态    bool m_bDisappear;    // 单次前进步长    int m_step;    //生命值    float life;    //护甲    float hujia;    //魔抗    float mokang;    //物理攻击    float wuli;    //法术攻击    float fashu; public:       Wanwu(){};       // 绘图       virtual void Display(QPainter &paint) = 0;       // 移动       virtual void Move() = 0;       // 判断是否消失       bool IsDisappear(){return m_bDisappear;}       //判断两物体是否碰撞       bool IsBoom(const Wanwu &wanwu)const;       //       void SetDisappear(bool tmp){m_bDisappear=tmp;}       //       QPoint getpos(){return m_pos;}};#endif // WANWU_H
//file:wanwu.c#include "wanwu.h"bool Wanwu::IsBoom(const Wanwu &wanwu)const{bool isok=true;if(wanwu.m_rectSphere.left()>m_rectSphere.right()||wanwu.m_rectSphere.right()<m_rectSphere.left()||wanwu.m_rectSphere.top()>m_rectSphere.bottom()||wanwu.m_rectSphere.bottom()<m_rectSphere.top())isok=false;return isok;}//可能以后地图块也可以移动和攻击,就这样吧

前言和第一章完成基本的类,第二章程序可以跑动起来,我们将看到地图界面
本文素材地址链接: https://pan.baidu.com/s/1qYRnTs4 密码: fhet,
自己动手先试试,后面某章中将提供整个项目源代码。
下一章C++(qt)游戏实战项目:坦克大战(一)将完成地图块的类
本文章为作者原创
转载请标明本文地址:http://blog.csdn.net/qq_26046771/article/details/72636320