texas-poker-core 1.2.7 → 1.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -383,4 +383,10 @@ bufix
383
383
  修复行动前下注金额错误计算逻辑
384
384
 
385
385
  ## 1.2.7
386
- 不使用core.js
386
+ 不使用core.js
387
+
388
+ ## 1.2.8
389
+ 增加deck.core下部分函数导出
390
+
391
+ ## 1.2.9
392
+ 使用枚举值重构action&stage; 调整presentation的计算方式, 增加转换Int的方法, 便于以后数据库索引
@@ -4,4 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.stageMap = void 0;
7
- var stageMap = exports.stageMap = new Map([['pre_flop', '翻牌前'], ['flop', '翻牌圈'], ['turn', '转牌圈'], ['river', '河牌']]);
7
+ var _ = require(".");
8
+ var stageMap = exports.stageMap = new Map([[_.StageEnum.PRE_FLOP, '翻牌前'], [_.StageEnum.FLOP, '翻牌圈'], [_.StageEnum.TURN, '转牌圈'], [_.StageEnum.RIVER, '河牌']]);
@@ -4,9 +4,15 @@ function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" ==
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.default = void 0;
7
+ exports.default = exports.StageEnum = void 0;
8
8
  var _TexasError = _interopRequireDefault(require("../TexasError"));
9
9
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
10
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
11
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
12
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
13
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
14
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
15
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
10
16
  function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
11
17
  function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
12
18
  function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
