激情六月丁香婷婷|亚洲色图AV二区|丝袜AV日韩AV|久草视频在线分类|伊人九九精品视频|国产精品一级电影|久草视频在线99|在线看的av网址|伊人99精品无码|午夜无码视频在线

高校合作1:010-59833514 ?咨詢(xún)電話:400-810-1418 服務(wù)與監(jiān)督電話:400-810-1418轉(zhuǎn)接2

qt可以開(kāi)發(fā)游戲嗎(QT 框架搭建,用最原始的方法實(shí)現(xiàn)簡(jiǎn)單的塔防游戲)

發(fā)布時(shí)間:2023-11-27 15:55:33 瀏覽量:124次

?QT 框架搭建,用最原始的方法實(shí)現(xiàn)簡(jiǎn)單的塔防游戲

qt可以開(kāi)發(fā)游戲嗎(QT 框架搭建,用最原始的方法實(shí)現(xiàn)簡(jiǎn)單的塔防游戲)

本文作者使用 QT 框架寫(xiě)了一個(gè)塔防游戲程序,該程序中實(shí)現(xiàn)了購(gòu)買(mǎi)炮塔、炮塔升級(jí)、怪物按照設(shè)定路徑移動(dòng)、炮塔自動(dòng)尋找范圍內(nèi)目標(biāo)、朝目標(biāo)怪物發(fā)射炮彈、爆炸效果、怪物走到家時(shí)我方生命值減少、方便添加關(guān)卡等功能。

運(yùn)行效果:

這張截圖中間的炮塔比較大,這是該炮塔多次升級(jí)后的結(jié)果。

炮塔升級(jí)后圖片不會(huì)改變,但該炮塔的大小、位置、炮彈大小、攻擊所產(chǎn)生的爆炸效果的大小、攻擊力、攻擊范圍都會(huì)發(fā)生改變。

遺憾點(diǎn)


盡管我已經(jīng)盡力地標(biāo)準(zhǔn)化這個(gè)程序了,但還是因?yàn)槲覍?duì)程序后面的步驟的認(rèn)知不正確,以及由于各種各樣的原因,還是遺留下來(lái)了很多的遺憾。

在寫(xiě)這個(gè) demo 的后期,我意識(shí)到寫(xiě)這個(gè)程序已經(jīng)花費(fèi)了太長(zhǎng)的時(shí)間,而且當(dāng)時(shí)我被這個(gè)程序折磨的很是難受,為了節(jié)省時(shí)間盡快完工,在代碼上我沒(méi)有按照最標(biāo)準(zhǔn)的情況來(lái)寫(xiě),且游戲內(nèi)容也被我簡(jiǎn)化了許多。

使用 QT 框架寫(xiě)程序,一般好像都是使用各種控件堆起來(lái),然后監(jiān)聽(tīng)這些控件的信號(hào)。但我在程序中卻使用了非常原始的辦法,即判斷鼠標(biāo)的點(diǎn)擊區(qū)域,這是因?yàn)槲野l(fā)現(xiàn)在connect函數(shù)里面,不論是將控件創(chuàng)建在棧區(qū)還是堆區(qū)都沒(méi)有用(或許有解決辦法,但我不會(huì),從網(wǎng)上也沒(méi)有找到)。這也就是說(shuō)沒(méi)有辦法實(shí)現(xiàn)最基本的點(diǎn)擊一個(gè)按鈕創(chuàng)建其他按鈕的功能,所以我還是用了最原始,也可能是最不標(biāo)準(zhǔn)的搞笑辦法實(shí)現(xiàn)的相關(guān)功能。


方案選擇


從 QT 的使用的來(lái)看,我可能只是一個(gè)十足的新手,但就程序而言,邏輯應(yīng)該還是差不多的。

如果想要在代碼中添加一個(gè)關(guān)卡,且使用預(yù)設(shè)的產(chǎn)生怪物方案的話,大概只需要在 mainwindow.cpp 中添加三十五行代碼即可,這些代碼的用途主要是用于監(jiān)聽(tīng)進(jìn)入關(guān)卡的按鈕、設(shè)定怪物的初始位置和路徑點(diǎn)、調(diào)用預(yù)設(shè)的產(chǎn)生怪物方案函數(shù)和添加新的地圖數(shù)組。

其實(shí)這個(gè)添加關(guān)卡的方案是我當(dāng)時(shí)想出來(lái)的三種方案中最次的一種,這種添加關(guān)卡的方案需要直接修改游戲界面類(lèi),也就是程序的主要代碼,這應(yīng)該是非常不好的。

而另外兩種我設(shè)想的方案,讀取文件中的內(nèi)容構(gòu)建關(guān)卡和將關(guān)卡相關(guān)代碼寫(xiě)在開(kāi)始界面的構(gòu)造函數(shù)中。

