2011-02-03 83 views
0

下面是當前依賴關係圖(與寫意圓爲TheTXIDependencies幫助解耦遊戲設計

一個遊戲玩家和單板它們之間共享。 玩家還可以訪問董事會,以便能夠添加/移動/移除單位。 玩家可以使用它擁有的單位,無論是在板上還是板下(一個單位也知道它是業主,但可能會被刪除,只是查找)。 板上有單位,並知道單位的位置。 單位有能力(玩家可能也可以)

我很難搞清楚的大單位是單位能力。他們應該能夠影響遊戲中的任何事情,治療/破壞玩家/單位,在棋盤上重新定位棋子,甚至可能是比賽本身(到目前爲止,沒有必要,但可能會出現)。

我怎樣纔能有能力影響任何事物,而不需要他們參考一切?我意識到每種能力都可以並且應該僅僅提及它所需要的東西,但是一個單位類別具有內置的能力,所以如果一個單位的能力影響到委員會,那麼它需要以某種方式從單位獲得委員會的參考?

我試圖保持設計儘可能靈活,因爲規則還沒有設置在石頭上(我們正在創建一個遊戲,並且還很早,因此它嘗試了一些東西,看看它的感覺如何,改變規則,直到遊戲感覺正確)

即使是否有董事會/地圖仍然在空中,所以單位應該與他們目前的分離。沒有全球性的國家或任何「上帝的對象」(但),我想保持這種方式。

具體來說,它在Python,webapp中,所以雖然問題本身是語言不可知的,但基於具有一流功能的動態語言的任何細節都是值得歡迎的。

+0

:(甚至沒有回覆寫意圈? – Davy8 2011-02-03 23:56:20

回答

1

首先,讓我來指您精彩的gamedev StackExchange。在這裏發佈這個問題你可能會有更多的運氣。我認爲一個解決方案就是將通知從觸發能力的對象傳遞給遊戲對象,然後解析這些通知並將它們交給特定的玩家或板子,並從那裏到特定的單位。

這很難解釋,所以讓我嘗試,它在僞代碼寫出來......

Game { 
getMe(); //Returns reference to singleton class. 
list of players 
list of boards 
} 

Board { 
list of units 
} 

Unit { 
int health 
} 

function Unit.notifyAbility(source, targeting-condition, ability-code) { 
    Game::getMe()->sendNotification(source, targeting-condition, ability-code); 
} 

function Game.sendNotification(source, targeting-condition, ability-code) { 
for each unit in list of units { 
    if(unit matches targeting condition) { 
    apply ability-code 
    } 
} 
} 

定位條件和能力,代碼本身可能是傳遞相關信息的數據結構。更好的是,讓它們成爲虛擬類並使用某種形式的多態來處理獨特的情況。

實施例:

AbilityCode { 
virtual function applyToUnit(target Unit) 
virtual function applyToPlayer(target Unit) 
} 

AbilityGainHP: child of AbilityCode { 
function applyToUnit(target Unit) { target.hp+= gainAmt; } 
int gainAmt; 
} 

希望這是很有意義的。

+0

+1,因爲我認爲這是一個有用的答案,但是單身遊戲對我來說不是一種選擇,因爲一次會有多於一個的遊戲進行,我們需要用一種不太複雜或與其他任何東西結合的方式來註冊一種遊戲的能力。 – Davy8 2011-02-04 14:24:34