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文件,放入到debug/release同級目錄中一份
注冊二進制文件
在config.h中追加配置數據
在main.cpp中修改代碼
#include “mainscene.h”
#include
#include
#include “config.h”
5 地圖滾動
添加map.h和map.cpp文件
在map.cpp中實現成員函數
在MainScene.cpp中實現成員函數
void MainScene::playGame() {//啟動定時器m_Timer.start();//監聽定時器connect(&m_Timer,&QTimer::timeout,[=](){//更新游戲中元素的坐標updatePosition();//重新繪制圖片update();}); }void MainScene::updatePosition() {//更新地圖坐標m_map.mapPosition(); }void MainScene::paintEvent(QPaintEvent *event) {QPainter painter(this);//繪制地圖painter.drawPixmap(0,m_map.m_map1_posY , m_map.m_map1);painter.drawPixmap(0,m_map.m_map2_posY , m_map.m_map2); }測試運行游戲,實現地圖滾動
6 英雄飛機
創建HeroPlane類以及生成對應的文件,和創建地圖的步驟一樣。
heroPlane.cpp中實現成員函數代碼:
拖拽飛機,在MainScene類中重寫鼠標事件
void MainScene::mouseMoveEvent(QMouseEvent *event) {int x = event->x() - m_hero.m_Rect.width()*0.5; //鼠標位置 - 飛機矩形的一半int y = event->y() - m_hero.m_Rect.height()*0.5;//邊界檢測if(x <= 0 ){x = 0;}if(x >= GAME_WIDTH - m_hero.m_Rect.width()){x = GAME_WIDTH - m_hero.m_Rect.width();}if(y <= 0){y = 0;}if(y >= GAME_HEIGHT - m_hero.m_Rect.height()){y = GAME_HEIGHT - m_hero.m_Rect.height();}m_hero.setPosition(x,y); }7 子彈制作
創建Bullet類以及生成對應的文件
在bullet.cpp中實現成員函數,代碼如下:
8 玩家發射子彈
之前在英雄飛機類中預留的一個shoot函數我們進行實現,代碼如下:
主場景中實現發射子彈
在MainScene.cpp的updatePosition成員函數中追加如下代碼
在MainScene.cpp的paintEvent成員函數中追加如下代碼:
//繪制子彈for(int i = 0 ;i < BULLET_NUM;i++){//如果子彈狀態為非空閑,計算發射位置if(!m_hero.m_bullets[i].m_Free){painter.drawPixmap(m_hero.m_bullets[i].m_X,m_hero.m_bullets[i].m_Y,m_hero.m_bullets[i].m_Bullet);}}9 敵機制作
創建EnemyPlane類以及生成對應的文件
在enemyPlane.cpp中實現成員函數,代碼如下:
10 碰撞檢測
在MainScene.cpp中添加collisionDetection并實現該成員函數
void MainScene::collisionDetection() {//遍歷所有非空閑的敵機for(int i = 0 ;i < ENEMY_NUM;i++){if(m_enemys[i].m_Free){//空閑飛機 跳轉下一次循環continue;}//遍歷所有 非空閑的子彈for(int j = 0 ; j < BULLET_NUM;j++){if(m_hero.m_bullets[j].m_Free){//空閑子彈 跳轉下一次循環continue;}//如果子彈矩形框和敵機矩形框相交,發生碰撞,同時變為空閑狀態即可if(m_enemys[i].m_Rect.intersects(m_hero.m_bullets[j].m_Rect)){m_enemys[i].m_Free = true;m_hero.m_bullets[j].m_Free = true;}}} }11 爆炸效果
創建Bomb類以及生成對應的文件
實現成員函數
在 MainScene.cpp的updatePosition中追加代碼
//計算爆炸播放的圖片for(int i = 0 ; i < BOMB_NUM;i++){if(m_bombs[i].m_Free == false){m_bombs[i].updateInfo();}}在 MainScene.cpp的paintEvent 中追加繪制爆炸代碼
//繪制爆炸圖片for(int i = 0 ; i < BOMB_NUM;i++){if(m_bombs[i].m_Free == false){painter.drawPixmap(m_bombs[i].m_X,m_bombs[i].m_Y,m_bombs[i].m_pixArr[m_bombs[i].m_index]);}}測試,實現爆炸效果
12 音效添加
在工程文件planeWar.pro 中修改代碼
在PlayGame中添加背景音樂
//啟動背景音樂QSound::play(SOUND_BACKGROUND);在爆炸時候添加爆炸音效
//播放音效QSound::play(SOUND_BOMB);13 打包發布
(1)確定環境變量配置好 PATH: C:\Qt\Qt5.x.x\5.x.x\mingw53_32\bin
(2)在QT中把運行模式切換成 release 模式, 編譯。 在外層目錄中會有 release 版本的目錄.
(3)將目錄中的 rcc 二進制資源文件、可執行程序文件(.exe) 拷貝到另外一個單獨的文件夾中.
(4)進入 cmd 命令模式,切換到可執行程序所在的目錄. 執行以下命令,將可執行程序所需的庫文件拷貝到當前目錄:c windeployqt PlaneWar.exe
(5)額外可以將 ico 圖標也拷貝到當前可執行程序所在的目錄.
(6)利用第三方打包軟件將exe文件進行打包
三、說在最后
這里只放了一下主要代碼,基本的實現函數都在文章中了,需要源碼、素材、項目詳解、打包軟件等整個項目用到的全部內容,可以加我wx公眾號:酷玩軟件樂園,后臺回復:飛機大戰,即可獲取全部資源,公號中分享了很多特別使用的軟件,都是免費贈送。
總結
以上是生活随笔為你收集整理的VS/Qt C++ 入门项目飞机大战(内含全部源代码,素材,项目工程,项目祥解)可直接运行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机中的cnc代表什么意思,CNC是什
- 下一篇: s3c2440移植MQTT