2011-10-31 70 views
0

我是新來的面向對象的編程,我很努力地想到OOP。如何動態添加方法到一個類

我想做的是一款RPG遊戲。

我有英雄類(用戶) 它有這樣的屬性:名稱,hair_style,權力。 以及這些方法:說,攻擊,辯護

我想動態地添加更多的方法(法術),因爲英雄學習更多的法術。

我不知道這樣做的最佳方式是什麼。我可以想到以下幾點:

創建一個類「咒語」,每個魔法咒語有一個類從它延伸,並添加到英雄類型'咒語'(必須是數組)的屬性。 當英雄嘗試使用某些法術時,必須嘗試整個陣列以查看是否存在這樣的魔法(方法)。 (可能是錯的)


你是怎麼做到的? 泰

+0

你能想到的每一個法術/水平作爲附加到你的英雄對象的新功能的對象。所以這個方法會被附加到那個。只要他們可以做的動作數量不變,就可以有一個接口來描述所有的功能。的 – Garvin

+0

可能重複的[是否有可能動態地添加到代碼/擴展類?](http://stackoverflow.com/questions/4668822/is-it-possible-to-dynamically-add-code-to-extend-一類) – outis

回答

1

您可以創建一個名爲Ability的基類,並擁有從中派生出來的法術和其他英雄技能。然後在你的英雄類中,創建一個類型爲Ability的鏈表並將其稱爲「currentAbilities」或類似的東西。

每當你的英雄獲得新能力時,將其添加到列表中。每個技能都可以共享Cast(),Upgrade()等常用方法。然後,當需要列出並使用可用的法術和攻擊時,只需閱讀鏈表並調用其方法即可。

1

你可以繼續前進,把所有的拼寫方法的類,然後每當一個被稱爲檢查以確保他們可以使用它。如果您使用包含允許的法術的類屬性數組,您也可以事先檢查。

0

如果你真的希望它是動態的,你可以使用神奇的方法__call()(更多信息here),這將允許你調用不存在或超出範圍的函數。

你仍然需要定義函數的某個地方;這隻允許您控制功能的範圍。您不能以最嚴格的意義動態創建它們。