betlevel.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. package betlevel
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "os"
  6. "sort"
  7. "bet24.com/log"
  8. )
  9. // 下注level
  10. type BetLevel struct {
  11. Bet int // 下注额
  12. Level int
  13. Base int // 赔付低分
  14. IsValid bool // 是否可用,新手玩家只有一个投注额可用
  15. }
  16. type BetLevelManager struct {
  17. levels []BetLevel
  18. betlevelMsgId int
  19. newbieLevels []BetLevel
  20. }
  21. func NewBetLevelManagerByData(levels []BetLevel, betLevelMsgId int) *BetLevelManager {
  22. ret := new(BetLevelManager)
  23. ret.betlevelMsgId = betLevelMsgId
  24. ret.levels = levels
  25. ret.sortLevels()
  26. return ret
  27. }
  28. func NewBetLevelManager(configFile string, betLevelMsgId int) *BetLevelManager {
  29. //log.Debug("newBetLevelManager %s start", configFile)
  30. ret := new(BetLevelManager)
  31. if !ret.loadData(configFile) {
  32. return nil
  33. }
  34. ret.betlevelMsgId = betLevelMsgId
  35. log.Debug("newBetLevelManager %s ok", configFile)
  36. return ret
  37. }
  38. func (bm *BetLevelManager) loadData(configFile string) bool {
  39. data, err := os.ReadFile(fmt.Sprintf("slotconf/%s.json", configFile))
  40. if err != nil {
  41. log.Release("BetLevelManager.loadData read %s failed", configFile)
  42. return false
  43. }
  44. err = json.Unmarshal(data, &bm.levels)
  45. if err != nil {
  46. log.Release("BetLevelManager.loadData Unmarshal %s failed err:%v", configFile, err)
  47. return false
  48. }
  49. bm.sortLevels()
  50. return true
  51. }
  52. func (bm *BetLevelManager) sortLevels() {
  53. // 从大到小排序
  54. sort.Slice(bm.levels, func(i, j int) bool {
  55. return bm.levels[i].Bet > bm.levels[j].Bet
  56. })
  57. //
  58. bm.newbieLevels = make([]BetLevel, len(bm.levels))
  59. copy(bm.newbieLevels, bm.levels)
  60. for i := 0; i < len(bm.levels); i++ {
  61. bm.levels[i].IsValid = true
  62. bm.newbieLevels[i].IsValid = false
  63. }
  64. bm.newbieLevels[len(bm.newbieLevels)-1].IsValid = true
  65. log.Debug("BetLevelManager sortLevels %v,%v", bm.levels, bm.newbieLevels)
  66. }
  67. func (bm *BetLevelManager) GetLevel(amount int) int {
  68. for _, v := range bm.levels {
  69. if amount == v.Bet {
  70. return v.Level
  71. }
  72. }
  73. return -1
  74. }
  75. func (bm *BetLevelManager) GetLevelAndBase(amount int) (int, int) {
  76. for _, v := range bm.levels {
  77. if amount == v.Bet {
  78. base := v.Base
  79. if base == 0 {
  80. base = amount
  81. }
  82. return v.Level, base
  83. }
  84. }
  85. return 0, 0
  86. }
  87. func (bm *BetLevelManager) GetAmountByLevel(level int) int {
  88. for _, v := range bm.levels {
  89. if level == v.Level {
  90. return v.Bet
  91. }
  92. }
  93. return bm.GetLowestBet()
  94. }
  95. func (bm *BetLevelManager) GetLowestBet() int {
  96. if len(bm.levels) == 0 {
  97. return 0
  98. }
  99. return bm.levels[len(bm.levels)-1].Bet
  100. }
  101. func (bm *BetLevelManager) GetLowestLevel() BetLevel {
  102. if len(bm.levels) == 0 {
  103. return BetLevel{}
  104. }
  105. return bm.levels[len(bm.levels)-1]
  106. }
  107. func (bm *BetLevelManager) Levels() []BetLevel {
  108. return bm.levels
  109. }
  110. func (bm *BetLevelManager) NewbieLevels() []BetLevel {
  111. return bm.newbieLevels
  112. }
  113. func (bm *BetLevelManager) MsgId() int {
  114. return bm.betlevelMsgId
  115. }