2009-06-25 28 views
2

我該如何去實現PHP中的遊戲庫存系統?我一直在想辦法讓物品可以動態使用,而不僅僅是坐在你的庫存中,例如裝備武器,使用藥劑,傳送等。如何實施遊戲的庫存系統?

我唯一能提出的解決方案是將PHP代碼存儲在數據庫中,並在使用該項目時獲取它,但這看起來並不合適。有沒有更好的方法來實現這一點?

澄清:這是一個MMO瀏覽器遊戲,每個玩家的庫存需要堅持通過遊戲。如果要做出任何改變,對於每個項目(可能有數百個項目)有一個課程似乎很難維持。

+0

你能澄清嗎?如果它是永久性的,那麼它應該被存儲在諸如MySQL之類的數據庫中。如果它對用戶來說是臨時的,那麼它仍然可以進入數據庫或者只是在一個會話變量中。您可以將數組保存在會話變量中。 – Paulo 2009-06-25 20:13:38

回答

4

除了作爲建議實施「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) 
    } 

} 

你或許應該閱讀了關於接口和抽象類完全明白我的意思。

另外,請注意,這是一個非常寬泛的開放式問題,可以通過上千種不同的方式來解決。你可能想問一些更具體的問題,或者提供具體的例子。

3

使用PHP,您需要設置一個庫存類,併爲每個項目(包括一個「baseItem」類)繼承項目,其中包含所有項目共有的內容(icon?sound?amount?) 。

您需要將用戶的庫存類實例存儲在會話變量中。如果你希望它堅持下來,它應該在數據庫中。

訪問庫存的任何頁面都需要引用包含物料和庫存類的文件。

This link顯示將對象設置爲會話並跨頁訪問它。

編輯:打字速度過快,混合了幾個關鍵術語