可配合如下视频观看
https://www.bilibili.com/video/BV1hL411f7Pm/
业务使用场景
比如关卡的通关奖励
完成x-x1可领奖…
完成x-x2可领奖…
比如竞技场
挑战x1次,可领奖…
挑战x5次,可领奖…
需求分析
奖励有不同的用途分类 - group 或者 type
奖励有不同的档位
奖励可乱序领取
领奖时的状态
条件不足
已领取
可领取
模型
配置表
system_achieve_type(系统成就表)
system_achieve(系统成就)
存储的数据结构
使用字符串存储 10101010101的状态,用于标识哪些档位是否领取
1表示已领取、0表示未领取
//先显示可领取,在显示未领取,最后显示已经领去
public RewardsState GetStatus(string status, int index, bool condition)
{
//条件不足
if (!condition)
return RewardsState.LackOfCondition;
//字符串长度包含状态,检查处理是否已经领过了
//01011 想领取第三档
if (status.Length > index && status[index].Equals('1'))
return RewardsState.Rewarded;
//01011 想领取第7档
return RewardsState.CanReward;
}
/// <summary>
/// 领奖状态
/// </summary>
public enum RewardsState
{
/// <summary>
/// 条件不足
/// </summary>
LackOfCondition = 0,
/// <summary>
/// 可领取
/// </summary>
CanReward = 1,
/// <summary>
/// 已领取
/// </summary>
Rewarded = 2,
}
服务端
//奖励状态通过 0和1标识
// 是否已领取过该档位
func CanRewardGet(status string, index int) bool {
if len(status) > index {
//例子:10101 领第2位,index=1
b := fmt.Sprintf("%c", status[index])
if b == "1" {
return false
}
}
return true
}
//领取,index从0开始
func GetRewardSet(status string, index int) string {
if len(status) > index {
//例子:10101 领第2位,index=1
status = status[:index] + "1" + status[index+1:]
} else {
//例子:10101 领第17位,index=16
zearRepeatCount := index - len(status)
status += RepeatStr("0", zearRepeatCount)
status += "1"
//10101000000000000001
}
return status
}
https://www.bilibili.com/video/BV1hL411f7Pm/
业务使用场景
比如关卡的通关奖励
完成x-x1可领奖…
完成x-x2可领奖…
比如竞技场
挑战x1次,可领奖…
挑战x5次,可领奖…
需求分析
奖励有不同的用途分类 - group 或者 type
奖励有不同的档位
奖励可乱序领取
领奖时的状态
条件不足
已领取
可领取
模型
配置表
system_achieve_type(系统成就表)
system_achieve(系统成就)
存储的数据结构
使用字符串存储 10101010101的状态,用于标识哪些档位是否领取
1表示已领取、0表示未领取
//先显示可领取,在显示未领取,最后显示已经领去
public RewardsState GetStatus(string status, int index, bool condition)
{
//条件不足
if (!condition)
return RewardsState.LackOfCondition;
//字符串长度包含状态,检查处理是否已经领过了
//01011 想领取第三档
if (status.Length > index && status[index].Equals('1'))
return RewardsState.Rewarded;
//01011 想领取第7档
return RewardsState.CanReward;
}
/// <summary>
/// 领奖状态
/// </summary>
public enum RewardsState
{
/// <summary>
/// 条件不足
/// </summary>
LackOfCondition = 0,
/// <summary>
/// 可领取
/// </summary>
CanReward = 1,
/// <summary>
/// 已领取
/// </summary>
Rewarded = 2,
}
服务端
//奖励状态通过 0和1标识
// 是否已领取过该档位
func CanRewardGet(status string, index int) bool {
if len(status) > index {
//例子:10101 领第2位,index=1
b := fmt.Sprintf("%c", status[index])
if b == "1" {
return false
}
}
return true
}
//领取,index从0开始
func GetRewardSet(status string, index int) string {
if len(status) > index {
//例子:10101 领第2位,index=1
status = status[:index] + "1" + status[index+1:]
} else {
//例子:10101 领第17位,index=16
zearRepeatCount := index - len(status)
status += RepeatStr("0", zearRepeatCount)
status += "1"
//10101000000000000001
}
return status
}