比赛服的部分结构设计:
// 分数结构
type RoleScore struct {
RoleId int
Wheels int
Score int
}
// 奖励结构
type RewardsInfo struct {
rewardType int // 奖励type
number int // 将励数量
}
竞赛详情设计:
// 竞赛详情
type RaceInfo struct {
Types int // 竞赛type 1. 常规赛 2. 循环赛
RaceName string // 竞赛名字
GameType int // 游戏type 1. 麻将 2. 斗地主
RaceType string // 比赛type 1.打立出局 2.定局积分 3.瑞士移位
StartMode int // 比赛方式 1. 人满即开 2.每二十分钟循环 3.每半小时循环
StartNumber int // 开赛人数
NowNumber int // 已经报名人数
RegistCondition int // 开赛条件 1.gold 2.开赛券 3.两者都可以
GoldsNumber int // 金币数量
RollType int // 参赛券类型 1. 大米券
RollNumber int // 参赛券数量
StartTime int64 // 开赛时间 备注 定时开赛为 unix 时间
RandTime int // 循环时间 单位分钟
EndTime int64 // 结束时间
IsStart bool // 是否开始 true 开始 false 没有开始
curRace int // 当前轮数
RaceTimes int // 总轮数
}
晋级排名代码(项目策划需求):
func SortToScore(infos []RoleScore, raceid int) (up, down []RoleScore, rankingTable map[int]int) {
rankingTable = make(map[int]int)
sort.Sort(ByScore{infos})
out := len(infos) / 2
up = append(up, infos[0:out]...)
down = append(down, infos[out:]...)
var randInfo map[int][]RoleScore = make(map[int][]RoleScore)
if len(outRoleNum[raceid]) > 0 {
outRole := outRoleNum[raceid]
for _, val := range outRole {
randInfo[val.RoleId] = append(randInfo[val.RoleId], val)
}
for _, val := range infos {
if _, ok := randInfo[val.RoleId]; ok {
randInfo[val.RoleId] = infos
}
}
sort.Sort(ByScore{randInfo[raceid]})
for num, info := range infos {
rankingTable[info.RoleId] = num + 1
}
} else {
for num, info := range infos {
rankingTable[info.RoleId] = num + 1
outRoleNum[raceid] = append(outRoleNum[raceid], info)
}
}
return
}
比赛服数据库配置设计(数据通过大厅,DB服传递):
有疑问加站长微信联系(非本文作者)