slot.go 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. package wildapeslot
  2. import (
  3. "encoding/json"
  4. "os"
  5. "bet24.com/log"
  6. )
  7. type Slot struct {
  8. SlotID int // 编号
  9. IsMagic int // 万能牌
  10. IsBonus bool
  11. IsFree bool
  12. Name string // 名字
  13. Win3 float64 // 3个连线赔率
  14. Win4 float64 // 4个连线赔率
  15. Win5 float64 // 5个连线赔率
  16. }
  17. //读取配置的时候初始化
  18. var FREE_ID int
  19. var BONUS_ID int
  20. var MAGIC_ID int
  21. func (s *Slot) isMagic() bool {
  22. return s.IsMagic > 0
  23. }
  24. type SlotManager struct {
  25. Slots []Slot
  26. }
  27. func newSlotManager() *SlotManager {
  28. log.Color(LogColor, "newSlotManager")
  29. ret := new(SlotManager)
  30. ret.loadData()
  31. return ret
  32. }
  33. func (sm *SlotManager) getMagicSlotId() int {
  34. for _, v := range sm.Slots {
  35. if v.isMagic() {
  36. return v.SlotID
  37. }
  38. }
  39. return -1
  40. }
  41. func (sm *SlotManager) loadData() {
  42. data, err := os.ReadFile("slotconf/wildapeslot.json")
  43. if err != nil {
  44. log.Error("SlotManager.loadData read wildapeslot.json failed")
  45. }
  46. err = json.Unmarshal(data, &sm.Slots)
  47. if err != nil {
  48. log.Error("SlotManager.loadData Unmarshal wildapeslot.json failed err:%v", err)
  49. return
  50. }
  51. for _, v := range sm.Slots {
  52. if v.isMagic() {
  53. MAGIC_ID = v.SlotID
  54. } else if v.IsFree {
  55. FREE_ID = v.SlotID
  56. } else if v.IsBonus {
  57. BONUS_ID = v.SlotID
  58. }
  59. }
  60. }
  61. func (sm *SlotManager) getSlot(slotId int) *Slot {
  62. for _, v := range sm.Slots {
  63. if v.SlotID == slotId {
  64. return &v
  65. }
  66. }
  67. return nil
  68. }
  69. func (sm *SlotManager) isMagic(slotId int) bool {
  70. s := sm.getSlot(slotId)
  71. if s == nil {
  72. log.Color(LogColor, "SlotManager.isMagic invlaid SlotId %d", slotId)
  73. return false
  74. }
  75. return s.isMagic()
  76. }
  77. func (sm *SlotManager) getBonusCount(slots []int) int {
  78. count := 0
  79. for _, v := range slots {
  80. if sm.getSlot(v).IsBonus {
  81. count++
  82. }
  83. }
  84. return count
  85. }
  86. // 查看5个组合是否中
  87. // func (sm *SlotManager) getResult(slots []int) (slotId, count int, winMultiple float64) {
  88. // slotId = -1
  89. // winMultiple = 0.0
  90. // count = 0
  91. // if len(slots) != COLUMN_COUNT {
  92. // log.Color(LogColor, "SlotManager.getResult invalid len %v", slots)
  93. // return
  94. // }
  95. // for i := 0; i < COLUMN_COUNT; i++ {
  96. // if sm.isMagic(slots[i]) {
  97. // count++
  98. // continue
  99. // }
  100. // if slotId == -1 {
  101. // slotId = slots[i]
  102. // count++
  103. // continue
  104. // }
  105. // if slots[i] != slotId {
  106. // break
  107. // }
  108. // count++
  109. // }
  110. // if slotId == -1 {
  111. // return
  112. // }
  113. // slot := sm.getSlot(slotId)
  114. // if slot == nil {
  115. // return
  116. // }
  117. // switch count {
  118. // case 3:
  119. // winMultiple = slot.Win3
  120. // case 4:
  121. // winMultiple = slot.Win4
  122. // case 5:
  123. // winMultiple = slot.Win5
  124. // default:
  125. // return
  126. // }
  127. // return
  128. // }
  129. // func (sm *SlotManager) getResults(slots []int) []Result {
  130. // var ret []Result
  131. // for r1 := 0; r1 < ROW_COUNT; r1++ {
  132. // for r2 := 0; r2 < ROW_COUNT; r2++ {
  133. // for r3 := 0; r3 < ROW_COUNT; r3++ {
  134. // for r4 := 0; r4 < ROW_COUNT; r4++ {
  135. // for r5 := 0; r5 < ROW_COUNT; r5++ {
  136. // slotId, count, winMultiple := sm.getResult([]int{
  137. // slots[r1*COLUMN_COUNT],
  138. // slots[r2*COLUMN_COUNT+1],
  139. // slots[r3*COLUMN_COUNT+2],
  140. // slots[r4*COLUMN_COUNT+3],
  141. // slots[r5*COLUMN_COUNT+4],
  142. // })
  143. // if winMultiple > 0 {
  144. // winShape := 0
  145. // if count == 3 {
  146. // winShape = (r1+1)*100 + (r2+1)*10 + r3 + 1
  147. // } else if count == 4 {
  148. // winShape = (r1+1)*1000 + (r2+1)*100 + (r3+1)*10 + r4 + 1
  149. // } else if count == 5 {
  150. // winShape = (r1+1)*10000 + (r2+1)*1000 + (r3+1)*100 + (r4+1)*10 + r5 + 1
  151. // }
  152. // ret = append(ret, Result{
  153. // SlotID: slotId,
  154. // SlotCount: count,
  155. // WinShape: winShape,
  156. // WinRate: winMultiple,
  157. // })
  158. // }
  159. // }
  160. // }
  161. // }
  162. // }
  163. // }
  164. // // 去重,把短的去掉
  165. // if len(ret) == 0 {
  166. // return ret
  167. // }
  168. // sort.Slice(ret, func(i, j int) bool {
  169. // return ret[i].WinShape < ret[j].WinShape
  170. // })
  171. // for i := 0; i < len(ret)-1; {
  172. // flag := false
  173. // for j := i + 1; j < len(ret); j++ {
  174. // if ret[i].WinShape == ret[j].WinShape ||
  175. // ret[i].WinShape == ret[j].WinShape/10 ||
  176. // ret[i].WinShape == ret[j].WinShape/100 {
  177. // flag = true
  178. // break
  179. // }
  180. // }
  181. // if flag {
  182. // ret = append(ret[:i], ret[i+1:]...)
  183. // } else {
  184. // i++
  185. // }
  186. // }
  187. // return ret
  188. // }