sponsored links

Qt的圖形檢視框架編一個簡單的射擊遊戲

要求:按空格鍵,玩家發射子彈,子彈(長條形)從玩家(player,底邊上的大正方形)所在位置自行向上運動。而敵人(小正方形)在檢視窗體頂部的隨機位置出現,並且自動向下運動。如果子彈和敵人兩個物件發生碰撞那麼,子彈和敵人一塊報銷(delete);如果沒遇到敵人,子彈離開檢視窗體邊界時被delete以節省記憶體。

Qt的圖形檢視框架編一個簡單的射擊遊戲


用圖形檢視礦建編寫的簡單射擊遊戲

程式設計要點:

1. 一個類要用到connect函式,那麼這個類就需要做到三點:

(1)類的標頭檔案需要#include <QObject>

(2)除了繼承QGraphicsRectItem類,還必須繼承QObject類

(3)類的定義中,必須用到Q_OBJECT宏

2. 子彈圖項自動運動,透過定時器QTimer,connect槽函式move()實現。敵人圖項也是如此。

3. 設定圖項(玩家)的焦點特性,然後才可以接受鍵盤事件、滑鼠事件。按空格鍵發射子彈,建立子彈圖項後,用scene()方法返回場景的指標,從而將子彈新增到場景中去, scene( )->addItem(item).

4. 鍵盤事件程式的重寫,用游標鍵控制玩家的左右移動,用空格鍵發射子彈。

5. 為防止因為子彈和敵人運動導致場景不斷擴大,進而導致檢視窗體的捲軸不斷滾動,採取的辦法是設定檢視窗體為固定大小。

6. 子彈和敵人如果發生碰撞,場景首先remove它們,然後再delete它們。

7. 圖項(子彈、敵人)離開檢視窗體後,delete這些物件,以節省記憶體空間。

這裡給出子彈類的程式碼:

-----------------bullet.h------------------

#ifndef BULLET_H

#define BULLET_H

#include <QGraphicsRectItem>

#include <QObject>

class Bullet: public QObject,public QGraphicsRectItem

{

Q_OBJECT //因為bullet要用到connect()函式,要使用這個宏,同時類要繼承QObject類

public:

Bullet();

public slots:

void move(); //槽函式

};

#endif // BULLET_H

-----------------bullet.cpp------------------

#include "bullet.h"

#include "Enemy.h"

#include <QGraphicsRectItem>

#include <QTimer>

#include <QGraphicsItem>

#include <QObject>

#include <QGraphicsScene>

#include <QDebug>

#include <QList>

Bullet::Bullet()

{

setRect(0,0,10,50); //設定子彈的大小

QTimer *timer = new QTimer();

connect(timer,SIGNAL(timeout()),this,SLOT(move()));

timer->start(20); //每隔20ms, 定時器就會觸發,發出訊號,呼叫子彈運動的槽函式。

}

void Bullet::move() {

//獲取所有與子彈碰撞的物件的指標,並存儲在一個QList物件中

QList <QGraphicsItem*> colliding_items = collidingItems();

for(int i=0,n=colliding_items.size();i<n;i++)

{

/*if bullet collides with enemy,destroy them both

判斷這個物件的型別,是否Enemy */

if(typeid(*(colliding_items[i]))==typeid(Enemy))

{

//remove them both

scene()->removeItem(colliding_items[i]);

scene()->removeItem(this);

//delete them all

delete colliding_items[i]; //delete Enemy

delete this; //delete bullet

return;

}

}

//如果沒有發生碰撞,y座標減少10,即子彈向上運動10個畫素距離

setPos(x(),y()-10);

/*如果子彈沒發生碰撞,且離開檢視窗體範圍,場景就刪除子彈圖項,並delete子彈物件。

因為這裡場景、檢視的左上角都設為(0,0),檢視的頂端即子彈運動的邊界,其y座標為0,

小於0說明子彈已經出界了。

*/

if(this->pos().y()+this->rect().height()<0)

{

scene()->removeItem(this); //場景刪除子彈物件

delete this; //銷燬物件,釋放物件所佔用的記憶體空間。

qDebug()<<"bullet deleted";

}

}

分類: 釣魚
時間: 2021-12-14

相關文章

高吊殺持拍手架拍動作角度,90度角和45度角,哪一個更適合你?

高吊殺持拍手架拍動作角度,90度角和45度角,哪一個更適合你?
高吊殺持拍手架拍動作的角度主要分2種: 1. "山"字型(也就是90度角): 2. 持拍手45度角一: 山"字型(也就是90度角): 二.45度: 就此問題,也有專業教練 ...

