如何实现游戏的库存系统?

时间:2009-06-25 20:11:23

标签: php

我如何在PHP中实现游戏库存系统?我一直试图找出一种方法,以便动态使用商品,而不是只是坐在你的库存中,例如装备武器,使用魔药,传送等等。

我能想到的唯一解决方案是将PHP代码存储在数据库中,并在使用该项时获取它,但这似乎并不合适。有没有更好的方法来实现这个?

澄清:这是一个mmo浏览器游戏,每个玩家的库存需要在游戏中持续存在。如果要进行任何更改,每个项目的课程(可能有数百个项目)似乎很难维护。

2 个答案:

答案 0 :(得分:4)

除了按照建议实现'baseItem'类之外,您可能还需要考虑开发一个接口类来概述所有项目应该具有的方法。然后,每种类型的项目都可以以不同的方式实现这些方法。

例如,所有项目可能都需要具有“装备()”方法,但根据它的类型实现不同的方法。您可能不需要为每个单独的项创建一个类,但您应该创建能够根据您提供的某种数据结构(可以存储在数据库中)创建项的唯一实例的类。

一个非常普遍的例子可能是:

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)
     }

}

你应该阅读接口和抽象类来完全理解这个想法。

此外,请注意,这是一个非常广泛的,开放式的问题,而不是千种不同的方式。您可能想要提出更具体的内容,或提供具体的例子。

答案 1 :(得分:3)

使用PHP,您需要设置一个库存类,以及每个项目的类 - 包括项目继承的“baseItem”类,其中包括所有项目共有的内容(icon?sound?amount?)。

您需要将用户的库存类实例存储在会话变量中。如果你想要它持久存在,它应该在数据库中。

访问广告资源的任何页面都需要引用包含商品和广告资源类的文件。

This link显示将对象设置为会话并跨页面访问它。

编辑:键入太快并混淆了几个关键术语