飞机大战向5个玩家好友请求下载

飞机大战源代码html5完整下载|全民飞机大战html5网站源码完整版-东坡下载
东坡下载:内容最丰富最安全的下载站!
→ 全民飞机大战html5网站源码 完整版
自己制作html游戏只需要一套好的源代码即可,东坡这附上html5游戏的完整源码,可以自己加一些喜欢的功能,制作一款属于你的html5打。全民飞机大战html5游戏网站源码介绍HTML5游戏全民飞机大战源码,玩法较为简单,飞机掉落速度越来越快,游戏结束后有分数显示,可以用来做分数比拼。其他功能有需求可以继续开发,比较适合学习使用!全民飞机大战游戏特色【乐斗模式】全新空战对抗模式,携经典国产IP葫芦娃强势来袭。玩家可以在此模式中体验到激烈对抗的竞技玩法,重温百分百还原的葫芦娃七大绝技,甚至还可以召唤传说中的葫芦山。创新的玩法模式将让你再一次回忆起经典的童年记忆。【西游取经路活动】活动模式新加西游取经路活动,固定每周五、六开放。玩家可以自由选择六架战机挑战传说九大妖王,全新的战斗体验、逆天的关卡玩法、丰厚的通关奖励,带你重温西游经典回忆~【王牌挑战赛】王牌挑战赛开放全国总决赛,四大赛区高手角逐全国总冠军,看谁才是真正的王牌飞行员!全体玩家还可以竞猜支持喜欢的选手,收获丰厚的奖励~【活动模式新增关卡】活动模式目前已开放疯狂金币关、Boss挑战、火线运输、魔方隧道和急速营救5个活动。新推出的急速营救活动,玩家需要在枪林弹雨之中营救跳伞的人质,每成功营救一名都可以获得积分奖励噢~【新增游戏内好友系统】新增游戏内好友系统,好友不再局限于你的微信/QQ关系链上的朋友,从今开始你也可以添加在游戏中匹配到的队友和PK的对手、甚至是附近一起游戏的玩家成为你游戏内的好友。【新增宠物合成系统】宠物系统合成新玩法,低星级宠物也可以通过不断合成转化为皇冠宠物。全新的皇冠宠物不仅拥有智能的攻击方式,还能释放强大的主动技能,让你的战斗变得更加轻松。【新增双打PK系统】PK新增双打模式,玩家可以邀请好友或者世界匹配进行双打PK,让PK变得更加激烈刺激。【新增双打系统】玩家可以邀请好友或者世界匹配进行双人同屏游戏,一起挑战新的难关。【新增飞行团系统】玩家可以组成多人飞行团一起游戏,团员可以接受飞行团任务或进行飞行团PK,为整个团体赢取荣誉点,同时团员还享有飞行团福利。【新的装备-技能系统,为你带来最梦幻的战斗体验】新增装备系统,主装备可以让战机拥有炫酷技能,进攻型、防御型、综合型等十几种技能任意挑选,分身、激光、护卫甚至时光减速,让你体验最梦幻的飞行战斗!【闯剧情模式,轻松收集装备宠物】剧情模式新增英雄难度!击败最顽强的敌人,获取丰厚的战利品。装备宠物轻松收集。【世界PK、好友PK,谁飞得更远,比比就知道!】高手苦于无对手,那就跟好友以及世界的飞行员们PK吧!比比谁是皇牌飞行员!同时还能赢取额外的奖励哦!心动不如行动!【积分商城,好礼等你来换!】积分商城开张啦,限时兑换高级飞机,高级萌宠!还有积分抽奖,有意外惊喜等着你哦!还等什么,赶快赢取积分,换取更多好礼哦!【新飞机、新道具、新系统,新体验!】神秘的新飞机将在意外的时间给你意外的惊喜;飞越巅峰更上一层楼,让你从更高的起点出发;成就系统闪亮登场,静悄悄的为你记录成长的脚步!不一样的新体验,拭目以待吧!【万人求合体】真正能与好友合体的!合体之后,机体更酷炫,弹幕更华丽,冲分更轻松!【超爽快战斗】最简单的操作,只要一只手指,就能自由驰骋天空!丰富多样的敌机让你感受刺激战斗,更多关卡等你来挑战!
安卓官方手机版
IOS官方手机版
全民飞机大战html5网站源码截图
全民飞机大战现在手机上必备的飞行射击游戏,现在腾讯一推出这款飞行游戏,就立刻吸引了很多喜欢玩这类游戏朋友的喜欢!全民飞机大战继承了以往手机上飞行游戏的大部分功能,但是又改变了很多地方,如界面操作以及游...
中文 / 57.9M二炮手内购破解版是根据同名电视
中文 / 24.8M琴帝赤子琴心破解版是一款画面非
中文 / 15.2M绝对暴爽的体验,绝对酷炫的玩法
中文 / 25.2M猫狗向来不共戴天,这次游戏就是
中文 / 9KB不同以往的铁血军事,这款应用以
中文 / 169.7M茫茫太空,谁与争锋!驾驶着概念
全民飞机大战html5网站源码 完整版
本类最新软件
本类软件推荐
22.5M / 05-09 / v1.51 绿色版
852KB / 05-08 / 5.04 中文特别版
26M / 05-08 / 5.6官方版
7.4M / 05-05 / 2.1 最新版
30.7M / 05-04 / 7.1.0官方正式版
本类软件排行
本类软件必备
编程编译数据设计
请简要描述您遇到的错误,我们将尽快予以修正。
轮坛转帖HTML方式
轮坛转帖UBB方式Qt游戏编程——飞机大战 - hao_zong_yin的博客 - CSDN博客
Qt游戏编程——飞机大战
—————QT—————
源码下载:http://download.csdn.net/detail/hao_zong_yin/9890778
这篇文章记录了我用一周的时间从零Qt基础到制作出飞机大战的过程。
Qt相比MFC封装好了大量函数,而且非常有条理。飞机大战的实现主要用到了Qt的信号与槽机制、事件响应机制、计时器、随机数、QPainter绘图以及最关键的图形视图框架,在做飞机大战之前,建议掌握以下内容:
1.了解信号与槽机制,熟练使用connect函数
2.了解Qt时间响应机制,并学会响应鼠标、键盘事件
3.学会用QTimer控制时间
4.学会生成随机数(本文制作的游戏基本全部使用随机数控制,如果要制作高质量游戏的话建议结合计时器自己写各物体的行为)
5.学会使用QPainter绘图
6.最关键的一点,一定要熟练掌握图形视图框架,这是本文游戏编程的核心
7.多百度,多参考帮助文档
这里强力推荐Qt社区的快速入门教程,上面的内容在基础篇基本全部包含,而且Qt社区有大量的下载资源:
http://www.qter.org/portal.php?mod=view&aid=26
建议下载Qt5版本,并下载版本新一点的Qt creator,网上很多下载教程与下载资源,这里不再啰嗦
当完成了上面全部内容后,就可以正式开始了:
PS:游戏逻辑我会放在最后介绍,当然读者也可以跳到下面及时参考游戏逻辑的代码
根据面向对象的思想,我们应该有一个飞行物体的抽象类,为游戏中的所有飞行物体提供一个接口,飞行物体有飞机和子弹,而飞机有分为玩家飞机和敌机,子弹也分为玩家子弹和敌机子弹,所以还要建飞机抽象类和子弹抽象类继承飞行物体抽象类,对于飞机类,编写玩家飞机实体类和敌机实体类来继承实现飞机抽象类,对于子弹类,编写玩家子弹实体类和敌机子弹实体类继承实现子弹抽象类,现在,读者便可以编写各式各样的飞机子弹了,编写完成后只要继承相应的玩家飞机、敌机、玩家子弹、敌机子弹类就可以了。为了更好的实现各式各样的飞机子弹,我们创建飞机工厂和子弹工厂,在工厂中创造我们需要的物体。
大体思路说完以后,我们来说说这几个类的具体实现。
先看最核心的的类——飞行物体抽象类,所有飞行物体都应该有大小、速度、图片,以及动画函数、碰撞检测函数和摧毁函数,然后编写飞机抽象类,飞机都有血量,而且都会发射子弹,还要有一个函数负责给飞机减血,之后编写子弹抽象类,子弹是飞机大战中最终要的元素,除了各式各样的图片外,还应该朝不同方向发射,这就需要一个角度。
对于实体类,首先要实现基类中的纯虚函数。对于玩家飞机,我们应该为其添加键盘控制,并在实现发射子弹函数时通过子弹工厂装填玩家子弹,对于敌机,为了游戏性读者应该会添加各式各样的杂鱼、BOSS来继承敌机类,这就需要我们为每种类型的敌机都添加其属于自己的子弹、动画效果,为了实现各种移动我们应该为其添加一个角度,便于在飞机工厂中及时控制。建各式各样的飞机飞行效果。玩家子弹、敌机子弹同理编写各式各样的子类,配合子弹工厂实现各种效果。
这里绘图,动画,碰撞检测函数系统都封装好了,完成了准备工作的读者应该可以熟练掌握。
除此之外游戏还有好多其他元素,比如各种补充包,我们可以写一个supply类继承飞行物体类,然后编写子类实现各种补充包。玩家技能则可以看做特殊的子弹继承子弹类,在子弹工厂中创造出来。动态效果的话可以用一组图片通过不断变换来实现,还有更多丰富功能请读者自行添加......
对于游戏逻辑,其实应该读者自己编写,我这里只提供了一个关卡的模板space,space应该具有一个update函数不断刷屏,配合系统提供的advance函数实现移动,同时用step变量来判断隔多久生成敌人、补充包,并用level判断一次生成多少个敌人,然后就是一些开始游戏、暂停游戏、游戏结束之类的逻辑以及显示界面了(这里我没有实现得分显示之类的,本来我想用QGraohicsTextItem实现的,结果发现确实dll而runtime error!)
说了这么多,该上代码了:
全局变量:
#ifndef GLOBAL_H
#define GLOBAL_H
//此代码仅是一个模板,元素比较单一,但功能接口比较全,各种类型都可以通过在相应的工厂中改变参数实现,或是继承强大的基类实现
//游戏效果可以在全局变量中便捷的控制,添加新元素时注意添加相应的全局变量
//某些细节可能不条理,可以进行适当地调整
//代码中间很少加注释,参考度娘
#include &QtWidgets&
#define BLOODSUPPLYNAME 1
#define BOMBSUPPLYNAME 2
#define BULLETSUPPLYNAME 3
#define PLAYERPLANENAME 4
#define ENEMYPLANENAME 5
#define PLAYERBULLETNAME 6
#define ENEMYBULLETNAME 7
#define BOMBNAME 8
#define SCENEWIDTH
#define SCENEHEIGHT
#define BLOODSUPPLYSIZE 30
#define BOMBSUPPLYSIZE 30
#define BULLETSUPPLYSIZE 30
#define PLAYERPLANESIZE 40
#define FISHSIZE 100
#define BOSSSIZE 200
#define PLAYERBULLETSIZE 20
#define FISHBULLETSIZE1 20
#define FISHBULLETSIZE2 20
#define FISHBULLETSIZE3 20
#define BOSSBULLETSIZE1 80
#define BOSSBULLETWIDTH2 200
#define BOSSBULLETHEIGHT2 40
#define BOSSBULLETSIZE3 200
#define BOSSBULLETWIDTH4 200
#define BOSSBULLETHEIGHT4 200
#define BOMBSIZE 800
#define BLOODSUPPLYSPEED 20
#define BOMBSUPPLYSPEED 20
#define BULLETSUPPLYSPEED 20
#define PLAYERPLANESPEED 10
#define FISHSPEED 10
#define BOSSSPEED 2
#define PLAYERBULLETSPEED 50
#define FISHBULLETSPEED1 20
#define FISHBULLETSPEED2 20
#define FISHBULLETSPEED3 20
#define BOSSBULLETSPEED1 5
#define BOSSBULLETSPEED2 20
#define BOSSBULLETSPEED3 20
#define BOSSBULLETSPEED4 5
#define BOMBSPEED 10
//UpdateTime, 因为包含一些内部逻辑, 直接改动可能会有错误, 改之前确保理解advance函数中step的意义
const int PLAYERSHOOTSTEP
const int BOSSSHOOTSTEP = 20;
const int FISHSHOOTSTEP = 20;
const int BOMBPIXSTEP = 10;
const int BOSSPIXSTEP = 10;
#define FISHSCORE 10
#define BOSSSCORE 1000
#define FISHHP 10
#define BOSSHP 1000
//UP(上限)
#define PLAYERPLANEBLOOD 3
#define PLAYERPLANEBOMB 3
#define PLAYERPLANEBULLET 3
//只实现了boss的动态、玩家的动态和炸弹动态,背景滚动和爆炸效果同理,这里懒得写了
//想要改变动态效果的话注意图片数量,然后自行在飞机、子弹工厂以及控制台中进行相应的改变
const QString background = &:/image/background/background.jpeg&;
const QString bloodsupplypix = &:/image/bloodsupply/bloodsupply.png&;
const QString bomb0 = &:image/bomb/bomb0.png&;
const QString bomb1 = &:image/bomb/bomb1.png&;
const QString bombsupplypix = &:/image/bombsupply/bombsupply.png&;
const QString boss0 = &:/image/enemyplane/boss0.png&;
const QString boss1 = &:/image/enemyplane/boss1.png&;
const QString boss2 = &:/image/enemyplane/boss2.png&;
const QString boss3 = &:/image/enemyplane/boss3.png&;
const QString bossbullet0 = &:/image/enemybullet/bossbullet0.png&;
const QString bossbullet1 = &:/image/enemybullet/bossbullet1.png&;
const QString bossbullet2 = &:/image/enemybullet/bossbullet2.png&;
const QString bossbullet3 = &:/image/enemybullet/bossbullet3.png&;
const QString bulletsupplypix = &:/image/bulletsupply/bulletsupply.png&;
const QString fish0 = &:/image/enemyplane/fish0.png&;
const QString fish1 = &:/image/enemyplane/fish1.png&;
const QString fish2 = &:/image/enemyplane/fish2.png&;
const QString fishbullet0 = &:/image/enemybullet/fishbullet0.png&;
const QString fishbullet1 = &:/image/enemybullet/fishbullet1.png&;
const QString fishbullet2 = &:/image/enemybullet/fishbullet2.png&;
const QString playerbullet0 = &:/image/playerbullet/playerbullet0.png&;
const QString playerbullet1 = &:/image/playerbullet/playerbullet1.png&;
const QString playerbullet2 = &:/image/playerbullet/playerbullet2.png&;
const QString playerplane0 = &:/image/PlayerPlane/playerplane0.png&;
const QString playerplane1 = &:/image/PlayerPlane/playerplane1.png&;
const QString playerplane2 = &:/image/PlayerPlane/playerplane2.png&;
const QString playerplane3 = &:/image/PlayerPlane/playerplane3.png&;
#endif // GLOBAL_H
飞行物体抽象类
#ifndef FLYER_H
#define FLYER_H
#include &QtWidgets&
#include &global.h&
typedef enum {UP, DOWN, LEFT, RIGHT} CHECK_FLAG;
typedef QList&QPixmap& QP
class Flyer : public QGraphicsObject
Flyer(qreal w, qreal h, qreal speed, const QPixmaps &pixs, QGraphicsScene *scene, QGraphicsItem *parent = 0)
: QGraphicsObject(parent), m_w(w), m_h(h), m_speed(speed), m_pixpos(0), m_step(0) {
for (int i = 0; i & pixs.size(); i++) {
QPixmap temp(pixs.at(i)),
t = temp.scaled(m_w, m_h, Qt::KeepAspectRatioByExpanding);
m_pixs.append(t);
scene-&addItem(this);
virtual ~Flyer() {}
virtual int name() const = 0;
virtual void posLost() = 0;
virtual void doCollide() = 0;
virtual void fall() = 0;
bool checkPos(CHECK_FLAG flag)
switch (flag) {
if (scenePos().ry() &= -m_h) ok =
case DOWN:
if (scenePos().ry() &= SCENEHEIGHT) ok =
case LEFT:
if (scenePos().rx() &= -m_w) ok =
case RIGHT:
if (scenePos().rx() &= SCENEWIDTH) ok =
protected:
qreal m_w, m_h, m_speed, m_//物体大小 & 速度 & 图片位置 & 动画控制
uint m_//因为要取余所以必须是int
QPixmaps m_
#endif // FLYER_H
飞机抽象类
#ifndef FLIGHTVEHICLE_H
#define FLIGHTVEHICLE_H
#include &flyer.h&
#include &unflyer.h&
class FlightVehicle : public Flyer
FlightVehicle(qreal blood, qreal w, qreal h, qreal speed, const QPixmaps &pixs, QGraphicsScene *scene, QGraphicsItem *parent = 0)
:Flyer(w, h, speed, pixs, scene, parent), m_blood(blood) {
virtual ~FlightVehicle() {}
virtual void strike() = 0;
virtual void shoot() = 0;
protected:
qreal m_//血量
//向控制中心发送消息更改显示, 注释的那一块崩了
void sig_score(int score);
//void sig_blood(int blood);
//void sig_bomb(int bomb);
void sig_fall();
#endif // FLIGHTVEHICLE_H
子弹抽象类
#ifndef BULLET_H
#define BULLET_H
#include &flyer.h&
#include &unflyer.h&
#include &math.h&
#define ROTATE 57.26
class Bullet : public Flyer
Bullet(qreal angle,
qreal w, qreal h, qreal speed, const QPixmaps &pixs, QGraphicsScene *scene, QGraphicsItem *parent = 0)
:Flyer(w, h, speed, pixs, scene, parent),
m_angle(angle),
xSpeed(::cos(m_angle / ROTATE) * m_speed),
ySpeed(::sin(m_angle / ROTATE) * m_speed) {
virtual ~Bullet() {
protected:
qreal m_angle, xSpeed, yS
#endif // BULLET_H
#ifndef PLAYERPLANE_H
#define PLAYERPLANE_H
#include &flightvehicle.h&
#include &bulletfactory.h&
class PlayerPlane : public FlightVehicle
PlayerPlane(qreal blood, qreal w, qreal h, qreal speed, const QPixmaps &pixs, QGraphicsScene *scene, QGraphicsItem *parent = 0);
~PlayerPlane();
QRectF boundingRect()
QPainterPath shape()
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
int name()
void advance(int);
void posLost();
void doCollide();
void fall();
void strike();
void shoot();
protected:
void keyPressEvent(QKeyEvent *event);
void keyReleaseEvent(QKeyEvent *event);
qreal m_bomb, m_//必杀技 & 子弹形态
bool W, A, S, D,
#endif // PLAYERPLANE_H
#include &playerPlane.h&
PlayerPlane::PlayerPlane(qreal blood, qreal w, qreal h, qreal speed, const QPixmaps &pixs, QGraphicsScene *scene, QGraphicsItem *parent):
FlightVehicle(blood, w, h, speed, pixs, scene, parent),
m_bomb(3), m_bullet(0), W(false), A(false), S(false), D(false), bomb(false) {
setPos((scene-&width() - m_w)/2, scene-&height() - m_h);
setFlag(QGraphicsItem::ItemIsFocusable);
PlayerPlane::~PlayerPlane() {
QRectF PlayerPlane::boundingRect() const
return m_pixs.at(0).rect();
QPainterPath PlayerPlane::shape() const
path.addRect(boundingRect());
void PlayerPlane::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
Q_UNUSED(option);
Q_UNUSED(widget);
painter-&drawPixmap(0, 0, m_pixs.at(m_pixpos));
int PlayerPlane::name() const {
return PLAYERPLANENAME;
void PlayerPlane::advance(int) {
if (m_step % PLAYERSHOOTSTEP == 0) {
if (m_step == PLAYERSHOOTSTEP * 10) m_step = 0;
if (W && checkPos(UP)) {
m_pixpos = 0;
QPointF pos = scenePos();
pos.ry() -= m_
setPos(pos);
if (S && checkPos(DOWN)) {
m_pixpos = 1;
QPointF pos = scenePos();
pos.ry() += m_
setPos(pos);
if (A && checkPos(LEFT)) {
m_pixpos = 2;
QPointF pos = scenePos();
pos.rx() -= m_
setPos(pos);
if (D && checkPos(RIGHT)) {
m_pixpos = 3;
QPointF pos = scenePos();
pos.rx() += m_
setPos(pos);
if (!W && !S && !A && !D) m_pixpos = 0;
doCollide();
void PlayerPlane::posLost() {
void PlayerPlane::doCollide()
foreach (QGraphicsItem *t, collidingItems()) {
if (t-&type() != UnFlyer::TYPE) {
Flyer *flyer = static_cast&Flyer*&(t);
switch (flyer-&name()) {
case ENEMYPLANENAME:
if (m_blood == 0) {
m_bomb = 0;
m_bullet = 0;
case ENEMYBULLETNAME:
flyer-&fall();
if (m_blood == 0) {
m_bomb = 0;
m_bullet = 0;
case BLOODSUPPLYNAME:
flyer-&fall();
if (m_blood & PLAYERPLANEBLOOD) {
m_blood++;
//emit sig_blood(m_blood);
case BOMBSUPPLYNAME:
flyer-&fall();
if (m_bomb & PLAYERPLANEBOMB) {
//emit sig_bomb(m_bomb);
case BULLETSUPPLYNAME:
flyer-&fall();
if (m_bullet & PLAYERPLANEBULLET) {
m_bullet++;
void PlayerPlane::fall()
setFlag(QGraphicsItem::ItemIsMovable, false);
setFlag(QGraphicsItem::ItemIsFocusScope, false);
setVisible(false);
deleteLater();
emit sig_fall();
void PlayerPlane::strike() {
//m_blood--;
//emit sig_blood(m_blood);
void PlayerPlane::shoot()
BulletFactory::PlayerBullets bullets = BulletFactory::pcreator(m_bullet, scene());
QPointF pos = scenePos();
pos.rx() += m_w / 2 - PLAYERBULLETSIZE / 2;
foreach (PlayerBullet* bullet, bullets) {
bullet-&setPos(pos);
if (bomb && m_bomb & 0) {
//m_bomb--;
BulletFactory::Bombs bombs = BulletFactory::bcreator(1, scene());
pos = scenePos();
pos.rx() += m_w / 2 - BOMBSIZE / 2;
pos.ry() -= BOMBSIZE / 2;
foreach (Bomb* bomb, bombs) {
bomb-&setPos(SCENEWIDTH / 2 - BOMBSIZE / 2, SCENEHEIGHT - BOMBSIZE);
void PlayerPlane::keyPressEvent(QKeyEvent *event)
switch (event-&key()) {
case Qt::Key_W:
event-&accept();
case Qt::Key_S:
event-&accept();
case Qt::Key_A:
event-&accept();
case Qt::Key_D:
event-&accept();
case Qt::Key_Space:
event-&accept();
event-&ignore();
void PlayerPlane::keyReleaseEvent(QKeyEvent *event) {
switch (event-&key()) {
case Qt::Key_W:
event-&accept();
case Qt::Key_S:
event-&accept();
case Qt::Key_A:
event-&accept();
case Qt::Key_D:
event-&accept();
case Qt::Key_Space:
event-&accept();
event-&ignore();
#ifndef ENEMYPLANE_H
#define ENEMYPLANE_H
#include &flightvehicle.h&
#include &bulletfactory.h&
class EnemyPlane : public FlightVehicle
EnemyPlane(qreal angle, qreal blood, qreal w, qreal h, qreal speed, const QPixmaps &pixs, QGraphicsScene *scene, QGraphicsItem *parent = 0);
~EnemyPlane();
QRectF boundingRect()
QPainterPath shape()
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
int name()
void posLost();
void strike();
protected:
qreal m_angle, x_speed, y_
#endif // ENEMYPLANE_H
#include &enemyplane.h&
EnemyPlane::EnemyPlane(qreal angle, qreal blood, qreal w, qreal h, qreal speed, const QPixmaps &pixs, QGraphicsScene *scene, QGraphicsItem *parent):
FlightVehicle(blood, w, h, speed, pixs, scene, parent), m_angle(angle),
x_speed(::cos(m_angle / ROTATE) * m_speed),
y_speed(::sin(m_angle / ROTATE) * m_speed) {
EnemyPlane::~EnemyPlane() {
QRectF EnemyPlane::boundingRect() const
return m_pixs.at(0).rect();
QPainterPath EnemyPlane::shape() const
path.addRect(boundingRect());
void EnemyPlane::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
Q_UNUSED(option);
Q_UNUSED(widget);
painter-&drawPixmap(0, 0, m_pixs.at(m_pixpos));
int EnemyPlane::name() const
return ENEMYPLANENAME;
void EnemyPlane::posLost()
setVisible(false);
deleteLater();
void EnemyPlane::strike() {
m_blood--;
敌机——杂鱼
#ifndef FISH_H
#define FISH_H
#include &enemyplane.h&
#include &randomizer.h&
class Fish : public EnemyPlane
Fish(qreal angle, qreal blood, qreal w, qreal h, qreal speed, const QPixmaps &pixs, QGraphicsScene *scene, QGraphicsItem *parent = 0);
void advance(int);
void doCollide();
void fall();
void shoot();
#endif // FISH_H
#include &fish.h&
Fish::Fish(qreal angle, qreal blood, qreal w, qreal h, qreal speed, const QPixmaps &pixs, QGraphicsScene *scene, QGraphicsItem *parent):
EnemyPlane(angle, blood, w, h, speed, pixs, scene, parent) {
Fish::~Fish() {
void Fish::advance(int)
if (m_step % FISHSHOOTSTEP == 0) {
if (m_step == FISHSHOOTSTEP * 10) m_step = 0;
QPointF pos = scenePos();
if (!checkPos(DOWN) || !checkPos(LEFT) || !checkPos(RIGHT)) {
posLost();
if (!checkPos(UP)) {
y_speed = -y_
pos.ry() += y_
pos.rx() += x_
setPos(pos);
doCollide();
void Fish::doCollide()
foreach (QGraphicsItem *t, collidingItems()) {
if (t-&type() != UnFlyer::TYPE) {
Flyer *flyer = static_cast&Flyer*&(t);
if (flyer-&name() == PLAYERBULLETNAME) {
flyer-&fall();
if (m_blood == 0) fall();
if (flyer-&name() == BOMBNAME) {
m_blood = 0;
void Fish::fall()
setVisible(false);
deleteLater();
emit sig_score(FISHSCORE);
void Fish::shoot()
int temp = Randomizer::creat(3);
if (temp == 0) temp = 3;
BulletFactory::EnemyBullets bullets = BulletFactory::ecreator(temp, scene());
QPointF pos = scenePos();
pos.rx() += m_w - FISHBULLETSIZE1;
pos.ry() += m_h;
foreach (EnemyBullet* bullet, bullets) {
bullet-&setPos(pos);
敌机——BOSS
#ifndef BOSS_H
#define BOSS_H
#include &enemyplane.h&
class Boss : public EnemyPlane
Boss(qreal angle, qreal blood, qreal w, qreal h, qreal speed, const QPixmaps &pixs, QGraphicsScene *scene, QGraphicsItem *parent = 0);
void advance(int);
void doCollide();
void fall();
void shoot();
//特殊控制boss图片变换
#endif // BOSS_H
#include &boss.h&
Boss::Boss(qreal angle, qreal blood, qreal w, qreal h, qreal speed, const QPixmaps &pixs, QGraphicsScene *scene, QGraphicsItem *parent):
EnemyPlane(angle, blood, w, h, speed, pixs, scene, parent), flag(1) {
Boss::~Boss() {
void Boss::advance(int)
if (m_step % BOSSPIXSTEP == 0) {
if (flag == 1 && m_pixpos == m_pixs.size() - 1) flag = -1;
else if (flag == -1 && m_pixpos == 0) flag = 1;
m_pixpos +=
m_step = 0;
if (m_step % BOSSSHOOTSTEP == 0) {
if (m_step == BOSSSHOOTSTEP * 1000) m_step = 0;
QPointF pos = scenePos();
if (!checkPos(UP) || !checkPos(DOWN)) {
y_speed = -y_
if (!checkPos(LEFT) || !checkPos(RIGHT)) {
x_speed = -x_
pos.ry() += y_
pos.rx() += x_
setPos(pos);
doCollide();
void Boss::doCollide()//Boss免疫大招
foreach (QGraphicsItem *t, collidingItems()) {
if (t-&type() != UnFlyer::TYPE) {
Flyer *flyer = static_cast&Flyer*&(t);
if (flyer-&name() == PLAYERBULLETNAME) {
flyer-&fall();
if (m_blood == 0) fall();
void Boss::fall()
setVisible(false);
deleteLater();
emit sig_score(BOSSSCORE);
void Boss::shoot()
//这里temp的值应该在工厂中有宏定义,从而增强可读性,懒得写了
if (1.0 * BOSSHP * 3 / 4 & m_blood && m_blood &= BOSSHP) temp = 4;
else if (1.0 * BOSSHP * 2 / 4 & m_blood && m_blood &= 1.0 * BOSSHP * 3 / 4) temp = 5;
else if (1.0 * BOSSHP * 1 / 4 & m_blood && m_blood &= 1.0 * BOSSHP * 2 / 4) temp = 6;
else if (0 & m_blood && m_blood &= 1.0 * BOSSHP * 1 / 4) temp = 7;
BulletFactory::EnemyBullets bullets = BulletFactory::ecreator(temp, scene());
QPointF pos = scenePos();
int bulletsize = BOSSBULLETSIZE1;
if (temp == 5 || temp == 6 || temp == 7) bulletsize = BOSSSIZE / 2;
pos.rx() += m_w / 2 - bulletsize / 2;
pos.ry() += m_h / 2;
foreach (EnemyBullet* bullet, bullets) {
bullet-&setPos(pos);
#ifndef PLAYERBULLET_H
#define PLAYERBULLET_H
#include &bullet.h&
class PlayerBullet : public Bullet
PlayerBullet(qreal angle, qreal w, qreal h, qreal speed, const QPixmaps &pixs, QGraphicsScene *scene, QGraphicsItem *parent = 0);
~PlayerBullet();
QRectF boundingRect()
QPainterPath shape()
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
int name()
void advance(int);
void posLost();
void doCollide();
void fall();
#endif // PLAYERBULLET_H
#include &playerbullet.h&
PlayerBullet::PlayerBullet(qreal angle, qreal w, qreal h, qreal speed, const QPixmaps &pixs, QGraphicsScene *scene, QGraphicsItem *parent)
:Bullet(angle, w, h, speed, pixs, scene, parent) {
PlayerBullet::~PlayerBullet() {
QRectF PlayerBullet::boundingRect() const
return m_pixs.at(0).rect();
QPainterPath PlayerBullet::shape() const
path.addRect(boundingRect());
void PlayerBullet::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
Q_UNUSED(option);
Q_UNUSED(widget);
painter-&drawPixmap(0, 0, m_pixs.at(0));
int PlayerBullet::name() const
return PLAYERBULLETNAME;
void PlayerBullet::advance(int)
if (!checkPos(UP) || !checkPos(DOWN) || !checkPos(LEFT) || !checkPos(RIGHT)) {
posLost();
QPointF pos = scenePos();
pos.rx() -= xS
pos.ry() -= yS
setPos(pos);
void PlayerBullet::posLost() {
setVisible(false);
deleteLater();
void PlayerBullet::doCollide() {
void PlayerBullet::fall() {
setVisible(false);
deleteLater();
#ifndef ENEMYBULLET_H
#define ENEMYBULLET_H
#include &bullet.h&
#include &math.h&
#define ROTATE 57.26
class EnemyBullet : public Bullet
EnemyBullet(qreal angle, qreal w, qreal h, qreal speed, const QPixmaps &pixs, QGraphicsScene *scene, QGraphicsItem *parent = 0);
~EnemyBullet();
QRectF boundingRect()
QPainterPath shape()
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
int name()
void posLost();
void advance(int);
void doCollide();
void fall();
#endif // ENEMYBULLET_H
#include &enemybullet.h&
EnemyBullet::EnemyBullet(qreal angle, qreal w, qreal h, qreal speed, const QPixmaps &pixs, QGraphicsScene *scene, QGraphicsItem *parent)
:Bullet(angle, w, h, speed, pixs, scene, parent){
EnemyBullet::~EnemyBullet() {
QRectF EnemyBullet::boundingRect() const
return m_pixs.at(0).rect();
QPainterPath EnemyBullet::shape() const
path.addRect(boundingRect());
void EnemyBullet::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
Q_UNUSED(option);
Q_UNUSED(widget);
painter-&drawPixmap(0, 0, m_pixs.at(0));
int EnemyBullet::name() const
return ENEMYBULLETNAME;
void EnemyBullet::advance(int)
if (!checkPos(UP) || !checkPos(DOWN) || !checkPos(LEFT) || !checkPos(RIGHT)) {
posLost();
QPointF pos = scenePos();
pos.rx() += xS
pos.ry() += yS
setPos(pos);
void EnemyBullet::posLost() {
setVisible(false);
deleteLater();
void EnemyBullet::doCollide() {
void EnemyBullet::fall() {
setVisible(false);
deleteLater();
飞机工厂:#ifndef PLANEFACTORY_H
#define PLANEFACTORY_H
#include &boss.h&
#include &fish.h&
#include &randomizer.h&
class PlaneFactory
typedef QList&Boss*& BossP
typedef QList&Fish*& FishP
static BossPlanes bcreator(uint flag, QGraphicsScene *scene);
static FishPlanes fcreator(uint flag, QGraphicsScene *scene);
#endif // PLANEFACTORY_H
#include &planefactory.h&
PlaneFactory::BossPlanes PlaneFactory::bcreator(uint flag, QGraphicsScene *scene)
switch (flag) {
t.append(QPixmap(boss0));
t.append(QPixmap(boss1));
t.append(QPixmap(boss2));
t.append(QPixmap(boss3));
int angle = Randomizer::creat(180);
temp.append(new Boss(angle, BOSSHP, BOSSSIZE, BOSSSIZE, BOSSSPEED, t, scene));
PlaneFactory::FishPlanes PlaneFactory::fcreator(uint flag, QGraphicsScene *scene)
for (uint i = 0; i & i++) {
int x = Randomizer::creat(3);
if (x == 1) t.append(QPixmap(fish0));
else if (x == 2) t.append(QPixmap(fish1));
else if (x == 0) t.append(QPixmap(fish2));
int angle = Randomizer::creat(180);
temp.append(new Fish(angle, FISHHP, FISHSIZE, FISHSIZE, FISHSPEED, t, scene));
}子弹工厂:
#ifndef BULLETFACTORY_H
#define BULLETFACTORY_H
#include &bomb.h&
#include &playerbullet.h&
#include &enemybullet.h&
class BulletFactory
typedef QList&Bomb*& B
typedef QList&PlayerBullet*& PlayerB
typedef QList&EnemyBullet*& EnemyB
static Bombs bcreator(uint flag, QGraphicsScene *scene);
static PlayerBullets pcreator(uint flag, QGraphicsScene *scene);
static EnemyBullets ecreator(uint flag, QGraphicsScene *scene);
#endif // BULLETFACTORY_H
#include &bulletfactory.h&
BulletFactory::Bombs BulletFactory::bcreator(uint flag, QGraphicsScene *scene)
switch (flag) {
t.append(QPixmap(bomb0));
t.append(QPixmap(bomb1));
temp.append(new Bomb(90, BOMBSIZE, BOMBSIZE, BOMBSPEED, t, scene));
//可以继续添加,实现各种大招
BulletFactory::PlayerBullets BulletFactory::pcreator(uint flag, QGraphicsScene *scene)
if (flag == 0) {//作弊模式
t.append(QPixmap(playerbullet0));
for (int i = 0; i & 12; i++) {
temp.append(new PlayerBullet(0 + 30 * i, PLAYERBULLETSIZE, PLAYERBULLETSIZE, PLAYERBULLETSPEED, t, scene));
if (flag &= 1) {
t.append(QPixmap(playerbullet0));
temp.append(new PlayerBullet(90, PLAYERBULLETSIZE, PLAYERBULLETSIZE, PLAYERBULLETSPEED, t, scene));
if (flag &= 2) {
t.append(QPixmap(playerbullet1));
for (int i = 0; i & 2; i++) {
temp.append(new PlayerBullet(80 + 20 * i, PLAYERBULLETSIZE, PLAYERBULLETSIZE, PLAYERBULLETSPEED, t, scene));
if (flag &= 3) {
t.append(QPixmap(playerbullet2));
for (int i = 0; i & 2; i++) {
temp.append(new PlayerBullet(40 + 20 * i, PLAYERBULLETSIZE, PLAYERBULLETSIZE, PLAYERBULLETSPEED, t, scene));
for (int i = 0; i & 2; i++) {
temp.append(new PlayerBullet(120 + 20 * i, PLAYERBULLETSIZE, PLAYERBULLETSIZE, PLAYERBULLETSPEED, t, scene));
//可以继续添加,让玩家变得更变态
BulletFactory::EnemyBullets BulletFactory::ecreator(uint flag, QGraphicsScene *scene)
QPixmaps t, t1, t2;
switch (flag) {
t.append(QPixmap(fishbullet0));
temp.append(new EnemyBullet(90, FISHBULLETSIZE1, FISHBULLETSIZE1, FISHBULLETSPEED1, t, scene));
t.append(QPixmap(fishbullet1));
for (int i = 0; i & 3; i++) {
temp.append(new EnemyBullet(80 + 10 * i, FISHBULLETSIZE2, FISHBULLETSIZE2, FISHBULLETSPEED2, t, scene));
t.append(QPixmap(fishbullet2));
for (int i = 0; i & 4; i++) {
temp.append(new EnemyBullet(0 + 90 * i, FISHBULLETSIZE3, FISHBULLETSIZE3, FISHBULLETSPEED3, t, scene));
t.append(QPixmap(bossbullet0));
for (int i = 0; i & 8; i++) {
temp.append(new EnemyBullet(0 + 45 * i, BOSSBULLETSIZE1, BOSSBULLETSIZE1, BOSSBULLETSPEED1, t, scene));
t1.append(QPixmap(bossbullet0));
for (int i = 0; i & 12; i++) {
temp.append(new EnemyBullet(0 + 30 * i, BOSSBULLETSIZE1, BOSSBULLETSIZE1, BOSSBULLETSPEED1, t1, scene));
t2.append(QPixmap(bossbullet1));
temp.append(new EnemyBullet(90, BOSSBULLETWIDTH2, BOSSBULLETHEIGHT2, BOSSBULLETSPEED2, t2, scene));
t1.append(QPixmap(bossbullet0));
for (int i = 0; i & 12; i++) {
temp.append(new EnemyBullet(0 + 30 * i, BOSSBULLETSIZE1, BOSSBULLETSIZE1, BOSSBULLETSPEED1, t1, scene));
t2.append(QPixmap(bossbullet2));
temp.append(new EnemyBullet(90, BOSSBULLETSIZE3, BOSSBULLETSIZE3, BOSSBULLETSPEED3, t2, scene));
t1.append(QPixmap(bossbullet0));
for (int i = 0; i & 36; i++) {
temp.append(new EnemyBullet(0 + 10 * i, BOSSBULLETSIZE1, BOSSBULLETSIZE1, BOSSBULLETSPEED1, t1, scene));
t2.append(QPixmap(bossbullet2));
temp.append(new EnemyBullet(90, BOSSBULLETSIZE3, BOSSBULLETSIZE3, BOSSBULLETSPEED3, t2, scene));
//推荐继续添加子弹,尤其是可以根据时间变化的子弹(用m_step控制)
太长了。。。。。。附加功能和游戏逻辑另写一篇:
http://blog.csdn.net/hao_zong_yin/article/details/
我的热门文章}

我要回帖

更多关于 好友请求 电影 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信