@@ -22,7 +28,14 @@ function _checkPrivateRedeclaration(e, t) { if (t.has(e)) throw new TypeError("C
22
28
  function _classPrivateFieldGet(s, a) { return s.get(_assertClassBrand(s, a)); }
23
29
  function _classPrivateFieldSet(s, a, r) { return s.set(_assertClassBrand(s, a), r), r; }
24
30
  function _assertClassBrand(e, t, n) { if ("function" == typeof e ? e === t : e.has(t)) return arguments.length < 3 ? t : n; throw new TypeError("Private element is not present on this object"); } // 控制游戏的进程
25
- var stages = ['pre_flop', 'flop', 'turn', 'river'];
31
+ var StageEnum = exports.StageEnum = /*#__PURE__*/function (StageEnum) {
32
+ StageEnum["PRE_FLOP"] = "pre_flop";
33
+ StageEnum["FLOP"] = "flop";
34
+ StageEnum["TURN"] = "turn";
35
+ StageEnum["RIVER"] = "river";
36
+ return StageEnum;
37
+ }({});
38
+ var stages = [StageEnum.PRE_FLOP, StageEnum.FLOP, StageEnum.TURN, StageEnum.RIVER];
26
39
  var _status = /*#__PURE__*/new WeakMap();
27
40
  var _stage = /*#__PURE__*/new WeakMap();
28
41
  var _endAt = /*#__PURE__*/new WeakMap();
@@ -43,9 +56,9 @@ var Controller = /*#__PURE__*/function () {
43
56
  _classCallCheck(this, Controller);
44
57
  _classPrivateMethodInitSpec(this, _Controller_brand);
45
58
  _classPrivateFieldInitSpec(this, _status, 'waiting');
46
- _classPrivateFieldInitSpec(this, _stage, 'pre_flop');
59
+ _classPrivateFieldInitSpec(this, _stage, StageEnum.PRE_FLOP);
47
60
  // 游戏在哪个极端结束的, 比如翻牌圈其他玩家都弃牌, 游戏在这个阶段就结束了
48
- _classPrivateFieldInitSpec(this, _endAt, 'pre_flop');
61
+ _classPrivateFieldInitSpec(this, _endAt, StageEnum.PRE_FLOP);
49
62
  _classPrivateFieldInitSpec(this, _activePlayer, null);
50
63
  _classPrivateFieldInitSpec(this, _timer, null);
51
64
  // 记录游戏的进行时间,单位 second
@@ -128,15 +141,20 @@ var Controller = /*#__PURE__*/function () {
128
141
  var playersCanAct = _classPrivateFieldGet(_dealer, this).getPlayersCanAct();
129
142
  var shouldEndGame = playersCanAct.length === 0 || playersCanAct.length === 1 && !playersCanAct[0].actionable() || _classPrivateFieldGet(_dealer, this).every(function (player) {
130
143
  return !player.actionable();
131
- }) && _classPrivateFieldGet(_stage, this) === 'river';
144
+ }) && _classPrivateFieldGet(_stage, this) === StageEnum.RIVER;
132
145
  if (shouldEndGame) {
133
- var _classPrivateFieldGet3;
146
+ var _classPrivateFieldGet4;
134
147
  this.end();
135
148
  _classPrivateFieldSet(_endAt, this, this.stage);
136
- (_classPrivateFieldGet3 = _classPrivateFieldGet(_callbackOfEnd, this)) === null || _classPrivateFieldGet3 === void 0 || _classPrivateFieldGet3.call(this, {
137
- restCommonPokes: this.getCommonPokes(_classPrivateFieldGet(_stage, this), 'river'),
149
+ var _classPrivateFieldGet3 = _classPrivateFieldGet(_dealer, this).deck.getMaxPresentationAndPokes(),
150
+ presentation = _classPrivateFieldGet3.presentation,
151
+ pokes = _classPrivateFieldGet3.pokes;
152
+ (_classPrivateFieldGet4 = _classPrivateFieldGet(_callbackOfEnd, this)) === null || _classPrivateFieldGet4 === void 0 || _classPrivateFieldGet4.call(this, {
153
+ showHandPokes: true,
138
154
  currentStage: _classPrivateFieldGet(_stage, this),
139
- showHandPokes: true
155
+ restCommonPokes: this.getCommonPokes(_classPrivateFieldGet(_stage, this), StageEnum.RIVER),
156
+ maxPokes: pokes,
157
+ maxPresentation: presentation[0]
140
158
  });
141
159
  console.log('游戏结束(shouldEndGame):', _classPrivateFieldGet(_endAt, this));
142
160
  return true;
@@ -156,21 +174,21 @@ var Controller = /*#__PURE__*/function () {
156
174
  return !player.actionable();
157
175
  });
158
176
  if (canPushToNextStage) {
159
- var _classPrivateFieldGet4, _classPrivateFieldGet5;
160
- console.log('推进到下个阶段, 触发人', (_classPrivateFieldGet4 = _classPrivateFieldGet(_activePlayer, this)) === null || _classPrivateFieldGet4 === void 0 ? void 0 : _classPrivateFieldGet4.getUserInfo().name);
177
+ var _classPrivateFieldGet5, _classPrivateFieldGet6;
178
+ console.log('推进到下个阶段, 触发人', (_classPrivateFieldGet5 = _classPrivateFieldGet(_activePlayer, this)) === null || _classPrivateFieldGet5 === void 0 ? void 0 : _classPrivateFieldGet5.getUserInfo().name);
161
179
  var index = stages.findIndex(function (stage) {
162
180
  return stage === _classPrivateFieldGet(_stage, _this);
163
181
  });
164
- var lastStage = _classPrivateFieldGet(_stage, this);
182
+ var currentStage = _classPrivateFieldGet(_stage, this);
165
183
  var nextStage = stages[index + 1];
166
184
  _classPrivateFieldSet(_stage, this, nextStage);
167
185
  _classPrivateFieldGet(_dealer, this).resetCurrentStageTotalAmount();
168
186
  _classPrivateFieldGet(_dealer, this).resetActionsOfPlayers();
169
187
  _classPrivateFieldGet(_dealer, this).resetActionsHistory();
170
- (_classPrivateFieldGet5 = _classPrivateFieldGet(_callbackOnNextStage, this)) === null || _classPrivateFieldGet5 === void 0 || _classPrivateFieldGet5.call(this, {
188
+ (_classPrivateFieldGet6 = _classPrivateFieldGet(_callbackOnNextStage, this)) === null || _classPrivateFieldGet6 === void 0 || _classPrivateFieldGet6.call(this, {
171
189
  stage: nextStage,
172
- lastStage: lastStage,
173
- commonPokes: this.getCommonPokes(lastStage, nextStage)
190
+ lastStage: currentStage,
191
+ commonPokes: this.getCommonPokes(currentStage, nextStage)
174
192
  });
175
193
  console.log('游戏进入下一个阶段 => ', _classPrivateFieldGet(_stage, this));
176
194
  this.resetActivePlayer();
@@ -215,87 +233,93 @@ var Controller = /*#__PURE__*/function () {
215
233
  }
216
234
 
217
235
  // 大盲小盲的默认下注行为
236
+ // 在双人竞技中, 庄家需要下小盲注, 同时率先开始行动
218
237
  }, {
219
238
  key: "takeActionInPreFlop",
220
239
  value: function () {
221
- var _takeActionInPreFlop = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
222
- var _classPrivateFieldGet6, _current;
223
- var current, amount, _amount, activePlayer, _classPrivateFieldGet7;
224
- return _regeneratorRuntime().wrap(function _callee$(_context) {
225
- while (1) switch (_context.prev = _context.next) {
240
+ var _takeActionInPreFlop = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
241
+ var _this2 = this;
242
+ var takeDefaultActionPlayers, _takeDefaultActionPla, bigBlind, activePlayer, _classPrivateFieldGet7;
243
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
244
+ while (1) switch (_context2.prev = _context2.next) {
226
245
  case 0:
227
- console.log('takeActionInPreFlop');
228
- current = (_classPrivateFieldGet6 = _classPrivateFieldGet(_dealer, this).button) === null || _classPrivateFieldGet6 === void 0 ? void 0 : _classPrivateFieldGet6.getNextPlayer();
229
- if (current) {
230
- amount = _classPrivateFieldGet(_dealer, this).count === 2 ? _classPrivateFieldGet(_dealer, this).lowestBetAmount : _classPrivateFieldGet(_dealer, this).lowestBetAmount / 2;
231
- current.bet(amount, true);
232
- _classPrivateFieldGet(_defaultBets, this).push({
233
- userId: current.getUserInfo().id,
234
- balance: current.balance,
235
- amount: amount
236
- });
237
- if (_classPrivateFieldGet(_dealer, this).count > 2) {
238
- current = current.getNextPlayer();
239
- if (current) {
240
- _amount = _classPrivateFieldGet(_dealer, this).lowestBetAmount;
241
- current.bet(_amount, true);
242
- _classPrivateFieldGet(_defaultBets, this).push({
243
- userId: current.getUserInfo().id,
244
- balance: current.balance,
245
- amount: _amount
246
- });
247
- }
248
- }
249
- }
250
- activePlayer = (_current = current) === null || _current === void 0 ? void 0 : _current.getNextPlayer();
246
+ takeDefaultActionPlayers = _assertClassBrand(_Controller_brand, this, _getSmallBindAndBigBind).call(this);
247
+ takeDefaultActionPlayers.forEach(/*#__PURE__*/function () {
248
+ var _ref = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(player, index) {
249
+ var amount;
250
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
251
+ while (1) switch (_context.prev = _context.next) {
252
+ case 0:
253
+ if (player) {
254
+ amount = index === 0 ? _classPrivateFieldGet(_dealer, _this2).lowestBetAmount / 2 : _classPrivateFieldGet(_dealer, _this2).lowestBetAmount;
255
+ player.bet(amount, true);
256
+ _classPrivateFieldGet(_defaultBets, _this2).push({
257
+ userId: player.getUserInfo().id,
258
+ balance: player.balance,
259
+ amount: amount
260
+ });
261
+ }
262
+ case 1:
263
+ case "end":
264
+ return _context.stop();
265
+ }
266
+ }, _callee);
267
+ }));
268
+ return function (_x, _x2) {
269
+ return _ref.apply(this, arguments);
270
+ };
271
+ }());
272
+ _takeDefaultActionPla = _slicedToArray(takeDefaultActionPlayers, 2), bigBlind = _takeDefaultActionPla[1];
273
+ activePlayer = bigBlind === null || bigBlind === void 0 ? void 0 : bigBlind.getNextPlayer();
251
274
  if (!activePlayer) {
252
- _context.next = 10;
275
+ _context2.next = 10;
253
276
  break;
254
277
  }
255
- _context.next = 7;
278
+ _context2.next = 7;
256
279
  return (_classPrivateFieldGet7 = _classPrivateFieldGet(_callbackOfGameStart, this)) === null || _classPrivateFieldGet7 === void 0 ? void 0 : _classPrivateFieldGet7.call(this);
257
280
  case 7:
258
281
  this.transferControlTo(activePlayer);
259
- _context.next = 11;
282
+ _context2.next = 11;
260
283
  break;
261
284
  case 10:
262
285
  this.reportError(new _TexasError.default(2000, '游戏进程异常'));
263
286
  case 11:
264
287
  case "end":
265
- return _context.stop();
288
+ return _context2.stop();
266
289
  }
267
- }, _callee, this);
290
+ }, _callee2, this);
268
291
  }));
