發(fā)布時間:2023-11-27 15:55:33 瀏覽量:132次
本文作者使用 QT 框架寫了一個塔防游戲程序,該程序中實現(xiàn)了購買炮塔、炮塔升級、怪物按照設定路徑移動、炮塔自動尋找范圍內目標、朝目標怪物發(fā)射炮彈、爆炸效果、怪物走到家時我方生命值減少、方便添加關卡等功能。
運行效果:
這張截圖中間的炮塔比較大,這是該炮塔多次升級后的結果。
炮塔升級后圖片不會改變,但該炮塔的大小、位置、炮彈大小、攻擊所產生的爆炸效果的大小、攻擊力、攻擊范圍都會發(fā)生改變。
遺憾點
盡管我已經盡力地標準化這個程序了,但還是因為我對程序后面的步驟的認知不正確,以及由于各種各樣的原因,還是遺留下來了很多的遺憾。
在寫這個 demo 的后期,我意識到寫這個程序已經花費了太長的時間,而且當時我被這個程序折磨的很是難受,為了節(jié)省時間盡快完工,在代碼上我沒有按照最標準的情況來寫,且游戲內容也被我簡化了許多。
使用 QT 框架寫程序,一般好像都是使用各種控件堆起來,然后監(jiān)聽這些控件的信號。但我在程序中卻使用了非常原始的辦法,即判斷鼠標的點擊區(qū)域,這是因為我發(fā)現(xiàn)在connect函數(shù)里面,不論是將控件創(chuàng)建在棧區(qū)還是堆區(qū)都沒有用(或許有解決辦法,但我不會,從網上也沒有找到)。這也就是說沒有辦法實現(xiàn)最基本的點擊一個按鈕創(chuàng)建其他按鈕的功能,所以我還是用了最原始,也可能是最不標準的搞笑辦法實現(xiàn)的相關功能。
方案選擇
從 QT 的使用的來看,我可能只是一個十足的新手,但就程序而言,邏輯應該還是差不多的。
如果想要在代碼中添加一個關卡,且使用預設的產生怪物方案的話,大概只需要在 mainwindow.cpp 中添加三十五行代碼即可,這些代碼的用途主要是用于監(jiān)聽進入關卡的按鈕、設定怪物的初始位置和路徑點、調用預設的產生怪物方案函數(shù)和添加新的地圖數(shù)組。
其實這個添加關卡的方案是我當時想出來的三種方案中最次的一種,這種添加關卡的方案需要直接修改游戲界面類,也就是程序的主要代碼,這應該是非常不好的。
而另外兩種我設想的方案,讀取文件中的內容構建關卡和將關卡相關代碼寫在開始界面的構造函數(shù)中。
第一種方案其實是最好的,但因為涉及到各種各樣的文件操作,包括需要精確地移動文件指針、精確地讀取到每個字符、字符串和數(shù)字之間的轉化等,學習這些非常麻煩。并且當時我已經將獲取關卡信息的方式設為了讀取各個對象、數(shù)組的信息的方式,全部修改也非常麻煩,所以放棄。
后來,我想通過將關卡所需要的數(shù)據(jù)全部寫在開始界面類構造函數(shù)的方式實現(xiàn)創(chuàng)建關卡,這種方式最起碼可以將主程序和關卡信息分離,且原理很簡單,就是向主游戲界面對象中傳遞幾個參數(shù)即可。但這個時候,我遇到了一個非常致命的問題,這個問題是,在向connect傳遞lambda表達式做參數(shù)時,表達式內部始終沒有辦法使用函數(shù)外部的一個用于傳遞怪物路徑信息的三級指針,而且還是編譯失敗,并且在我看來,程序中是不存在語法錯誤的。這個問題導致我花掉了整整一下午的時間都沒有找到解決方案,遂放棄。
因為程序比較復雜,所以我為了完成這個程序大概花費了八天的時間之久。這讓我認識到,在寫復雜程序之時,基礎非常重要。
編程步驟
1、編譯環(huán)境:
Windows Qt 5.9.0 Qt Creator 4.3.0
2、思路:
將二維數(shù)組中防御塔空位的坐標保存到動態(tài)數(shù)組中,遍歷這個數(shù)組并判斷點擊區(qū)域實現(xiàn)點擊防御塔空位,其他的點擊也類似。
怪物是根據(jù)一個路徑點數(shù)組中的數(shù)據(jù)移動的,這個數(shù)組需要給出所有怪物的拐點,怪物一直向第一個路徑點處移動。這里其實也可以寫成像防御塔位置那樣自動獲取路徑點的,這樣的話就只需要人為設定怪物遇到交叉路口時的移動方向就好了,但是因為在我想到這個主意時已經寫好這一部分了,所以也就懶得改了。
防御塔尋找目標怪物的規(guī)則:從后往前找范圍內的怪物,如果目標怪物被刪除或走出范圍了,則重新找到范圍內最后一個怪物,否則一直瞄準目標怪物。
該程序中防御塔發(fā)射子彈的位置始終處于防御塔的正中心,不會隨防御塔的旋轉而改變,只是子彈的運動方向會始終跟隨目標怪物。另外,因為我不想寫了,沒有在程序中添加子彈圖片的旋轉,一律使用的正方形圖片作為子彈圖片。這兩點也是該程序不足的地方。
展示程序的主要代碼由于代碼行數(shù)太多,展示不了,可以私信發(fā)給大家~
更多干貨內容只需要你關注電子芯吧客微信公眾號
版權聲明:本文為CSDN博主「白家名」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權協(xié)議,轉載請附上原文出處鏈接及本聲明。原文鏈接:
https://blog.csdn.net/qq_46239972/article/details/106073498
熱門資訊
探討游戲引擎的文章,介紹了10款游戲引擎及其代表作品,涵蓋了RAGE Engine、Naughty Dog Game Engine、The Dead Engine、Cry Engine、Avalanche Engine、Anvil Engine、IW Engine、Frostbite Engine、Creation引擎、Unreal Engine等引擎。借此分析引出了游戲設計領域和數(shù)字藝術教育的重要性,歡迎點擊咨詢報名。
2. 手機游戲如何開發(fā)(如何制作傳奇手游,都需要準備些什么?)
?如何制作傳奇手游,都需要準備些什么?提到傳奇手游相信大家都不陌生,他是許多80、90后的回憶;從起初的端游到現(xiàn)在的手游,說明時代在進步游戲在更新,更趨于方便化移動化。而如果我們想要制作一款傳奇手游的
3. B站視頻剪輯軟件「必剪」:免費、炫酷特效,小白必備工具
B站視頻剪輯軟件「必剪」,完全免費、一鍵制作炫酷特效,適合新手小白??靵碓囋?!
游戲中玩家將面臨武俠人生的掙扎抉擇,戰(zhàn)或降?殺或放?每個抉定都將觸發(fā)更多愛恨糾葛的精彩奇遇?!短烀嬗肪哂卸嗑€劇情多結局,不限主線發(fā)展,高自由...
5. Bigtime加密游戲經濟體系揭秘,不同玩家角色的經濟活動
Bigtime加密游戲經濟模型分析,探討游戲經濟特點,幫助玩家更全面了解這款GameFi產品。
6. 3D動畫軟件你知道幾個?3ds Max、Blender、Maya、Houdini大比拼
當提到3D動畫軟件或動畫工具時,指的是數(shù)字內容創(chuàng)建工具。它是用于造型、建模以及繪制3D美術動畫的軟件程序。但是,在3D動畫軟件中還包含了其他類型的...
7. 3D動漫建模全過程,不是一般人能學的會的,會的多不是人?
步驟01:面部,頸部,身體在一起這次我不準備設計圖片,我從雕刻進入。這一次,它將是一種純粹關注建模而非整體繪畫的形式。像往常一樣,我從Sphere創(chuàng)建它...
8. 如何自己開發(fā)一款游戲(游戲開發(fā)入門必看:五大獨立游戲開發(fā)技巧)
?游戲開發(fā)入門必看:五大獨立游戲開發(fā)技巧無論您是剛剛起步開發(fā)自己的第一款游戲,還是已經制作了幾款游戲,本篇文章中的5大獨立游戲開發(fā)技巧都可以幫助您更好地設計下一款游戲。無論你對游戲有著什么樣的概念,都
?三昧動漫對于著名ARPG游戲《巫師》系列,最近CD Projekt 的高層回應并不會推出《巫師4》。因為《巫師》系列在策劃的時候一直定位在“三部曲”的故事框架,所以在游戲的出品上不可能出現(xiàn)《巫師4》
想讓你的3D打印模型更堅固?不妨嘗試一下Cura參數(shù)設置和設計技巧,讓你輕松掌握!
同學您好!