近期培训期间做的基于C++的坦克小游戏,欢迎评论。
首先是主驱动部分:tankclient.h,和tankclient.cpp
tankclient.h部分
#ifndef TANKCLIENT_H
#define TANKCLIENT_H#include <QtGui/QMainWindow>
class Tank;//前置申明
class Missile;
class explode;
class TankClient : public QMainWindow
{
Q_OBJECT
public:
TankClient(QWidget *parent = 0);
~TankClient();
//画出图形的方法
void paintEvent(QPaintEvent *);
//定义坦克初始坐标
//static const int才能初始化
//int x,y;
//定义定时器的方法
void timerEvent(QTimerEvent *);
//定义键盘事件(压下)方法
void keyPressEvent(QKeyEvent *);
//定义键盘事件(松开)方法
void keyReleaseEvent(QKeyEvent *);
//持有一枚主站坦克
Tank* tank;
//持有装在子弹的集合(模板)
QList<Missile*> missiles;
//持有10辆敌军坦克
QList<Tank*> etanks;
//持有爆炸的集合
QList<explode*> explodes;
//定义游戏的分辨率
static const int GAME_W=500;
static const int GAME_H=400;
};
#endif // TANKCLIENT_H
tankclient.cpp部分
#include "tankclient.h"
#include <QtGui> //总的GUI函数的库文件
#include "tank.h"
#include "missile.h"
#include"explode.h"
TankClient::TankClient(QWidget *parent)
: QMainWindow(parent)
{
//创建窗体 ALT+/自动补全
//默认快捷方式ctrl+space
//设置标题
setWindowTitle(tr("坦克大战"));
//设置大小
setFixedSize(GAME_W,GAME_H);
//设置背景
setStyleSheet("background-color:black");
//初始化坐标
//x=200;
//y=200;
//启动定时器
startTimer(50);//参数:long(毫秒)
//初始化主站坦克
tank=new Tank(200,200,30,30,this,true);
//初始化敌军坦克
for(int i=0;i<10;++i){
Tank* t=
new Tank(30+40*i,350,30,30,this,false);
etanks.push_back(t);
}
}
//实现画图的方法
//当界面刷新的时候被系统自己调用
void TankClient::paintEvent(QPaintEvent *){
//输出
qDebug("paint...");
//创建画布对象
QPainter p(this);
//显示子弹的个数
p.setPen(Qt::white);
p.drawText(0,15,tr("子弹的个数:")+QString::number(missiles.size()));
//画出主站坦克
tank->draw(p);
//画出子弹
for(int i=0;i<missiles.size();i++){
//取出每一个子弹依次画出来
Missile* m=missiles[i];
m->draw(p);
//调用hitTanks
m->hitTanks(etanks);
m->hitTank(tank);
}
//画出敌军坦克
for(int i=0;i<etanks.size();i++){
Tank* t = etanks[i];
t->draw(p);
}
//画出爆炸效果
for(int i=0;i<explodes.size();i++){
explode* e = explodes[i];
e->draw(p);
}
//假设界面刷新的时候向右移动
//采用定时器或者多线程Thread
//x+=1;
}
//定义定时器的方法
void TankClient::timerEv