在上一篇文章中,我示範如何使用最大堆有效追蹤最遠的敵人。在本文中,我們將了解如何將其整合到遊戲機制中。
事件驅動方法
現有的實作使用事件驅動的架構。在本文中,我們將重點放在敵人事件上。這些事件將觸發衍生行動。
每個敵人都會經歷各種事件。以下是敵人可能經歷的生命週期的範例:
對於這篇文章,我對兩個事件感興趣:
- 敵人移動:當敵人位置改變時觸發。
- 敵人移除*:當敵人從遊戲中移除(例如被擊敗)時觸發。
(*我計劃在未來調整事件名稱,因為敵人可能會因為不同的原因而被移除。)
計劃
我創建了一個事件模型圖來視覺化不同事件如何互動。這有助於理解事物如何連結。
對於每個事件,我都有一個觸發它的命令。 (因此,事件是命令的結果。)在某些情況下,由於事件的結果,我們需要更新資料(綠色便籤描述了這一點)。三者的組合是一個垂直切片。
我的注意力將集中在綠色便條紙「塔範圍內的敵人」上。
執行
我們的目標是每當敵人在塔的範圍內時就更新可用的敵人,如果不在則將其移除。
我們將與塔類合作。在這個類別中,我們有一個變數來儲存敵人。
將事件監聽器放置在 Tower 類別中可以集中邏輯,減少維護塔和敵人之間映射的需要。雖然這給類別增加了一些複雜性,但它確保了更好的封裝並簡化了調試,這是目前更容易採取的方向。
行動:增加範圍內的敵人
測試:添加敵人
首先,我們將編寫一個測試來驗證範圍內的敵人是否已添加到塔的敵人堆中:
實施:新增敵人
下面是對應的實作:
每當敵人移動被觸發時,我們都會檢查是否應該將敵人添加到堆中。我已經有enemyWithinRange函數,只需添加insertOrUpdate呼叫即可。
行動:防止增加超出範圍的敵人
測試:忽略範圍外的敵人
接下來,我們確保不會添加塔範圍之外的敵人:
實施:忽略範圍外的敵人
我們之前使用enemyWithinRange進行的檢查已經涵蓋了這種情況,因此不需要額外的程式碼。
行動:將敵人移出範圍
測試:消滅超出範圍的敵人
現在我們測試離開範圍的敵人是否會從塔的可見範圍中移除:
實施:消滅超出範圍的敵人
如果敵人曾經在範圍內,那麼我們可以將其移除。
行動:從遊戲中移除敵人
測試:處理敵人移除事件
最後,我們確保從遊戲中移除的敵人也會從塔堆中移除:
實施:處理敵人刪除
每當觸發事件時,如果敵人在範圍內,我們就可以將其移除。
結論
透過將事件驅動方法與最大堆相結合,我們實現了塔樓動態優先處理敵人的有效方法。此實施與遊戲的事件系統無縫連接,確保即時更新和回應能力。
此外,在測試時,使用事件驅動方法無需將內部程式碼與測試連結。因此使測試不那麼脆弱。我們可以以任何我們想要的方式重構行為背後的程式碼,只要事件/偵聽器設定正確,測試仍然應該通過。
此實作現在可以為以下目標鋪路:
- 新增攻擊功能(現在我們知道要攻擊誰了)
- 交換敵人資料的儲存方式
請隨意將此方法應用於您自己的塔防遊戲。
以上是攻擊射程最遠的敵人(塔防)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript字符串替換方法詳解及常見問題解答 本文將探討兩種在JavaScript中替換字符串字符的方法:在JavaScript代碼內部替換和在網頁HTML內部替換。 在JavaScript代碼內部替換字符串 最直接的方法是使用replace()方法: str = str.replace("find","replace"); 該方法僅替換第一個匹配項。要替換所有匹配項,需使用正則表達式並添加全局標誌g: str = str.replace(/fi

因此,在這裡,您準備好了解所有稱為Ajax的東西。但是,到底是什麼? AJAX一詞是指用於創建動態,交互式Web內容的一系列寬鬆的技術。 Ajax一詞,最初由Jesse J創造

10款趣味橫生的jQuery遊戲插件,讓您的網站更具吸引力,提升用戶粘性!雖然Flash仍然是開發休閒網頁遊戲的最佳軟件,但jQuery也能創造出令人驚喜的效果,雖然無法與純動作Flash遊戲媲美,但在某些情況下,您也能在瀏覽器中獲得意想不到的樂趣。 jQuery井字棋遊戲 遊戲編程的“Hello world”,現在有了jQuery版本。 源碼 jQuery瘋狂填詞遊戲 這是一個填空遊戲,由於不知道單詞的上下文,可能會產生一些古怪的結果。 源碼 jQuery掃雷遊戲

本教程演示瞭如何使用jQuery創建迷人的視差背景效果。 我們將構建一個帶有分層圖像的標題橫幅,從而創造出令人驚嘆的視覺深度。 更新的插件可與JQuery 1.6.4及更高版本一起使用。 下載

本文演示瞭如何使用jQuery和ajax自動每5秒自動刷新DIV的內容。 該示例從RSS提要中獲取並顯示了最新的博客文章以及最後的刷新時間戳。 加載圖像是選擇

Matter.js是一個用JavaScript編寫的2D剛體物理引擎。此庫可以幫助您輕鬆地在瀏覽器中模擬2D物理。它提供了許多功能,例如創建剛體並為其分配質量、面積或密度等物理屬性的能力。您還可以模擬不同類型的碰撞和力,例如重力摩擦力。 Matter.js支持所有主流瀏覽器。此外,它也適用於移動設備,因為它可以檢測觸摸並具有響應能力。所有這些功能都使其值得您投入時間學習如何使用該引擎,因為這樣您就可以輕鬆創建基於物理的2D遊戲或模擬。在本教程中,我將介紹此庫的基礎知識,包括其安裝和用法,並提供一

本文討論了在瀏覽器中優化JavaScript性能的策略,重點是減少執行時間並最大程度地減少對頁面負載速度的影響。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Atom編輯器mac版下載
最受歡迎的的開源編輯器