admin 管理员组文章数量: 887031
背包模块的设计(日常任务模块, 武器排行榜, 战术, 英雄战斗力, 活动模块)
前言
游戏中背包模块设置关系到游戏整体设置, 一个背包模块设置好的 可以给玩家好体验, 在玩家可以清楚知道自己的物品的数据, 选择什么样的成长方式
正文
思维导图
一, 功能分类
1, 英雄的战斗力的计算
2, 日常任务模块
3, 排行榜
①, 武器排行榜
4, 物品的分类
①, 大的类别
- 消耗品
- 碎片 .合成材料
- 杂项
- 武器
- 情报
- 工具
- 芯片
②, 子的类别
- 体力
- 主角经验书
- 英雄经验书
- 宝箱
- 生命药剂
- 疲劳药剂
- BUFF药剂
- 钥匙串
5, 物品管理类的接口定义
①, 服务器使用的接口
- 增加物品
- 删除物品
- 分离物品
②, 客户端的接口定义
- 使用物品
- 打开宝箱
- 碎片合成
- 销售物品
- 武器强化
- 武器改造
- 武器分解
二, 数据结构的设置
背包的模块的数据玩家查询的次数是最多的, 在服务器的效率首选 红黑树结构, 使用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是一个大结构体,这会导致搜索时的内存频繁被交换出去,而导致效率低下, 所以我们使用指针类型
结语
不同游戏有着不同背包设置理念, 但只有一个目的就是适应玩家习惯。
个人博客地址:
本文标签: 背包模块的设计(日常任务模块 武器排行榜 战术 英雄战斗力 活动模块)
版权声明:本文标题:背包模块的设计(日常任务模块, 武器排行榜, 战术, 英雄战斗力, 活动模块) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1687196645h74987.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论