這十款中排量摩托車有必要了解一下,因為它們更適合一步到位

這十款中排量摩托車有必要了解一下,因為它們更適合一步到位
這十款中排量摩托車有必要了解一下,因為它們更適合一步到位 中排量一詞好像是本田發明的,但事實上這個排量級別的車型早些時候就有,而且隨著國內玩樂市場的興起,它們已經成為了中堅力量. 最主要按照這個排量級 ...

返鄉創業,養100只羊和100只牛,哪一個更靠譜?這些資料你要知道

返鄉創業,養100只羊和100只牛,哪一個更靠譜?這些資料你要知道
隨著國家大力支援鄉村產業的振興,鼓勵更多的外出農民工返鄉創業,越來越多的外出務工人員,動起了回家創業念頭. 回家創業養殖是大家首先選擇的一個創業方向,那麼真的回家創業,養上100只羊和100頭牛,哪一 ...

鐳射電視更適合這三類家庭

鐳射電視更適合這三類家庭
什麼人適合購買鐳射電視,這是一個頗具爭議的話題.確實作為家用顯示領域的"全新物種",太多的人對它缺乏瞭解,今天我就來跟大家聊一聊,究竟哪些家庭更適合購買鐳射電視. 追求大屏但不便安 ...

月球和火星,哪個更適合人類移民?

月球和火星,哪個更適合人類移民?
先說答案:火星!火星不但是相比月球更適合人類居住,就是放眼整個太陽系,也找不到第二個比火星更適合人類居住的星球了! 火星,北極地區存在厚厚的冰層 這就是為什麼人類對探測火星興趣盎然.頻頻光顧它的原因. ...

別盯著TR300看了,先來了解一下豪爵GZS160,可能會更適合你

別盯著TR300看了,先來了解一下豪爵GZS160,可能會更適合你
別盯著TR300看了,先來了解一下豪爵GZS160,可能會更適合你 一向低調平庸的豪爵,在本次摩博會期間終於釋放出了它在小排量車型上的絕對優勢,為我們帶來了多款比較實用的小排量摩托車. 但是因為車友們 ...

理性討論,加內特和諾維斯基誰更適合當建隊核心?

理性討論,加內特和諾維斯基誰更適合當建隊核心?
加內特和諾維斯基作為聯盟歷史中頂級大前鋒,關於誰更偉大這一問題一直爭論不休,公說公有理婆說婆有理,似乎一時之間兩方陣營的球迷都無法找出壓倒性資料,來證明自己的論點才是正確的. 小編作為俗人一個,自然也 ...

劉晏含更適合打主攻!遼寧佔據四強的主動權,小自由人防守很出色

劉晏含更適合打主攻!遼寧佔據四強的主動權,小自由人防守很出色
隨著劉晏含四號位進攻得分,遼寧女排面對老牌強隊浙江女排,以3-0戰勝對手獲得第二場比賽勝利,目前2勝1負積5分,和天津女排處於同一起跑線.面對山東和浙江這兩支傳統老牌強隊,遼寧女排發揮出強攻實力,多次 ...

第五代途勝L和新奇駿,四缸1.5T對比三缸1.5T,到底誰更適合家用

第五代途勝L和新奇駿,四缸1.5T對比三缸1.5T,到底誰更適合家用
現代途勝是我們非常熟悉的一款合資SUV,憑藉著不俗的實力在中國市場獲得了銷量和口碑的雙豐收,也正因為有了不錯的口碑作為基礎,第五代途勝L上市後便受到了消費者的高度關注,而目前還有一款新車的人氣也比較高 ...

20萬級SUV詳細對比,日產新奇駿和第五代途勝L,誰更適合家用?

20萬級SUV詳細對比,日產新奇駿和第五代途勝L,誰更適合家用?
隨著時代的發展,汽車已經成為日常生活中最重要的交通工具,如今已經普及到每個家庭.在眾多車型中,轎車和SUV是家用車的首選車型,其中轎車是最早在國內流行的,當初都是以行政車輛的形象出現,直至二胎政策的開 ...

養心、健脾、理氣三者兼得!它更適合體質虛寒的孩子

