Commit a16873dc974ee46c3ca1be1ec7f22d876319bcbe

Authored by 王家文
1 parent 27bec846
Exists in master

feat:排行榜系统

Showing 1 changed file with 24 additions and 19 deletions   Show diff stats
service/roomrank/room.go
... ... @@ -9,7 +9,6 @@ import (
9 9 "math"
10 10 "math/rand"
11 11 "sort"
12   - "time"
13 12 )
14 13  
15 14 func tryInitRoom(gameId string, room *Room) {
... ... @@ -235,6 +234,12 @@ func JoinInitRobot(gameId string, room *Room, roomConfig confroomrank.RoomConfig
235 234 }
236 235 }
237 236  
  237 +// TryReSort 尝试重新排序
  238 +func TryReSort(room *Room, config *confroomrank.ActivityConfig) {
  239 + TryResetRobot(room, config, false)
  240 + sort.Sort(room.Details)
  241 +}
  242 +
238 243 // TrySettleRoom 尝试结算房间
239 244 func TrySettleRoom(gameId string, room *Room, config *confroomrank.ActivityConfig) {
240 245 // 已经结算过的不结算
... ... @@ -259,7 +264,6 @@ func TrySettleRoom(gameId string, room *Room, config *confroomrank.ActivityConfi
259 264  
260 265 percent := float64(0)
261 266 dateEnd := GetTimeEnd(room.ActivityTime, config.ReleaseTime)
262   - secTotal := 24 * 60 * 60
263 267 dtEnd := dateEnd.Unix()
264 268 if dtEnd > config.EndTime {
265 269 dtEnd = config.EndTime
... ... @@ -268,11 +272,7 @@ func TrySettleRoom(gameId string, room *Room, config *confroomrank.ActivityConfi
268 272 if dtEnd <= dtCreate {
269 273 percent = 0
270 274 } else {
271   - percent = float64(dtEnd-dtCreate) * 100 / float64(secTotal)
272   - // 如果 结算时间-创建时间 小于8小时 根据这个房间存在时间进行衰减
273   - if dtEnd-dtCreate < int64(time.Hour*8) {
274   - percent = percent * float64(dtEnd-dtCreate) / float64(time.Hour*8)
275   - }
  275 + percent = 100
276 276 }
277 277 // 机器人最终算分
278 278 for i := 0; i < len(room.Details.Players); i++ {
... ... @@ -282,7 +282,13 @@ func TrySettleRoom(gameId string, room *Room, config *confroomrank.ActivityConfi
282 282 }
283 283 confRobot, hasConfRobot := config.Robot[roomPlayer.RobotConfigId]
284 284 if hasConfRobot {
285   - roomPlayer.Score = GetRobotScoreCurrent(config, &confRobot, percent)
  285 + totalScore := int64(confRobot.TotalScore)
  286 + // 如果 结算时间-创建时间 小于8小时 根据这个房间存在时间进行衰减
  287 + secGap := int64(8 * 60 * 60)
  288 + if dtEnd-dtCreate < secGap {
  289 + totalScore = totalScore * (dtEnd - dtCreate) / secGap
  290 + }
  291 + roomPlayer.Score = GetRobotScoreCurrent(config, &confRobot, totalScore, percent)
286 292 if roomPlayer.Score < int64(confRobot.MinScore) {
287 293 roomPlayer.Score = int64(confRobot.MinScore)
288 294 }
... ... @@ -304,7 +310,6 @@ func TryResetRobot(room *Room, config *confroomrank.ActivityConfig, force bool)
304 310  
305 311 percent := float64(0)
306 312 dateEnd := GetTimeEnd(room.ActivityTime, config.ReleaseTime)
307   - secTotal := 24 * 60 * 60
308 313 dtEnd := dateEnd.Unix()
309 314 if dtEnd > config.EndTime {
310 315 dtEnd = config.EndTime
... ... @@ -317,7 +322,7 @@ func TryResetRobot(room *Room, config *confroomrank.ActivityConfig, force bool)
317 322 } else if secNow >= dtEnd {
318 323 percent = 100
319 324 } else {
320   - percent = float64(secNow-dtCreate) * 100 / float64(secTotal)
  325 + percent = float64(secNow-dtCreate) * 100 / float64(dtEnd-dtCreate)
321 326 }
322 327  
323 328 // 机器人即时算分
... ... @@ -328,20 +333,20 @@ func TryResetRobot(room *Room, config *confroomrank.ActivityConfig, force bool)
328 333 }
329 334 confRobot, hasConfRobot := config.Robot[roomPlayer.RobotConfigId]
330 335 if hasConfRobot {
331   - roomPlayer.Score = GetRobotScoreCurrent(config, &confRobot, percent)
  336 + totalScore := int64(confRobot.TotalScore)
  337 + // 如果 结算时间-创建时间 小于8小时 根据这个房间存在时间进行衰减
  338 + secGap := int64(8 * 60 * 60)
  339 + if dtEnd-dtCreate < secGap {
  340 + totalScore = totalScore * (dtEnd - dtCreate) / secGap
  341 + }
  342 + roomPlayer.Score = GetRobotScoreCurrent(config, &confRobot, totalScore, percent)
332 343 }
333 344 }
334 345 }
335 346  
336   -// TryReSort 尝试重新排序
337   -func TryReSort(room *Room, config *confroomrank.ActivityConfig) {
338   - TryResetRobot(room, config, false)
339   - sort.Sort(room.Details)
340   -}
341   -
342 347 // GetRobotScoreCurrent 从机器人配置里得到实时得分
343   -func GetRobotScoreCurrent(config *confroomrank.ActivityConfig, confRobot *confroomrank.RobotConfig, percent float64) int64 {
344   - score := (float64(confRobot.TotalScore-int(config.OpenScore)) *
  348 +func GetRobotScoreCurrent(config *confroomrank.ActivityConfig, confRobot *confroomrank.RobotConfig, totalScore int64, percent float64) int64 {
  349 + score := (float64(totalScore-config.OpenScore) *
345 350 float64(100-confRobot.Range+rand.Intn(confRobot.Range*2)) / 100) * percent / 100
346 351 result := config.OpenScore + int64(math.Ceil(score))
347 352 if result < config.OpenScore {
... ...