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

Php 如何实现一个游戏的库存系统?,php,Php,我将如何在PHP中为游戏实现一个清单系统?我一直在试图找到一种方法,使物品可以动态使用,而不是仅仅坐在你的库存中,例如装备武器、使用药剂、传送等等 我能想到的唯一解决方案是将PHP代码存储在数据库中,并在使用该项时获取它,但这似乎并不合适。有没有更好的方法来实现这一点 澄清一下:这是一款mmo浏览器游戏,每个玩家的库存都需要在整个游戏中保持。如果要进行任何更改,为每个项目(可能有数百个项目)创建一个类似乎很难维护 使用PHP,您需要为每个项目设置一个库存类和类,包括项目继承的“baseItem”

我将如何在PHP中为游戏实现一个清单系统?我一直在试图找到一种方法,使物品可以动态使用,而不是仅仅坐在你的库存中,例如装备武器、使用药剂、传送等等

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


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

使用PHP,您需要为每个项目设置一个库存类和类,包括项目继承的“baseItem”类,该类包含所有项目共有的内容(icon?sound?amount?)

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

任何访问库存的页面都需要引用包含item和inventory类的文件

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


编辑:输入太快,混淆了几个关键术语除了按照建议实现一个“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)
     }

}
您可能应该仔细阅读接口和抽象类,以完全理解这个概念


另外,请注意,这是一个非常广泛的、开放式的问题,可以用一千种不同的方法来解决。你可能想问一些更具体的问题,或者提供具体的例子。

你能澄清一下吗?如果它是永久的,那么它应该存储在数据库中,比如MySQL。如果它对用户来说是临时的,那么它仍然可以放在DB中,或者只是放在会话变量中。您可以将数组保存在会话变量中。听起来像是需要普通数据结构而不是数据库的情况。这里没有PHP专家,但我上次听说PHP有类。制作一个代表库存的PHP类,并将项目存储在其中。您需要澄清什么类型的游戏、MMO RPG风格还是简单的单人游戏。这个目录是否需要像世界总目录一样保存到每个玩家,或者这只是世界上一个玩家的目录,等等@windfinder-问题是网络是无状态的,所以它需要存储在某个地方,因为每次重新加载都会被擦除。一个数据库肯定会有点过火,而且它的结构很可能是基于类的,但它需要存储在某个地方,除非没有页面重新加载。@Paulo PHP会话变量存储在服务器端,并且特定于浏览器会话。此外,还可以“包括”PHP类。此外,会话cookie可用于持久化会话。