前言

游戏中背包模块设置关系到游戏整体设置, 一个背包模块设置好的 可以给玩家好体验, 在玩家可以清楚知道自己的物品的数据, 选择什么样的成长方式

正文

思维导图

一, 功能分类

1, 英雄的战斗力的计算

2, 日常任务模块

3, 排行榜

①, 武器排行榜

4, 物品的分类

①, 大的类别
  1. 消耗品
  2. 碎片 .合成材料
  3. 杂项
  4. 武器
  5. 情报
  6. 工具
  7. 芯片
②, 子的类别
  1. 体力
  2. 主角经验书
  3. 英雄经验书
  4. 宝箱
  5. 生命药剂
  6. 疲劳药剂
  7. BUFF药剂
  8. 钥匙串

5, 物品管理类的接口定义

①, 服务器使用的接口
  1. 增加物品
  2. 删除物品
  3. 分离物品
②, 客户端的接口定义
  1. 使用物品
  2. 打开宝箱
  3. 碎片合成
  4. 销售物品
  5. 武器强化
  6. 武器改造
  7. 武器分解

二, 数据结构的设置

背包的模块的数据玩家查询的次数是最多的, 在服务器的效率首选 红黑树结构, 使用std::map结构是平衡二叉树查询的效率

key-value形式, 服务器端自动生成一个key 的int类型, value使用指针类型

查看源码 find方法

iterator find(const key_type& _Keyval)
{   // find an element in mutable sequence that matches _Keyval
iterator _Where = lower_bound(_Keyval);
return (_Where == end()|| _DEBUG_LT_PRED(this->_Getcomp(),_Keyval, this->_Key(_Where._Mynode()))? end() : _Where);
}const_iterator find(const key_type& _Keyval) const
{   // find an element in nonmutable sequence that matches _Keyval
const_iterator _Where = lower_bound(_Keyval);
return (_Where == end()|| _DEBUG_LT_PRED(this->_Getcomp(),_Keyval, this->_Key(_Where._Mynode()))? end() : _Where);
}

1, key

lower_bound方法lower_bound 返回一个迭代器,指向第一个“不小于”给定值的元素 (公开成员函数) [编辑]

iterator lower_bound(const key_type& _Keyval)
{   // find leftmost node not less than _Keyval in mutable tree
return (iterator(_Lbound(_Keyval), &this->_Get_data()));
}const_iterator lower_bound(const key_type& _Keyval) const
{   // find leftmost node not less than _Keyval in nonmutable tree
return (const_iterator(_Lbound(_Keyval), &this->_Get_data()));
}

调用_Lbound方法

// 声明
typedef typename _Alloc_types::_Node _Node;
typedef typename _Alloc_types::_Nodeptr _Nodeptr;
// ----template<class _Other>
_Nodeptr _Lbound(const _Other& _Keyval) const
{   // find leftmost node not less than _Keyval
_Nodeptr _Pnode = _Root();
_Nodeptr _Wherenode = this->_Myhead();  // end() if search failswhile (!this->_Isnil(_Pnode))if (_Compare(this->_Key(_Pnode), _Keyval))_Pnode = this->_Right(_Pnode); // descend right subtreeelse{   // _Pnode not less than _Keyval, remember it_Wherenode = _Pnode;_Pnode = this->_Left(_Pnode);  // descend left subtree}return (_Wherenode);    // return best remembered candidate
}

这个没有什么说的

2, value

返回一个迭代器再查看const_iterator类型

你会发现在xtree模块中有这两个声明

typedef _Tree_comp_alloc<_Traits> _Mybase;
typedef typename _Mybase::const_iterator const_iterator;
typename _Mybase::iterator>::type iterator;

在查找一下_Tree_comp_alloc基类中有两个声明

typedef _Tree_const_iterator<_Tree_val<_Val_types> > const_iterator;
typedef _Tree_iterator<_Tree_val<_Val_types> > iterator;

value是一个大结构体,这会导致搜索时的内存频繁被交换出去,而导致效率低下, 所以我们使用指针类型

结语

不同游戏有着不同背包设置理念, 但只有一个目的就是适应玩家习惯。

个人博客地址:https://chensongpoixs.github.io