269
292
  function takeActionInPreFlop() {
270
293
  return _takeActionInPreFlop.apply(this, arguments);
271
294
  }
272
295
  return takeActionInPreFlop;
273
- }()
296
+ }() // 获取小盲,大盲玩家
297
+ }, {
298
+ key: "start",
299
+ value: (
274
300
  /**
275
301
  * @description 开始计时器, 将控制权移交给第一个可以行动的玩家
276
302
  */
277
- }, {
278
- key: "start",
279
- value: (function () {
280
- var _start = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee2() {
281
- return _regeneratorRuntime().wrap(function _callee2$(_context2) {
282
- while (1) switch (_context2.prev = _context2.next) {
303
+ function () {
304
+ var _start = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee3() {
305
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
306
+ while (1) switch (_context3.prev = _context3.next) {
283
307
  case 0:
284
308
  _classPrivateFieldSet(_status, this, 'on');
285
- _classPrivateFieldSet(_stage, this, 'pre_flop');
286
- _classPrivateFieldSet(_endAt, this, 'pre_flop');
309
+ _classPrivateFieldSet(_stage, this, StageEnum.PRE_FLOP);
310
+ _classPrivateFieldSet(_endAt, this, StageEnum.PRE_FLOP);
287
311
 
288
312
  // 测试环境保持玩家balance起始不变
289
313
  if (process.env.PROJECT_ENV === 'dev') _classPrivateFieldGet(_dealer, this).reset();
290
- _context2.next = 6;
314
+ _context3.next = 6;
291
315
  return this.takeActionInPreFlop();
292
316
  case 6:
293
317
  this.startTimer();
294
318
  case 7:
295
319
  case "end":
296
- return _context2.stop();
320
+ return _context3.stop();
297
321
  }
298
- }, _callee2, this);
322
+ }, _callee3, this);
299
323
  }));
300
324
  function start() {
301
325
  return _start.apply(this, arguments);
@@ -310,12 +334,12 @@ var Controller = /*#__PURE__*/function () {
310
334
  }, {
311
335
  key: "startTimer",
312
336
  value: function startTimer() {
313
- var _this2 = this;
337
+ var _this3 = this;
314
338
  // 避免重复开启计时器
315
339
  if (_classPrivateFieldGet(_timer, this)) return;
316
340
  _classPrivateFieldSet(_timer, this, setInterval(function () {
317
341
  var _this$count, _this$count2;
318
- _classPrivateFieldSet(_count, _this2, (_this$count = _classPrivateFieldGet(_count, _this2), _this$count2 = _this$count++, _this$count)), _this$count2;
342
+ _classPrivateFieldSet(_count, _this3, (_this$count = _classPrivateFieldGet(_count, _this3), _this$count2 = _this$count++, _this$count)), _this$count2;
319
343
  }, 1000));
320
344
  }
321
345
 
@@ -369,8 +393,8 @@ var Controller = /*#__PURE__*/function () {
369
393
  _classPrivateFieldSet(_count, this, 0);
370
394
  _classPrivateFieldSet(_defaultBets, this, []);
371
395
  _classPrivateFieldSet(_status, this, 'waiting');
372
- _classPrivateFieldSet(_endAt, this, 'pre_flop');
373
- _classPrivateFieldSet(_stage, this, 'pre_flop');
396
+ _classPrivateFieldSet(_endAt, this, StageEnum.PRE_FLOP);
397
+ _classPrivateFieldSet(_stage, this, StageEnum.PRE_FLOP);
374
398
  }
375
399
 
376
400
  /**
@@ -387,9 +411,20 @@ var Controller = /*#__PURE__*/function () {
387
411
  }]);
388
412
  }();
389
413
  function _getPokeEndIndex(stage) {
390
- if (stage === 'pre_flop') return 0;
391
- if (stage === 'flop') return 3;
392
- if (stage === 'turn') return 4;
393
- if (stage === 'river') return 5;
414
+ if (stage === StageEnum.PRE_FLOP) return 0;
415
+ if (stage === StageEnum.FLOP) return 3;
416
+ if (stage === StageEnum.TURN) return 4;
417
+ if (stage === StageEnum.RIVER) return 5;
418
+ }
419
+ function _getSmallBindAndBigBind() {
420
+ var _classPrivateFieldGet10;
421
+ var smallBind =
422
+ // 在双人游戏中, 庄家同时支付小盲注
423
+ _classPrivateFieldGet(_dealer, this).count === 2 ? _classPrivateFieldGet(_dealer, this).button : (_classPrivateFieldGet10 = _classPrivateFieldGet(_dealer, this).button) === null || _classPrivateFieldGet10 === void 0 ? void 0 : _classPrivateFieldGet10.getNextPlayer();
424
+ var result = [smallBind, smallBind === null || smallBind === void 0 ? void 0 : smallBind.getNextPlayer()];
425
+ if (result.some(function (player) {
426
+ return !player;
427
+ })) this.reportError(new _TexasError.default(2000, '游戏进程异常: 小盲或大盲玩家不存在'));
428
+ return result;
394
429
  }
395
430
  var _default = exports.default = Controller;
@@ -110,7 +110,7 @@ var Dealer = /*#__PURE__*/function () {
110
110
  handPokes = _classPrivateFieldGet2.handPokes;
111
111
  this.loop(function (player, i) {
112
112
  player.setHandPokes(handPokes[i]);
113
- }, _classPrivateFieldGet(_button, this));
113
+ }, _classPrivateFieldGet(_button, this).getNextPlayer());
114
114
  }