第一種方案其實(shí)是最好的,但因?yàn)樯婕暗礁鞣N各樣的文件操作,包括需要精確地移動(dòng)文件指針、精確地讀取到每個(gè)字符、字符串和數(shù)字之間的轉(zhuǎn)化等,學(xué)習(xí)這些非常麻煩。并且當(dāng)時(shí)我已經(jīng)將獲取關(guān)卡信息的方式設(shè)為了讀取各個(gè)對(duì)象、數(shù)組的信息的方式,全部修改也非常麻煩,所以放棄。

qt可以開(kāi)發(fā)游戲嗎(QT 框架搭建,用最原始的方法實(shí)現(xiàn)簡(jiǎn)單的塔防游戲)

后來(lái),我想通過(guò)將關(guān)卡所需要的數(shù)據(jù)全部寫(xiě)在開(kāi)始界面類(lèi)構(gòu)造函數(shù)的方式實(shí)現(xiàn)創(chuàng)建關(guān)卡,這種方式最起碼可以將主程序和關(guān)卡信息分離,且原理很簡(jiǎn)單,就是向主游戲界面對(duì)象中傳遞幾個(gè)參數(shù)即可。但這個(gè)時(shí)候,我遇到了一個(gè)非常致命的問(wèn)題,這個(gè)問(wèn)題是,在向connect傳遞lambda表達(dá)式做參數(shù)時(shí),表達(dá)式內(nèi)部始終沒(méi)有辦法使用函數(shù)外部的一個(gè)用于傳遞怪物路徑信息的三級(jí)指針,而且還是編譯失敗,并且在我看來(lái),程序中是不存在語(yǔ)法錯(cuò)誤的。這個(gè)問(wèn)題導(dǎo)致我花掉了整整一下午的時(shí)間都沒(méi)有找到解決方案,遂放棄。

因?yàn)槌绦虮容^復(fù)雜,所以我為了完成這個(gè)程序大概花費(fèi)了八天的時(shí)間之久。這讓我認(rèn)識(shí)到,在寫(xiě)復(fù)雜程序之時(shí),基礎(chǔ)非常重要。

編程步驟


1、編譯環(huán)境:

Windows Qt 5.9.0 Qt Creator 4.3.0

2、思路:

將二維數(shù)組中防御塔空位的坐標(biāo)保存到動(dòng)態(tài)數(shù)組中,遍歷這個(gè)數(shù)組并判斷點(diǎn)擊區(qū)域?qū)崿F(xiàn)點(diǎn)擊防御塔空位,其他的點(diǎn)擊也類(lèi)似。

怪物是根據(jù)一個(gè)路徑點(diǎn)數(shù)組中的數(shù)據(jù)移動(dòng)的,這個(gè)數(shù)組需要給出所有怪物的拐點(diǎn),怪物一直向第一個(gè)路徑點(diǎn)處移動(dòng)。這里其實(shí)也可以寫(xiě)成像防御塔位置那樣自動(dòng)獲取路徑點(diǎn)的,這樣的話就只需要人為設(shè)定怪物遇到交叉路口時(shí)的移動(dòng)方向就好了,但是因?yàn)樵谖蚁氲竭@個(gè)主意時(shí)已經(jīng)寫(xiě)好這一部分了,所以也就懶得改了。

防御塔尋找目標(biāo)怪物的規(guī)則:從后往前找范圍內(nèi)的怪物,如果目標(biāo)怪物被刪除或走出范圍了,則重新找到范圍內(nèi)最后一個(gè)怪物,否則一直瞄準(zhǔn)目標(biāo)怪物。

該程序中防御塔發(fā)射子彈的位置始終處于防御塔的正中心,不會(huì)隨防御塔的旋轉(zhuǎn)而改變,只是子彈的運(yùn)動(dòng)方向會(huì)始終跟隨目標(biāo)怪物。另外,因?yàn)槲也幌雽?xiě)了,沒(méi)有在程序中添加子彈圖片的旋轉(zhuǎn),一律使用的正方形圖片作為子彈圖片。這兩點(diǎn)也是該程序不足的地方。

展示程序的主要代碼由于代碼行數(shù)太多,展示不了,可以私信發(fā)給大家~

更多干貨內(nèi)容只需要你關(guān)注電子芯吧客微信公眾號(hào)


版權(quán)聲明:本文為CSDN博主「白家名」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。原文鏈接:
https://blog.csdn.net/qq_46239972/article/details/106073498

qt可以開(kāi)發(fā)游戲嗎(QT 框架搭建,用最原始的方法實(shí)現(xiàn)簡(jiǎn)單的塔防游戲)

熱門(mén)課程推薦

熱門(mén)資訊

請(qǐng)綁定手機(jī)號(hào)

x

同學(xué)您好!

您已成功報(bào)名0元試學(xué)活動(dòng),老師會(huì)在第一時(shí)間與您取得聯(lián)系,請(qǐng)保持電話暢通!
確定