GameplayRuleEnum.php 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <?php
  2. namespace App\Constants;
  3. // 玩法枚举
  4. class GameplayRuleEnum
  5. {
  6. const SINGLE = '单';
  7. const DOUBLE = '双';
  8. const BIG = '大';
  9. const SMALL = '小';
  10. const EXTREME_BIG = '极大';
  11. const EXTREME_SMALL = '极小';
  12. const BAO_ZI = '豹子';
  13. const PAIRS = '对子';
  14. const STRAIGHT = '顺子';
  15. const ONE = '一段';
  16. const TWO = '二段';
  17. const THREE = '三段';
  18. const FOUR = '四段';
  19. // 包含本身体
  20. const SUM_BIG = 14; // 总和算大
  21. const SUM_SMALL = 13; // 总和算小
  22. const SUM_EXTREME_BIG = 22; // 总和极大
  23. const SUM_EXTREME_SMALL = 6; // 总和极小
  24. const ONE_BIG = 5; // 尾数算大
  25. const ONE_SMALL = 4; // 尾数算小
  26. const SECTION_1 = [0,6]; // 一段范围
  27. const SECTION_2 = [7,13]; // 二段范围
  28. const SECTION_3 = [14,20]; // 三段范围
  29. const SECTION_4 = [21,27]; // 四段范围
  30. public static $RULES = [
  31. '总和' => [
  32. '单',
  33. '双',
  34. '大',
  35. '小',
  36. '大单',
  37. '大双',
  38. '小单',
  39. '小双',
  40. '极大',
  41. '极小',
  42. '0操',
  43. '1操',
  44. '2操',
  45. '3操',
  46. '4操',
  47. '5操',
  48. '6操',
  49. '7操',
  50. '8操',
  51. '9操',
  52. '10操',
  53. '11操',
  54. '12操',
  55. '13操',
  56. '14操',
  57. '15操',
  58. '16操',
  59. '17操',
  60. '18操',
  61. '19操',
  62. '20操',
  63. '21操',
  64. '22操',
  65. '23操',
  66. '24操',
  67. '25操',
  68. '26操',
  69. '27操',
  70. '顺子',
  71. '对子',
  72. '豹子',
  73. ],
  74. '尾数' => [
  75. '0尾',
  76. '1尾',
  77. '2尾',
  78. '3尾',
  79. '4尾',
  80. '5尾',
  81. '6尾',
  82. '7尾',
  83. '8尾',
  84. '9尾',
  85. '尾大',
  86. '尾小',
  87. '尾单',
  88. '尾双',
  89. '尾大单',
  90. '尾大双',
  91. '尾小单',
  92. '尾小双',
  93. ],
  94. '个位球' => [
  95. 'A大',
  96. 'A小',
  97. 'A单',
  98. 'A双',
  99. 'B大',
  100. 'B小',
  101. 'B单',
  102. 'B双',
  103. 'C大',
  104. 'C小',
  105. 'C单',
  106. 'C双',
  107. '0A',
  108. '1A',
  109. '2A',
  110. '3A',
  111. '4A',
  112. '5A',
  113. '6A',
  114. '7A',
  115. '8A',
  116. '9A',
  117. '0B',
  118. '1B',
  119. '2B',
  120. '3B',
  121. '4B',
  122. '5B',
  123. '6B',
  124. '7B',
  125. '8B',
  126. '9B',
  127. '0C',
  128. '1C',
  129. '2C',
  130. '3C',
  131. '4C',
  132. '5C',
  133. '6C',
  134. '7C',
  135. '8C',
  136. '9C',
  137. ],
  138. '多段' => [
  139. '一段',
  140. '二段',
  141. '三段',
  142. '四段',
  143. ]
  144. ];
  145. /**
  146. * 验证并解析用户输入
  147. * @param string $input 例如 "大单100" / "5操20"
  148. * @return array|null 返回 ['rule' => 玩法, 'amount' => 金额],失败返回 null
  149. */
  150. public static function validateInput(string $input): ?array
  151. {
  152. // 获取所有玩法
  153. $allRules = array_merge(...array_values(self::$RULES));
  154. // 玩法正则(防止玩法里有特殊符号出错)
  155. $rulesPattern = implode('|', array_map('preg_quote', $allRules));
  156. // 匹配玩法 + 金额
  157. if (preg_match('/^(' . $rulesPattern . ')(\d+)$/u', $input, $matches)) {
  158. return [
  159. 'rule' => $matches[1],
  160. 'amount' => (int)$matches[2]
  161. ];
  162. }
  163. return null;
  164. }
  165. }