養心、健脾、理氣三者兼得!它更適合體質虛寒的孩子
孩子在成長過程中,難免會有睡不安穩.容易上火.口腔潰瘍.易積食等問題,這是因其心常有餘.脾常不足.肺常不足的生理特點所決定的.這些問題會隨著孩子進入青少年時期,臟腑成熟後,變得不再頻繁.但在嬰幼兒時期 ...

新手百分百成功的自制月餅,低糖少油更適合小朋友哦

新手百分百成功的自制月餅,低糖少油更適合小朋友哦
還有一週就是中秋佳節,你家裡的月餅準備好了嗎? 今年各類"文創月餅"."跨界月餅"層出不窮,甚至精神病醫院都出了月餅,每個都很有意思,看的我也有點選擇困難症了. ...

女生如果有這3個“特徵”,就剪掉你的長髮吧,短髮更適合你

女生如果有這3個“特徵”,就剪掉你的長髮吧,短髮更適合你
眾所周知,髮型能改變一個人的整體氣質,而選對了髮型,很多時候都能讓你瞬間提高辨識度,尤其是對最不缺美女帥哥的娛樂圈來說,能讓人一眼就記住你是非常重要的. 那麼不同臉型的女生都適合什麼樣髮型呢?其中當然 ...

哪款iPhone 13更適合你?蘋果釋出長影片進行詳細介紹

哪款iPhone 13更適合你?蘋果釋出長影片進行詳細介紹
蘋果釋出了一個時長 7 分半的介紹影片,能夠讓你知道四款 iPhone 13 手機哪款更適合你.在這段影片中,蘋果還介紹了手機的一些新影片和相機功能,如電影模式.攝影風格和微距攝影,並強調了手機的電池 ...

軍校和警校兩類優質院校,哪個更適合學生未來發展?要慎重選擇

軍校和警校兩類優質院校,哪個更適合學生未來發展?要慎重選擇
好男兒志在四方,穿上軍裝鎮守一方.我相信大多數的男孩子在心靈的深處都曾經擁有一個身披戎裝,保衛家國的夢想.特別是當看到電視上警察英勇救人,士兵奮戰沙場的場景,心裡無不激動. 很多的家庭是十分支援自己家 ...

臉上有這3個特徵更適合留劉海,看袁泉就知道,紮起頭髮有些顯老

臉上有這3個特徵更適合留劉海,看袁泉就知道,紮起頭髮有些顯老
相信很多女性在選擇髮型的時候,會選上一款劉海去修飾臉型,而劉海的重要性因人而異,有些臉型就不適合留劉海,有些臉型留劉海會顯得很高階有氣質,選擇劉海的前提是分析自身條件,看到底合不合適再去做定奪. 在髮 ...

內維爾:恩東貝萊在英超可能不被欣賞,他更適合意甲或西甲

內維爾:恩東貝萊在英超可能不被欣賞,他更適合意甲或西甲
直播吧9月20日訊 前英格蘭國腳加里-內維爾參與節目時談到了熱刺隊史引援紀錄保持者恩東貝萊,這位法國中場今夏一度接近離隊,加里-內維爾表示自己認可恩東貝萊的實力,但後者可能會更適合在西甲或者意甲踢球. ...

劉強東不同時期的三個女人,你認為哪一個更讓劉強東刻骨銘心?

劉強東不同時期的三個女人,你認為哪一個更讓劉強東刻骨銘心?
成功的男人背後總會有那麼幾個女人,作為京東的創始人,劉強東從一個窮小子白手起家成為現在的商業大佬也跟普通人一樣,有過幾段感情,每一段感情對於劉強東來講都不一樣,既有真愛,也有無奈,那麼在他的三段戀情中 ...

資深高三班主任總結:未來發展“有潛力”的專業,更適合男生學習

資深高三班主任總結:未來發展“有潛力”的專業,更適合男生學習
前言:在社會形形色色的行業中,有些行業的男生比較多,一些則是女生比較多,這是因為由於行業不同,工作內容會有很大差異. 而且男生和女生的思維方式並不相同,在體能與心理方面也各有千秋.所以才會出現一些行業 ...

食物語與虹貓藍兔七俠傳聯動,隔壁小富貴更適合聯動嗎?

食物語與虹貓藍兔七俠傳聯動,隔壁小富貴更適合聯動嗎?
Hello大家好,這裡是安藍漫語~ 不知道大家最近有沒有看到食物語官方釋出的一條動態,放出了和虹貓藍兔七俠傳聯動的影片,並說到活動將於九月下旬上線. 虹貓藍兔七俠傳可謂是95後.00後的記憶了,不少人 ...