我該如何去實現PHP中的遊戲庫存系統?我一直在想辦法讓物品可以動態使用,而不僅僅是坐在你的庫存中,例如裝備武器,使用藥劑,傳送等。如何實施遊戲的庫存系統?
我唯一能提出的解決方案是將PHP代碼存儲在數據庫中,並在使用該項目時獲取它,但這看起來並不合適。有沒有更好的方法來實現這一點?
澄清:這是一個MMO瀏覽器遊戲,每個玩家的庫存需要堅持通過遊戲。如果要做出任何改變,對於每個項目(可能有數百個項目)有一個課程似乎很難維持。
我該如何去實現PHP中的遊戲庫存系統?我一直在想辦法讓物品可以動態使用,而不僅僅是坐在你的庫存中,例如裝備武器,使用藥劑,傳送等。如何實施遊戲的庫存系統?
我唯一能提出的解決方案是將PHP代碼存儲在數據庫中,並在使用該項目時獲取它,但這看起來並不合適。有沒有更好的方法來實現這一點?
澄清:這是一個MMO瀏覽器遊戲,每個玩家的庫存需要堅持通過遊戲。如果要做出任何改變,對於每個項目(可能有數百個項目)有一個課程似乎很難維持。
除了作爲建議實施「baseItem」類,你可能還需要考慮開發一個接口類的概述方法,所有的項目應有。然後,每種類型的項目都可以以不同方式實施這些方法
例如,所有項目可能都需要有一個'equip()'方法,但是根據它的種類來實現它。您可能不需要爲每個單獨的項目創建一個類,但是您應該創建能夠根據您提供的某種數據結構(可以存儲在數據庫中)創建項目的唯一實例的類。
一個非常普通的例子可能是:
class Leather_Armor extends Armor_Base implements Equippable
{
// these would probably be defined in the base class instead of here
protected $_itemName;
protected $_itemDescription;
protected $_defenseRating;
public function __construct(params)
{
// intialize properties with data from the db
}
// the Equippable interface requires us to define this function
public function equip()
{
// call a function from the base class
$this->recalculateDefenseRating($this->defenseRating)
}
}
你或許應該閱讀了關於接口和抽象類完全明白我的意思。
另外,請注意,這是一個非常寬泛的開放式問題,可以通過上千種不同的方式來解決。你可能想問一些更具體的問題,或者提供具體的例子。
使用PHP,您需要設置一個庫存類,併爲每個項目(包括一個「baseItem」類)繼承項目,其中包含所有項目共有的內容(icon?sound?amount?) 。
您需要將用戶的庫存類實例存儲在會話變量中。如果你希望它堅持下來,它應該在數據庫中。
訪問庫存的任何頁面都需要引用包含物料和庫存類的文件。
This link顯示將對象設置爲會話並跨頁訪問它。
編輯:打字速度過快,混合了幾個關鍵術語
你能澄清嗎?如果它是永久性的,那麼它應該被存儲在諸如MySQL之類的數據庫中。如果它對用戶來說是臨時的,那麼它仍然可以進入數據庫或者只是在一個會話變量中。您可以將數組保存在會話變量中。 – Paulo 2009-06-25 20:13:38