SpecialMultiple.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package TribalSlot
  2. import (
  3. _ "bet24.com/log"
  4. "math/rand"
  5. "sort"
  6. )
  7. type MultipleInfo struct {
  8. Multiple int
  9. Percent int
  10. }
  11. type Normal_Multiple struct {
  12. SlotCount int
  13. Multiple int
  14. IsSpecial int
  15. }
  16. type SpecialMultple struct {
  17. SlotID int
  18. NormalMultiple []Normal_Multiple
  19. MultiplePercent []MultipleInfo
  20. }
  21. func (s *SpecialMultple) getSpecialResult(slots []Slot) SpecialResult {
  22. var ret SpecialResult
  23. specialSlotCount := 0
  24. for _, v := range slots {
  25. if v.SlotID == s.SlotID {
  26. specialSlotCount++
  27. }
  28. }
  29. normalMultiple := 0
  30. isSpecial := 0
  31. for _, v := range s.NormalMultiple {
  32. if v.SlotCount <= specialSlotCount && v.Multiple > normalMultiple {
  33. normalMultiple = v.Multiple
  34. isSpecial = v.IsSpecial + isSpecial
  35. }
  36. }
  37. //log.Color(LogColor, "getSpecialResult specialSlotCount = %d,normalMultiple = %d,isSpecial = %d", specialSlotCount, normalMultiple, isSpecial)
  38. if normalMultiple == 0 {
  39. return ret
  40. }
  41. ret.SlotID = s.SlotID
  42. ret.SlotCount = specialSlotCount
  43. ret.WinRate1 = normalMultiple
  44. ret.WinRate2 = 0
  45. if isSpecial == 0 {
  46. return ret
  47. }
  48. // 取10000的模数,从高倍率往低取
  49. r := rand.Intn(10000)
  50. for _, v := range s.MultiplePercent {
  51. if r <= v.Percent {
  52. ret.WinRate2 = v.Multiple
  53. break
  54. }
  55. r -= v.Percent
  56. }
  57. return ret
  58. }
  59. func (s *SpecialMultple) sortByMultiple() {
  60. sort.Slice(s.MultiplePercent, func(i, j int) bool {
  61. return s.MultiplePercent[i].Multiple > s.MultiplePercent[j].Multiple
  62. })
  63. }