115
115
  }, {
116
116
  key: "addAction",
@@ -122,8 +122,8 @@ var Dealer = /*#__PURE__*/function () {
122
122
  _classPrivateFieldGet(_actionsHistory, this).push(player);
123
123
  }
124
124
  }, {
125
- key: "getMaxPresentation",
126
- value: function getMaxPresentation() {
125
+ key: "getMaxHandTypeCategory",
126
+ value: function getMaxHandTypeCategory() {
127
127
  var _this$filter$map$sort = this.filter(function (player) {
128
128
  return player.getStatus() !== 'out';
129
129
  }).map(function (player) {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.suitsMap = exports.suits = exports.ranks = exports.rankMap = exports.handPokeMap = exports.comboIndices = void 0;
6
+ exports.suitsMap = exports.suits = exports.ranks = exports.rankMap = exports.handTypeCategoryMap = exports.comboIndices = void 0;
7
7
  var suits = exports.suits = ['h', 's', 'd', 'c'];
8
8
  var ranks = exports.ranks = ['2', '3', '4', '5', '6', '7', '8', '9', 't', 'j', 'q', 'k', 'a'];
9
9
 
@@ -21,10 +21,14 @@ var ranks = exports.ranks = ['2', '3', '4', '5', '6', '7', '8', '9', 't', 'j', '
21
21
  */
22
22
 
23
23
  /**
24
- * 2 + 5 一共7张牌的组合
24
+ * 2 + 3 一共5张牌的组合
25
25
  */
26
26
 
27
- /**牌型枚举 */
27
+ /** 牌型枚举 */
28
+
29
+ /**
30
+ * 牌力展示:首字符为牌型 (handTypeCategory),后接可选数字段,如 "z" | "q14+13+12+11+9" | "w13+r7"
31
+ */
28
32
 
29
33
  /**
30
34
  * 花色format map
@@ -35,7 +39,7 @@ var suitsMap = exports.suitsMap = new Map([
35
39
  */
36
40
  ['h', '♥'], ['s', '♠'], ['d', '♦️'], ['c', '♣']]);
37
41
  // 牌型枚举中文映射
38
- var handPokeMap = exports.handPokeMap = new Map([['z', '皇家同花顺'], ['y', '同花顺'], ['x', '四条'], ['w', '葫芦'], ['v', '同花'], ['u', '顺子'], ['t', '三条'], ['s', '两对'], ['r', '一对'], ['q', '高牌']]);
42
+ var handTypeCategoryMap = exports.handTypeCategoryMap = new Map([['z', '皇家同花顺'], ['y', '同花顺'], ['x', '四条'], ['w', '葫芦'], ['v', '同花'], ['u', '顺子'], ['t', '三条'], ['s', '两对'], ['r', '一对'], ['q', '高牌']]);
39
43
 
40
44
  // 牌面值的大小映射 2~A => 2~14
41
45
  var rankMap = exports.rankMap = function rankMap(input) {