VS/Qt C++ 入门项目飞机大战(内含全部源代码,素材,项目工程,项目祥解)可直接运行

零、说在前面

最近做了个qt/c++的小项目飞机大战,主要是边玩边做,主要讲解一下设计思路,各个模块的实现原理,非常适合初学者拿来练手。需要源码、素材、项目详解、打包软件等整个项目用到的全部内容,可以加我wx公众号:酷玩软件乐园,后台回复:飞机大战,即可获取全部资源。话不多说一起来看看吧。

一、项目目录

1 项目简介
2 创建项目
3 设置主场景
4 资源导入
5 地图滚动
6 英雄飞机
7 子弹制作
8 玩家发射子弹
9 敌机制作
10 碰撞检测
11 爆炸效果
12 音效添加
13 打包发布

二、项目讲解

1 项目简介
飞机大战是我们都比较熟悉的小游戏,想必大家都有玩过,那你有没有想过去自己制作一个飞机大战的小项目呢,玩自己做的游戏会不会别有一番风味呢。下面就给大家讲解一下飞机大战的实现原理,只要照着教程做,每个人都可以是飞机大战的开发者。
首先来看一下效果图
在这里插入图片描述
玩家控制一架小飞机,然后自动发射子弹,如果子弹打到了飞下来的敌机,则射杀敌机,并且有爆炸的特效

2 创建项目

window端推荐用vs开发,下载qt插件开发qt项目,具体请直接百度一下,这里不再详解
linux只能用qt进行开发了,为了统一,这里直接使用qt开发,qt版本qt5,qt creator 4.0及以上

打开Qt Creator按照向导创建项目,基类选择 QWidget

3 设置主场景

创建新的头文件为 config.h 主要记录程序中所有的配置数据,方便后期修改

添加窗口宽度、高度的配置信息,依据背景图大小进行设置

/**********  游戏配置数据 **********/
#define GAME_WIDTH  512  //宽度
#define GAME_HEIGHT 768  //高度
#define GAME_TITLE "飞机大战 v1.0" //标题

在mainScene.h中定义initScene函数, 用来初始化游戏场景在mainScene.cpp中实现如下代码

void MainScene::initScene()
{
   
    //初始化窗口大小
    setFixedSize(GAME_WIDTH,GAME_HEIGHT);

    //设置窗口标题
    setWindowTitle(GAME_TITLE);
}

4 资源导入

生成qrc文件,生成res文件夹,生成res.qrc文件,将准备好的资源全部粘贴进res文件夹下,最后将res中的资源全部导进res.qrc中
qrc生成 rcc二进制文件
先配置好rcc.exe的文件路径:在系统环境变量中添加qt中rcc.exe的文件路径。
然后利用cmd打开终端,定位到res.qrc的目录下,输入命令

rcc -binary .\res.qrc -o plane.rcc

最后将生成好的rcc文件,放入到debug/release同级目录中一份

注册二进制文件
在config.h中追加配置数据

#define GAME_RES_PATH  "./plane.rcc" //rcc文件路径

在main.cpp中修改代码

#include “mainscene.h”
#include
#include
#include “config.h”

int main(int argc, char *argv[])
{
   
    QApplication a(argc, argv);

    //注册外部的二进制资源文件
    QResource::registerResource(GAME_RES_PATH);

    MainScene w;
    w.show();

    return a.exec();
}

5 地图滚动

添加map.h和map.cpp文件
在map.cpp中实现成员函数

#include "map.h"
#include "config.h"

Map::Map()
{
   
    //初始化加载地图对象
    m_map1.load(MAP_PATH);
    m_map2.load(MAP_PATH);

    //设置地图其实y轴坐标
    m_map1_posY = -GAME_HEIGHT;
    m_map2_posY = 0;

    //设置地图滚动速度
    m_scroll_speed = MAP_SCROLL_SPEED;
}

void Map::mapPosition()
{
   
    //处理第一张图片滚动
    m_map1_posY += MAP_SCROLL_SPEED;
    if(m_map1_posY >= 0)
    {
   
        m_map1_posY =-GAME_HEIGHT;
    }

    //处理第二张图片滚动
    m_map2_posY += MAP_SCROLL_SPEED;
    if(m_map2_posY >= GAME_HEIGHT )
    {
   
        m_map2_posY =0;
    }
}

在MainScene.cpp中实现成员函数

void MainScene::playGame()
{
   
    //启动定时器
    m_Timer.start();

    //监听定时器
    connect(&m_Timer,&QTimer::timeout,[=](){
   
        //更新游戏中元素的坐标
        updatePosition();
        //重新绘制图片
        update();
    }
  • 9
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值