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

原创 2017年05月23日 08:11:07

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

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

必须 备注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/72636320
if(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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_26046771/article/details/72636320

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

屏幕上光有地图也不行,还需要我们的坦克加入其中 新建tank.h和tank.cpp tank.h里加入#ifndef TANK_H #define TANK_H #include"wanwu.h"...
  • qq_26046771
  • qq_26046771
  • 2017年06月03日 07:13
  • 4878

用Qt写的一个坦克大战游戏

学习C++有一段时间了,于是想做点项目练练手,苦于MFC学起来比较困难,就用Qt写了一个简单的坦克大战游戏,没有用复杂的算法,而是用的Qt库提供的库函数实现碰撞检测,这里的主要实现方法依靠getRec...
  • u010101067
  • u010101067
  • 2014年10月14日 16:45
  • 2736

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

坦克游戏,儿时的经典,同样是练手的经典小项目之一! 准备好开发环境 必须 备注1 备注2 window或linux系统 推荐window QT5.5以上 百度一下...
  • qq_26046771
  • qq_26046771
  • 2017年05月23日 08:11
  • 3753

[QT creator] 坦克大战!

首先!感谢大家试玩如此糟糕的游戏。辛苦大家乐!我不得不承认自己的不足,真是我第一次真正意义上写2D游戏!(以前用java 写的拼图,用虚幻三弄得简单的3D游戏应该不算吧!)          其次我...
  • nmnnbn
  • nmnnbn
  • 2014年04月16日 14:36
  • 2312

QT下实现的简单坦克大战

  • 2014年07月29日 22:15
  • 8.07MB
  • 下载

QT坦克大战源码

  • 2012年04月13日 17:58
  • 60KB
  • 下载

qt实现的坦克大战

  • 2014年09月24日 20:47
  • 6.15MB
  • 下载

(qt windows版)坦克大战单机版

  • 2013年04月19日 22:56
  • 17.82MB
  • 下载

Qt实战之贪吃蛇(1)

这是第一次用Qt写的有实际意义的小游戏,主要参考资料来自于Qt学习之路(2)和Qt文档,以及网上一些零碎的博客资料,还有很多可以优化的地方,以及一些小bug.[0]:开始界面的设置,为了方便起见,我使...
  • pp634077956
  • pp634077956
  • 2016年02月06日 17:33
  • 1199
收藏助手
不良信息举报
您举报文章:C++(qt)游戏实战项目:坦克大战(前言)
举报原因:
原因补充:

(最多只允许输入30个字)