网游游戏背包设计

网游游戏背包设计

  • 背包
    • 业务需求
    • 物品唯一id
    • 格子的数据结构
      • 数组结构
        • 背包查找
        • 背包变化
        • 背包整理和排序
      • map结构
        • 背包查询
        • 背包变化
    • 背包物品的变化量
      • 变化标志
    • 背包数据储存

背包

业务需求

网络游戏游戏背包的表现为一堆格子,格子可以空着,也可以被物品填充。背包的情况储存情况可以被持久化。

  1. 一个物品占一个格式
  2. 一个物品占多个各种

物品唯一id

如果背包系统比较简单,可以只用物品配置id和物品数量来表示背包中的物品。但是很多情况下背包里会有许多物品配置id相同的物品,物品可能还会附加一下特殊属性。所以游戏中物品的唯一id就显得很有必要。

格子的数据结构

数组结构

数组结构能简单直观地模拟背包容量的真实情况,一般数组下标代表格子的位置,数组元素代表具体背包物品。在算法上,01背包问题是一个经典的动态规划算法问题,而01背包就是用一个简单的数组来模拟背包(游戏中的背包大多是一维数组,而背包算法问题中的数组一般是二维数组)。

背包查找

受限于数组结构,数组背包在查找时需要遍历背包元素,找出符合要求条件的物品。所以当背包数组十分庞大时,性能上就会受到影响。

背包变化

物品的添加需要遍历数组寻找空位插入。扣除时需要遍历数组寻找到符合条件的位置和物品。

背包整理和排序

数组可以直接排序,遍历数组,将分散的物品按特定的顺序重新放入数组,将可以叠加的物品叠加起来。

map结构

map结构模拟背包,可以用格子位置组作为主键,物品本身作为值。

背包查询

因为使用map结构,能够迅速索引出背包中的物品。

背包变化

背包物品的添加和扣除比较方便,只要知道物品的位置和数量就行。

背包物品的变化量

每一次背包物品的变化都需要同步给前端,但是每次都把所有背包信息数据同步过去无疑是毫无必要的,所以最好的办法是只同步改变的变化量。

变化标志

使用数组数据结构的背包: 背包物品添加、减少、交换位置时,使用一个或者多个变化标志记录记录格子空间的变化。当背包发生改变时,只同步变化标志记录中的。当背包整理时,变化标志会被重置。

使用Map数据结构的背包:背包物品添加、减少、交换位置时,背包物品唯一id或者配置id的数量变化会被变化标志记录,同步时只发送这部分的数据。

背包数据储存

背包数据与玩家关联密切,所以一般以玩家唯一id作为主键,储存整个背包。

使用关系型数据库,如Mysql数据库时,一般直接用Lob类型字段储存。

你可能感兴趣的:(游戏开发,游戏,java,数据结构)