前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >按十进制位与运算

按十进制位与运算

作者头像
用户1396155
发布2018-08-02 16:04:40
5920
发布2018-08-02 16:04:40
举报
文章被收录于专栏:IT探索

需求:所有包含5级装备的奖励,需要通关10234567后才能领取。

前提:

游戏的ID规则如下:

长度:8位十进制数,如12345678

前2位表示ID类型,比如10表示关卡ID,11表示装备ID,12表示物品ID;

其中对于一个装备ID:11234567

2表示品质;

34表示部位;

567表示等级;

解决方案:

方法1:对程序员来说最简单的是,让游戏策划把所有5级装备都配置在表格里,他们的解锁关卡都是10234567;

缺点:仅这一条限制,策划最多需要填写999999条记录,这样对于程序来说查找性能,内存占用都是一个问题;

方法2:按十进制位模式匹配:与规则无关的位填成0,相关的位,填成相应的值

策划只需要填写一条记录:ID=11000005,关卡ID=10234567

对于不懂程序的从业人员来说,按十进制位填写模式匹配模版是一个很容易理解的方法。

查找排序的比较函数代码如下:

代码语言:javascript
复制
//递归调用,先高位,后低位
	//按十进制位比较,若为0,则忽略当前位,
    static inline int DecimalBitCompare(uint32_t dwA, uint32_t dwB)
    {
    	//比较个位数
    	//dwA和dwB都为个位数    	
    	if(dwA/10 == 0
			&&dwB/10 == 0)
   		{
   			if(dwA != 0 && dwB != 0)
 			{
 	  			return dwA - dwB;
			}
			return 0;
   		}
		//比较高位
		int iHighResult = DecimalBitCompare(dwA/10, dwB/10);
		if(iHighResult == 0)
		{
			//高位相同,则比较低位
			return DecimalBitCompare(dwA%10, dwB%10);
		}
		return iHighResult;
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年11月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前提:
  • 解决方案:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档