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

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

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

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

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

本文作者使用 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ù)組的信息的方式,全部修改也非常麻煩,所以放棄。

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

后來,我想通過將關卡所需要的數(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

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

熱門課程推薦

熱門資訊

請綁定手機號

x

同學您好!

您已成功報名0元試學活動,老師會在第一時間與您取得聯(lián)系,請保持電話暢通!
確定