需求:所有包含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
对于不懂程序的从业人员来说,按十进制位填写模式匹配模版是一个很容易理解的方法。
查找排序的比较函数代码如下:
//递归调用,先高位,后低位
//按十进制位比较,若为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;
}