背包模块的设计(日常任务模块, 武器排行榜, 战术, 英雄战斗力, 活动模块)相关推荐

  1. ARTS打卡计划第一周-Share-系统字典模块的设计

    在软件开发的过程,经常有一些类型的字段信息:性别.学历.职级.车辆类别.公司类型.结算类型等.这些字段有2个特征:1是字段可选的类型是有限,2是字段可能会变化,我们把这种字段描述为字段字段.  本篇文 ...

  2. [短彩信]C#短彩信模块开发设计(1)——架构

    准备从以下几个方面简单的谈谈短彩信模块的实现: [短彩信]C#短彩信模块开发设计(1)--架构(http://www.cnblogs.com/CopyPaster/archive/2012/12/07 ...

  3. 一个权限管理模块的设计(转载)

    一 个用户权限管理模块的设计思路: 1. 权 限资源(功能资源) 系统的所有权限信息.权限具有上下级关系,是一个树状的结构.如下: <!--[if !supportLists]-->u  ...

  4. linux红外驱动程序,基于Linux操作系统和红外发射器实现系统模块的设计

    引 言 随着嵌入式系统及集成电路技术的飞速发展,针对移动手持终端的专用芯片获得了长足发展.芯片的RAM和ROM的容量越大,在上面跑操作系统也越来越容易.Linux是当今流行的操作系统之一.由于其内核健 ...

  5. lin-cms-dotnetcore功能模块的设计

    先来回答以下问题. 1.什么是cms? Content Management System,内容管理系统. 2.dotnetcore是什么? .NET Core,是由Microsoft开发,目前在.N ...

  6. 温度补偿计算公式_一种工业用温度测量模块的设计与实现

    一种工业用温度测量模块的设计与实现 罗伯特侯 0 引言 温度是工业生产中最重要的参数之一,因此温度测量设备在工业领域不可或缺.热电偶是工业场合中应用最广泛的温度传感器,它的主要特点是测温范围宽,价格低 ...

  7. [短彩信]C#短彩信模块开发设计(2)——配置

    准备从以下几个方面简单的谈谈短彩信模块的实现: [短彩信]C#短彩信模块开发设计(1)--架构(http://www.cnblogs.com/CopyPaster/archive/2012/12/07 ...

  8. 基于android的课程画图设计,基于Android的智能终端通信勘察设计系统绘图模块的设计与实现...

    摘要: 随着通信行业甲方对设计勘察要求的提高,设计院的工作人员在外勘察的任务也越来越重.而传统勘察绘图使用纸质介质进行信息采集并在整理后进行计算机制图的的方式效率过于低下,不能满足当前勘察对效率和成本 ...

  9. dcdc模块降额设计_一款高性能电源模块的设计思路

    该高性能电源模块要求的输入电压为20-35V,输出电压为10-10.2 V.5--5.2 V,工作温度为-55℃-+125℃,负载调整率和电压调整率均小于1%,输出纹波小于40 Mv.下面简单介绍下该 ...

最新文章

  1. 最新 ECSHOP v2.7.3数据表(88张表)
  2. 异常“本机框架位于调用堆栈顶部,因此无法计算表达式的值”的解决办法
  3. python基础知识总结-python编程语言基础知识总结
  4. c# 使用 itextsharp 实现生成Pdf报表
  5. _LVM——让Linux磁盘空间的弹性管理
  6. how debug option is handled - handle_debug
  7. Linux工作笔记-使用alias简化Linux命令(包含.bash和.cshrc)
  8. Incapsula企业版测试项目
  9. MySQL中单行函数concat_MySQL内置函数-单行函数(字符函数)
  10. Python使用ZeroMQ/inproc模式实现多线程服务端
  11. oracle创建登录用户有限制吗,Oracle创建用户限制文件,表空间用户授权等。
  12. Linux学习-账号管理
  13. java客户端操作elasticsearch7.3.2版本
  14. Ubuntu16.04下完美切换Python版本
  15. 最大似然估计_什么是最大似然估计
  16. 智能手机查看上网IP地址的多种方法
  17. IT科技行业发展现状,未来发展方向有哪些?
  18. Matlab学习日记(2)输入与输出
  19. pyqt5 商店小票打印的实现模板
  20. 数组传递的是referrence,而不是object

热门文章

  1. 加强版坦克大战(java版)
  2. 实战分享:闲鱼无货源项目如何从0开始做到月收入过万
  3. Google Earth Engine(GEE)——GEE版本的全球森林火灾信息获取并呈现2001-2020年四川省火灾亮度时间序列分析
  4. 【2022年】中科大研究生-考试题、复习资料汇总(往年真题+复习资料)(持续更新中)
  5. 人到中年:最近看到的几篇好文
  6. mysql数据库应用经典案例_MySQL数据库“十宗罪”(十大经典错误案例)
  7. java 堆中的新生代_Java堆内存_Young Gener_Old Generation_新生代和老年代
  8. word中图片批量修改
  9. mysql task06(结营)
  10. webpack初识体验demo