betlevel.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  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. newbieLevels []BetLevel
  19. }
  20. func NewBetLevelManagerByData(levels []BetLevel) *BetLevelManager {
  21. ret := new(BetLevelManager)
  22. ret.levels = levels
  23. ret.sortLevels()
  24. return ret
  25. }
  26. func NewBetLevelManager(configFile string) *BetLevelManager {
  27. //log.Debug("newBetLevelManager %s start", configFile)
  28. ret := new(BetLevelManager)
  29. if !ret.loadData(configFile) {
  30. return nil
  31. }
  32. log.Debug("newBetLevelManager %s ok", configFile)
  33. return ret
  34. }
  35. func (bm *BetLevelManager) loadData(configFile string) bool {
  36. data, err := os.ReadFile(fmt.Sprintf("slotconf/%s.json", configFile))
  37. if err != nil {
  38. log.Release("BetLevelManager.loadData read %s failed", configFile)
  39. return false
  40. }
  41. err = json.Unmarshal(data, &bm.levels)
  42. if err != nil {
  43. log.Release("BetLevelManager.loadData Unmarshal %s failed err:%v", configFile, err)
  44. return false
  45. }
  46. bm.sortLevels()
  47. return true
  48. }
  49. func (bm *BetLevelManager) sortLevels() {
  50. // 从大到小排序
  51. sort.Slice(bm.levels, func(i, j int) bool {
  52. return bm.levels[i].Bet > bm.levels[j].Bet
  53. })
  54. //
  55. bm.newbieLevels = make([]BetLevel, len(bm.levels))
  56. copy(bm.newbieLevels, bm.levels)
  57. for i := 0; i < len(bm.levels); i++ {
  58. bm.levels[i].IsValid = true
  59. bm.newbieLevels[i].IsValid = false
  60. }
  61. bm.newbieLevels[len(bm.newbieLevels)-1].IsValid = true
  62. //log.Debug("BetLevelManager sortLevels %v,%v", bm.levels, bm.newbieLevels)
  63. }
  64. func (bm *BetLevelManager) GetLevel(amount int) int {
  65. for _, v := range bm.levels {
  66. if amount == v.Bet {
  67. return v.Level
  68. }
  69. }
  70. return -1
  71. }
  72. func (bm *BetLevelManager) GetLevelAndBase(amount int) (int, int) {
  73. for _, v := range bm.levels {
  74. if amount == v.Bet {
  75. base := v.Base
  76. if base == 0 {
  77. base = amount
  78. }
  79. return v.Level, base
  80. }
  81. }
  82. return 0, 0
  83. }
  84. func (bm *BetLevelManager) GetAmountByLevel(level int) int {
  85. for _, v := range bm.levels {
  86. if level == v.Level {
  87. return v.Bet
  88. }
  89. }
  90. return bm.GetLowestBet()
  91. }
  92. func (bm *BetLevelManager) GetLowestBet() int {
  93. if len(bm.levels) == 0 {
  94. return 0
  95. }
  96. return bm.levels[len(bm.levels)-1].Bet
  97. }
  98. func (bm *BetLevelManager) GetLowestLevel() BetLevel {
  99. if len(bm.levels) == 0 {
  100. return BetLevel{}
  101. }
  102. return bm.levels[len(bm.levels)-1]
  103. }
  104. func (bm *BetLevelManager) Levels() []BetLevel {
  105. return bm.levels
  106. }
  107. func (bm *BetLevelManager) NewbieLevels() []BetLevel {
  108. return bm.newbieLevels
  109. }