擁有Switch的同學相信都玩過塞爾達·曠野之息這個神作,還記得騎上你心愛的小摩托在海拉魯大陸上馳騁的日子么?那么你想知道曠野之息中大師劍這些武器的攻擊力和耐久度都是怎么實現(xiàn)的么? 4月8日的開課吧《HelloWorld公開課》,曉沐老師為我們帶來了,如何用C++來實現(xiàn)曠野之息中的武器攻擊力和耐久度,話不多說,讓我們跟著曉沐老師去看看吧。 常見數(shù)據(jù)結(jié)構(gòu) 在實現(xiàn)林克大魔王的武器前,曉沐老師先帶我們復(fù)習了數(shù)組,隊列、棧等幾個常見的數(shù)據(jù)結(jié)構(gòu),這里我們挑兩個重要的在復(fù)習下。 這是哈希表的數(shù)據(jù)結(jié)構(gòu)圖,它的時間復(fù)雜度為O(1),每個keys通過哈希函數(shù)轉(zhuǎn)換映射到每一個buckets,當有兩個keys映射同一個buckets時,通過串聯(lián)在buckets中的鏈表來查詢相關(guān)的數(shù)據(jù)。 下面這個數(shù)據(jù)結(jié)構(gòu)乍一看可能像是樹,但其實它是堆,紅色箭頭代表交換,我們都知道,堆分為大頂堆和小頂堆,大頂堆可以快速篩選出最大的數(shù)據(jù)元素,小頂堆則是可以篩選出最小的數(shù)據(jù)元素。 常見模板庫與迭代器 工欲善其事必先利其器,C++中的STL已經(jīng)幫我們封裝好了許多常用的模板庫與迭代器,這些也是后面我們實現(xiàn)曠野之息中武器必不可少的工具。 標準模板庫 vector數(shù)列 stack棧 queue隊列 list鏈表 set集合(紅黑樹) map映射(紅黑樹) unordered_set無序集合(哈希表) unorderer_map無序映射(哈希表) priority_queue優(yōu)先隊列/堆(vector/deque) STL迭代器 容器類名::iterator 容器類名::const_iterator 容器類名::reverse_iterator 容器類名::const_reverse_iterator 實戰(zhàn)演練 我們先來分析一下林克大魔王的角色屬性和裝備,林克游戲背包中,劍的最大容量為n,每把劍有如下五個屬性:分別是物品id,物品名稱,物品圖標,攻擊力,耐久度。 游戲背包中,盾的最大容量為n,每個盾牌有如下五個屬性:物品id,物品名稱,物品圖標,防御力,耐久度。 我們的主角林克(Link)在海拉魯大地上與怪物殊死搏斗:他的初始背包里沒有任何裝備,他可以將地上的裝備撿起放入背包每把劍在揮砍后,耐久度會降低,耐久度為0時武器消失,他在打怪時每次只使用攻擊力最強的劍。 以上是項目背景與功能需求,下面開始實現(xiàn),我們先寫一個基類Weapon,然后定義武器的名字、屬性和耐久度,從下面的代碼我們可以單出來,durability代表武器的耐久度,這是一個耐久度為5的武器。然后再寫一個broken函數(shù)來判斷武器耐久度。 當武器耐久度小于等于0代表武器損壞,broken函數(shù)返回true,每個武器有use使用的屬性,每使用一次耐久度減一,在代碼中我們可以看到durability-- 接下來定義武器的數(shù)據(jù)庫,從下面代碼可以看到,這是一個劍的數(shù)據(jù)庫,map里存了這個劍的所有屬性的參數(shù)值。同理我們也可以寫一個盾牌的數(shù)據(jù)庫。 一切準備就緒,現(xiàn)在我們把上面的代碼運行一下,看會返回什么結(jié)果,從下面打印輸出的信息可以看到,我們的主角林克大魔王撿了一把耐久度為5,攻擊力25的卓拉之劍,然后他攻擊了一下,卓拉之劍耐久度減一變成了4。 看到這可能有同學會問,這也就實現(xiàn)了武器的耐久功能,背包功能,每次使用最強武器這些功能要怎么實現(xiàn)呢? 不要著急,如果有同學想了解完整的項目實現(xiàn)過程以及代碼分析,可以點擊實戰(zhàn)詳解C++中的數(shù)據(jù)結(jié)構(gòu)觀看公開課的回放視頻!在課上,曉沐老師會帶領(lǐng)大家一步一步實現(xiàn)上面所有的功能。 同時,如果有同學想要曉沐老師本次塞爾達曠野之息項目源代碼的,記得點擊下方圖片 講師介紹 曉沐老師,BAT某廠人工智能研究院CV算法工程師,北京航空航天大學智能信息處理方向碩士,主要研究方向是物體檢測、語義分割、三維重建等,具有豐富的移動端C++算法落地經(jīng)驗;同時具備多年授課經(jīng)歷,有豐富的技術(shù)研討和教學經(jīng)驗。 《Hello,World公開課》是由開課吧推出的面向廣大開發(fā)工程師的免費加餐課,集結(jié)業(yè)內(nèi)名師大咖,聚焦熱門技術(shù)和實戰(zhàn)解決方案,以專業(yè)知識分享交流為橋梁,鏈接正在創(chuàng)造世界的一群科技主力們,向初心致敬,為技術(shù)發(fā)燒。無論你是初入職場的應(yīng)屆生,還是準備升職加薪的職場精英,相信這里都有你需要的養(yǎng)料。
|