fan.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package rezekislot
  2. import "bet24.com/log"
  3. type Fan struct {
  4. FanID int // 编号
  5. Win int // 赢金跟IsLevel相关
  6. IsLevel int // 是否跟随等级增加翻倍奖励
  7. IsAllWins int // 是否全赢记录的是全赢的倍数
  8. IsGrand int // 是否Grand大奖
  9. }
  10. type FanManager struct {
  11. fanConfig []Fan
  12. }
  13. func newFanManager(fanConfig []Fan) *FanManager {
  14. ret := new(FanManager)
  15. ret.fanConfig = fanConfig
  16. return ret
  17. }
  18. func (f *Fan) isLevel() bool {
  19. return f.IsLevel > 0
  20. }
  21. func (f *Fan) isAllWins() bool {
  22. return f.IsAllWins > 0
  23. }
  24. func (f *Fan) isGrand() bool {
  25. return f.IsGrand > 0
  26. }
  27. func (fm *FanManager) getFan(fanId int) *Fan {
  28. for _, v := range fm.fanConfig {
  29. if v.FanID == fanId {
  30. return &v
  31. }
  32. }
  33. return nil
  34. }
  35. func (fm *FanManager) isGrand(fanId int) bool {
  36. s := fm.getFan(fanId)
  37. if s == nil {
  38. log.Color(LogColor, "FanManager.isGrand invlaid FanId %d", fanId)
  39. return false
  40. }
  41. return s.isGrand()
  42. }
  43. func (fm *FanManager) isLevel(fanId int) bool {
  44. s := fm.getFan(fanId)
  45. if s == nil {
  46. log.Color(LogColor, "FanManager.isLevel invlaid FanId %d", fanId)
  47. return false
  48. }
  49. return s.isLevel()
  50. }
  51. func (fm *FanManager) isAllWins(fanId int) bool {
  52. s := fm.getFan(fanId)
  53. if s == nil {
  54. log.Color(LogColor, "FanManager.isAllWins invlaid FanId %d", fanId)
  55. return false
  56. }
  57. return s.isAllWins()
  58. }
  59. //获取所有的Jackpot扇子ID
  60. func (fm *FanManager) getJackpotFanId() []int {
  61. ret := []int{}
  62. for _, v := range fm.fanConfig {
  63. if v.isGrand() {
  64. ret = append(ret, v.FanID)
  65. }
  66. }
  67. return ret
  68. }
  69. func (fm *FanManager) getResults(fanId, betAmount, baseAmount, winAmount int) (ret FanResult) {
  70. ret.FanID = fanId
  71. ret.IsGrand = false
  72. //检查id是否正确
  73. if fanId == -1 {
  74. return ret
  75. }
  76. //检查配置表是否存在
  77. fan := fm.getFan(fanId)
  78. if fan == nil {
  79. return ret
  80. }
  81. //判断是否为 随着下注额倍数增加
  82. if fan.isLevel() {
  83. winRate := betAmount / baseAmount //获得倍数
  84. ret.WinAmount = fan.Win * winRate
  85. return ret
  86. } else if fan.isAllWins() {
  87. //全赢 当前线获胜金额乘以倍数
  88. ret.WinAmount = (fan.IsAllWins - 1) * winAmount
  89. return ret
  90. } else if fan.isGrand() {
  91. //判断是否为 Grand
  92. ret.IsGrand = true
  93. return ret
  94. }
  95. return ret
  96. }