odds.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. package common
  2. import (
  3. "fmt"
  4. "math/rand"
  5. "bet24.com/log"
  6. )
  7. /*
  8. 热狗,烤串,鸡腿,肉片,萝卜,玉米,菠菜,西红柿
  9. HotDog:10 //热狗
  10. Kebab:15 //烤串
  11. ChickenLeg:25 //鸡腿
  12. MeatSlice:45 //肉片
  13. Radish:5 // 萝卜
  14. Corn:5 //玉米
  15. Spinach:5 //菠菜
  16. Tomato:5 //西红柿
  17. */
  18. type BetOption int
  19. const (
  20. HotDog BetOption = iota
  21. Kebab
  22. ChickenLeg
  23. MeatSlice
  24. Radish
  25. Corn
  26. Spinach
  27. Tomato
  28. BidTypeMax
  29. )
  30. var betOptionNames = []string{
  31. "热狗",
  32. "肉串",
  33. "鸡腿",
  34. "肉片",
  35. "萝卜",
  36. "玉米",
  37. "菠菜",
  38. "西红柿",
  39. }
  40. var betWinningOdds = map[BetOption]float64{
  41. HotDog: 10,
  42. Kebab: 15,
  43. ChickenLeg: 25,
  44. MeatSlice: 45,
  45. Radish: 5,
  46. Corn: 5,
  47. Spinach: 5,
  48. Tomato: 5,
  49. }
  50. var betProbability = []int{
  51. 1000, // HotDog
  52. 667, // Kebab
  53. 400, // ChickenLeg
  54. 222, // MeatSlice
  55. 2000, // Radish
  56. 2000, // Corn
  57. 2000, // Spinach
  58. 2000, // Tomato
  59. }
  60. func Spin() BetOption {
  61. // 计算下注区域的总概率
  62. var total float64
  63. for _, p := range betProbability {
  64. total += float64(p) / 10
  65. }
  66. // 生成一个随机数
  67. r := rand.Float64() * total
  68. // 根据随机数返回中奖结果
  69. var sum float64
  70. for i, p := range betProbability {
  71. sum += float64(p) / 10
  72. if r < sum {
  73. return BetOption(i)
  74. }
  75. }
  76. // 如果程序执行到这里,说明出现了意外情况,返回默认值
  77. return Corn
  78. }
  79. func GetOdds(spinResult BetOption) (odds float64) {
  80. odds = betWinningOdds[spinResult]
  81. return
  82. }
  83. func GetResultOdds(betId int, spinResult BetOption) (odds float64) {
  84. odds = 0
  85. if int(spinResult) == betId {
  86. odds = GetOdds(spinResult)
  87. }
  88. return
  89. }
  90. // 刷新获胜赔率
  91. func ResetWinningOdds(winningOdds []float64) {
  92. for i, o := range winningOdds {
  93. f := BetOption(i)
  94. if f < HotDog || f > BidTypeMax {
  95. continue // Invalid bet index, skip
  96. }
  97. if betWinningOdds[f] != o {
  98. betWinningOdds[f] = o
  99. }
  100. }
  101. }
  102. // 刷新下注区域概率
  103. func ResetBetProbability(probability []int) {
  104. for i, p := range probability {
  105. f := BetOption(i)
  106. if f < HotDog || f > BidTypeMax {
  107. continue // Invalid bet index, skip
  108. }
  109. if betProbability[i] != p {
  110. betProbability[i] = p
  111. }
  112. }
  113. }
  114. func GetBetDesc(betId int) string {
  115. max := int(BidTypeMax)
  116. if betId >= max || betId < int(HotDog) {
  117. log.Release("common.GetDesc failed %d,%d", betId, max)
  118. return "invalid bet"
  119. }
  120. return betOptionNames[betId]
  121. }
  122. func GetResultDesc(spinResult BetOption) string {
  123. return fmt.Sprintf("%d&[%s]", spinResult, betOptionNames[spinResult])
  124. }