發(fā)布時(shí)間:2023-11-27 15:55:33 瀏覽量:124次
本文作者使用 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ù)組的信息的方式,全部修改也非常麻煩,所以放棄。
后來(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
熱門(mén)資訊
探討游戲引擎的文章,介紹了10款游戲引擎及其代表作品,涵蓋了RAGE Engine、Naughty Dog Game Engine、The Dead Engine、Cry Engine、Avalanche Engine、Anvil Engine、IW Engine、Frostbite Engine、Creation引擎、Unreal Engine等引擎。借此分析引出了游戲設(shè)計(jì)領(lǐng)域和數(shù)字藝術(shù)教育的重要性,歡迎點(diǎn)擊咨詢(xún)報(bào)名。
2. 手機(jī)游戲如何開(kāi)發(fā)(如何制作傳奇手游,都需要準(zhǔn)備些什么?)
?如何制作傳奇手游,都需要準(zhǔn)備些什么?提到傳奇手游相信大家都不陌生,他是許多80、90后的回憶;從起初的端游到現(xiàn)在的手游,說(shuō)明時(shí)代在進(jìn)步游戲在更新,更趨于方便化移動(dòng)化。而如果我們想要制作一款傳奇手游的
3. B站視頻剪輯軟件「必剪」:免費(fèi)、炫酷特效,小白必備工具
B站視頻剪輯軟件「必剪」,完全免費(fèi)、一鍵制作炫酷特效,適合新手小白??靵?lái)試試!
4. Steam值得入手的武俠游戲盤(pán)點(diǎn),各具特色的快意江湖
游戲中玩家將面臨武俠人生的掙扎抉擇,戰(zhàn)或降?殺或放?每個(gè)抉定都將觸發(fā)更多愛(ài)恨糾葛的精彩奇遇?!短烀嬗肪哂卸嗑€劇情多結(jié)局,不限主線發(fā)展,高自由...
5. Bigtime加密游戲經(jīng)濟(jì)體系揭秘,不同玩家角色的經(jīng)濟(jì)活動(dòng)
Bigtime加密游戲經(jīng)濟(jì)模型分析,探討游戲經(jīng)濟(jì)特點(diǎn),幫助玩家更全面了解這款GameFi產(chǎn)品。
6. 3D動(dòng)漫建模全過(guò)程,不是一般人能學(xué)的會(huì)的,會(huì)的多不是人?
步驟01:面部,頸部,身體在一起這次我不準(zhǔn)備設(shè)計(jì)圖片,我從雕刻進(jìn)入。這一次,它將是一種純粹關(guān)注建模而非整體繪畫(huà)的形式。像往常一樣,我從Sphere創(chuàng)建它...
7. 3D動(dòng)畫(huà)軟件你知道幾個(gè)?3ds Max、Blender、Maya、Houdini大比拼
當(dāng)提到3D動(dòng)畫(huà)軟件或動(dòng)畫(huà)工具時(shí),指的是數(shù)字內(nèi)容創(chuàng)建工具。它是用于造型、建模以及繪制3D美術(shù)動(dòng)畫(huà)的軟件程序。但是,在3D動(dòng)畫(huà)軟件中還包含了其他類(lèi)型的...
8. 開(kāi)發(fā)三昧游戲叫什么(三昧動(dòng)漫)
?三昧動(dòng)漫對(duì)于著名ARPG游戲《巫師》系列,最近CD Projekt 的高層回應(yīng)并不會(huì)推出《巫師4》。因?yàn)椤段讕煛废盗性诓邉澋臅r(shí)候一直定位在“三部曲”的故事框架,所以在游戲的出品上不可能出現(xiàn)《巫師4》
9. 3D打印技巧揭秘!Cura設(shè)置讓你的模型更堅(jiān)固
想讓你的3D打印模型更堅(jiān)固?不妨嘗試一下Cura參數(shù)設(shè)置和設(shè)計(jì)技巧,讓你輕松掌握!
10. Unity3D入門(mén):手把手帶你開(kāi)發(fā)一款坦克大戰(zhàn)的游戲
Unity工程創(chuàng)建完成后如圖所示: 接下來(lái)應(yīng)該導(dǎo)入此項(xiàng)目所需的Unity Package文件,要用到的Unity package文件大家可以去Unity3D的官方網(wǎng)站下載(地址:ht...
最新文章
同學(xué)您好!