2013-05-28 62 views
3

我正在開發一個與小精靈具有相同類型系統的遊戲,即每個玩家都會有一個'類型'(火,水,草等)。當玩家戰鬥時,我需要確定通過什麼方式來增加攻擊力,從而創造優勢和劣勢。到目前爲止,我在每個'type'類中使用一個開關,它將另一個'type'類作爲輸入並返回乘法因子。只有三種「類型」課程,我寫了很多頌歌,並且我可以預見,將來我想添加更多內容時,它會失控。比較玩家的優勢和劣勢

所以我的問題是,我該如何實施DRY解決方案來確定每種類型的優缺點?我附上了一張小精靈類型的表格,作爲我嘗試去做的參考。 enter image description here

+0

爲什麼每種類型的開關?你可以創建一個(靜態)方法來描述兩種類型,並返回該因子。但是你仍然需要寫出我猜想的每一個案例。 – Djon

+0

您是否考慮過使用外部文件來保存這些數據,而不是將其編碼到程序中?無論如何,這個遊戲開發堆棧交換可能會更好地回答這個問題:http://gamedev.stackexchange.com/ –

+1

您剛剛展示它的方式:將元素放入矩陣中。或者在乘法器上映射一對字符串(「Ghost」,「Dark」)。 – Noctua

回答

3

如何枚舉類型,並建立一個看起來就像您發佈的2D矩陣。無論何時您需要戰鬥的「因素」,都可以使用攻擊者和防守者作爲二維數組中的指標來查看因素。查找速度很快,代碼將非常乾淨。

樣品使用情況會是這個樣子:

factor = factorTable[FIRE][WATER]; // would set factor to 0.5 
factor = factorTable[WATER][FIRE]; // would set factor to 2.0 

由於貓頭鷹暗示,它可能是一個好主意,有在配置文件中的實際數據。這樣,您可以輕鬆更改它,而無需重新編譯。如果你選擇這個選項,你需要某種解析函數來在程序開始時創建矩陣。

接下來要做的更好的一步是將錶行爲和類型表示封裝在類中。底層的實現可能仍然是相同的(或者更改,這就是要點),但是您不會直接公開該表和枚舉。

factor = StrengthFactors(Player1.Type(), Player2.Type()); // or similar 
+1

這個,但是從配置文件動態構建它會更好。然後你不要硬編碼數據。 – Noctua

1

我想你應該使用單個字符串數組來存儲不同的類型。然後你使用2D矩陣來存儲乘數。這個想法是使用這個字符串數組的id來知道乘數在哪裏。你會有一個O(n)的複雜性來找到你想要的乘數。