shufflecom-calculations 1.2.0 → 1.2.2
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/lib/games/blackjack.d.ts +76 -0
- package/lib/games/blackjack.js +291 -0
- package/lib/games/blackjack.js.map +1 -0
- package/lib/games/cardGames.d.ts +20 -0
- package/lib/games/cardGames.js +86 -0
- package/lib/games/cardGames.js.map +1 -0
- package/lib/games/hilo.d.ts +0 -4
- package/lib/games/hilo.js +4 -49
- package/lib/games/hilo.js.map +1 -1
- package/lib/index.d.ts +3 -1
- package/lib/index.js +14 -2
- package/lib/index.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utils/index.d.ts +1 -0
- package/lib/utils/index.js +4 -1
- package/lib/utils/index.js.map +1 -1
- package/package.json +2 -2
- package/src/games/blackjack.spec.ts +1416 -0
- package/src/games/blackjack.ts +408 -0
- package/src/games/cardGames.spec.ts +94 -0
- package/src/games/cardGames.ts +162 -0
- package/src/games/hilo.spec.ts +1 -84
- package/src/games/hilo.ts +6 -68
- package/src/index.ts +12 -1
- package/src/utils/index.ts +1 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import BigNumber from 'bignumber.js';
|
|
2
|
+
export declare enum BlackjackAction {
|
|
3
|
+
HIT = "HIT",
|
|
4
|
+
STAND = "STAND",
|
|
5
|
+
DOUBLE_DOWN = "DOUBLE_DOWN",
|
|
6
|
+
SPLIT = "SPLIT",
|
|
7
|
+
BUY_INSURANCE = "BUY_INSURANCE",
|
|
8
|
+
REJECT_INSURANCE = "REJECT_INSURANCE"
|
|
9
|
+
}
|
|
10
|
+
export declare enum HandOutcome {
|
|
11
|
+
WIN = "WIN",
|
|
12
|
+
LOSS = "LOSS",
|
|
13
|
+
PUSH = "PUSH",
|
|
14
|
+
BLACKJACK = "BLACKJACK",
|
|
15
|
+
PENDING = "PENDING",
|
|
16
|
+
NONE = "NONE"
|
|
17
|
+
}
|
|
18
|
+
export declare enum PerfectPairType {
|
|
19
|
+
PERFECT_PAIR = "PERFECT_PAIR",
|
|
20
|
+
COLORED_PAIR = "COLORED_PAIR",
|
|
21
|
+
MIXED_PAIR = "MIXED_PAIR"
|
|
22
|
+
}
|
|
23
|
+
export declare enum TwentyOnePlusThreeType {
|
|
24
|
+
SUITED_TRIPS = "SUITED_TRIPS",
|
|
25
|
+
STRAIGHT_FLUSH = "STRAIGHT_FLUSH",
|
|
26
|
+
STRAIGHT = "STRAIGHT",
|
|
27
|
+
THREE_OF_A_KIND = "THREE_OF_A_KIND",
|
|
28
|
+
FLUSH = "FLUSH"
|
|
29
|
+
}
|
|
30
|
+
export declare enum InsuranceStatus {
|
|
31
|
+
INELIGIBLE = "INELIGIBLE",
|
|
32
|
+
BOUGHT_PAYS_OUT = "BOUGHT_PAYS_OUT",
|
|
33
|
+
BOUGHT_DOES_NOT_PAY_OUT = "BOUGHT_DOES_NOT_PAY_OUT",
|
|
34
|
+
REJECTED = "REJECTED",
|
|
35
|
+
ELIGIBLE = "ELIGIBLE"
|
|
36
|
+
}
|
|
37
|
+
export interface SettleBetVars {
|
|
38
|
+
mainPlayerHand: number[];
|
|
39
|
+
splitPlayerHand: number[];
|
|
40
|
+
dealerHand: number[];
|
|
41
|
+
mainBetAmount: BigNumber;
|
|
42
|
+
twentyOnePlusThreeAmount: BigNumber;
|
|
43
|
+
perfectPairAmount: BigNumber;
|
|
44
|
+
boughtInsurance: boolean;
|
|
45
|
+
hasSplit: boolean;
|
|
46
|
+
mainHandDoubleDown: boolean;
|
|
47
|
+
splitHandDoubleDown: boolean;
|
|
48
|
+
}
|
|
49
|
+
export declare const perfectPairPayout: Record<PerfectPairType, BigNumber>;
|
|
50
|
+
export declare const twentyOnePlusThreePayout: Record<TwentyOnePlusThreeType, BigNumber>;
|
|
51
|
+
export declare class Blackjack {
|
|
52
|
+
static availableNextActions(currentPlayerHand: number[], dealerCards: number[], insuranceStatus: InsuranceStatus, atMainHandAndHasNotSplit: boolean): BlackjackAction[];
|
|
53
|
+
static playingMainHand(mainPlayerCards: number[], splitPlayerCards: number[], mainPlayerActions: BlackjackAction[], splitPlayerActions: BlackjackAction[]): boolean;
|
|
54
|
+
static getHandOutcome(dealerCards: number[], playerCards: number[], hasSplit: boolean): {
|
|
55
|
+
multiplier: BigNumber;
|
|
56
|
+
outcome: HandOutcome;
|
|
57
|
+
};
|
|
58
|
+
static calcSideBetWins(dealerUpCard: number, playerCards: number[]): {
|
|
59
|
+
perfectPair?: PerfectPairType;
|
|
60
|
+
twentyOnePlusThree?: TwentyOnePlusThreeType;
|
|
61
|
+
};
|
|
62
|
+
static calcHandValue(cards: number[]): number;
|
|
63
|
+
static canBuyInsurance(dealerCards: number[]): boolean;
|
|
64
|
+
static shouldDealerHit(dealerCards: number[]): boolean;
|
|
65
|
+
static hasBusted(cards: number[]): boolean;
|
|
66
|
+
static canSplit(mainHand: number[]): boolean;
|
|
67
|
+
static canDoubleDown(playerCards: number[]): boolean;
|
|
68
|
+
static isBlackjack(cards: number[]): boolean;
|
|
69
|
+
static getGameOutcome(data: SettleBetVars): {
|
|
70
|
+
payout: BigNumber;
|
|
71
|
+
multiplier: BigNumber;
|
|
72
|
+
mainHandOutcome: HandOutcome;
|
|
73
|
+
splitHandOutcome: HandOutcome;
|
|
74
|
+
};
|
|
75
|
+
private static getMainBetPayout;
|
|
76
|
+
}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.Blackjack = exports.twentyOnePlusThreePayout = exports.perfectPairPayout = exports.InsuranceStatus = exports.TwentyOnePlusThreeType = exports.PerfectPairType = exports.HandOutcome = exports.BlackjackAction = void 0;
|
|
7
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
+
const cardGames_1 = require("./cardGames");
|
|
9
|
+
var BlackjackAction;
|
|
10
|
+
(function (BlackjackAction) {
|
|
11
|
+
BlackjackAction["HIT"] = "HIT";
|
|
12
|
+
BlackjackAction["STAND"] = "STAND";
|
|
13
|
+
BlackjackAction["DOUBLE_DOWN"] = "DOUBLE_DOWN";
|
|
14
|
+
BlackjackAction["SPLIT"] = "SPLIT";
|
|
15
|
+
BlackjackAction["BUY_INSURANCE"] = "BUY_INSURANCE";
|
|
16
|
+
BlackjackAction["REJECT_INSURANCE"] = "REJECT_INSURANCE";
|
|
17
|
+
})(BlackjackAction = exports.BlackjackAction || (exports.BlackjackAction = {}));
|
|
18
|
+
var HandOutcome;
|
|
19
|
+
(function (HandOutcome) {
|
|
20
|
+
HandOutcome["WIN"] = "WIN";
|
|
21
|
+
HandOutcome["LOSS"] = "LOSS";
|
|
22
|
+
HandOutcome["PUSH"] = "PUSH";
|
|
23
|
+
HandOutcome["BLACKJACK"] = "BLACKJACK";
|
|
24
|
+
HandOutcome["PENDING"] = "PENDING";
|
|
25
|
+
HandOutcome["NONE"] = "NONE";
|
|
26
|
+
})(HandOutcome = exports.HandOutcome || (exports.HandOutcome = {}));
|
|
27
|
+
var PerfectPairType;
|
|
28
|
+
(function (PerfectPairType) {
|
|
29
|
+
PerfectPairType["PERFECT_PAIR"] = "PERFECT_PAIR";
|
|
30
|
+
PerfectPairType["COLORED_PAIR"] = "COLORED_PAIR";
|
|
31
|
+
PerfectPairType["MIXED_PAIR"] = "MIXED_PAIR";
|
|
32
|
+
})(PerfectPairType = exports.PerfectPairType || (exports.PerfectPairType = {}));
|
|
33
|
+
var TwentyOnePlusThreeType;
|
|
34
|
+
(function (TwentyOnePlusThreeType) {
|
|
35
|
+
TwentyOnePlusThreeType["SUITED_TRIPS"] = "SUITED_TRIPS";
|
|
36
|
+
TwentyOnePlusThreeType["STRAIGHT_FLUSH"] = "STRAIGHT_FLUSH";
|
|
37
|
+
TwentyOnePlusThreeType["STRAIGHT"] = "STRAIGHT";
|
|
38
|
+
TwentyOnePlusThreeType["THREE_OF_A_KIND"] = "THREE_OF_A_KIND";
|
|
39
|
+
TwentyOnePlusThreeType["FLUSH"] = "FLUSH";
|
|
40
|
+
})(TwentyOnePlusThreeType = exports.TwentyOnePlusThreeType || (exports.TwentyOnePlusThreeType = {}));
|
|
41
|
+
var InsuranceStatus;
|
|
42
|
+
(function (InsuranceStatus) {
|
|
43
|
+
InsuranceStatus["INELIGIBLE"] = "INELIGIBLE";
|
|
44
|
+
InsuranceStatus["BOUGHT_PAYS_OUT"] = "BOUGHT_PAYS_OUT";
|
|
45
|
+
InsuranceStatus["BOUGHT_DOES_NOT_PAY_OUT"] = "BOUGHT_DOES_NOT_PAY_OUT";
|
|
46
|
+
InsuranceStatus["REJECTED"] = "REJECTED";
|
|
47
|
+
InsuranceStatus["ELIGIBLE"] = "ELIGIBLE";
|
|
48
|
+
})(InsuranceStatus = exports.InsuranceStatus || (exports.InsuranceStatus = {}));
|
|
49
|
+
exports.perfectPairPayout = {
|
|
50
|
+
[PerfectPairType.PERFECT_PAIR]: new bignumber_js_1.default(26),
|
|
51
|
+
[PerfectPairType.COLORED_PAIR]: new bignumber_js_1.default(13),
|
|
52
|
+
[PerfectPairType.MIXED_PAIR]: new bignumber_js_1.default(7),
|
|
53
|
+
};
|
|
54
|
+
exports.twentyOnePlusThreePayout = {
|
|
55
|
+
[TwentyOnePlusThreeType.SUITED_TRIPS]: new bignumber_js_1.default(101),
|
|
56
|
+
[TwentyOnePlusThreeType.STRAIGHT_FLUSH]: new bignumber_js_1.default(41),
|
|
57
|
+
[TwentyOnePlusThreeType.THREE_OF_A_KIND]: new bignumber_js_1.default(31),
|
|
58
|
+
[TwentyOnePlusThreeType.STRAIGHT]: new bignumber_js_1.default(11),
|
|
59
|
+
[TwentyOnePlusThreeType.FLUSH]: new bignumber_js_1.default(6),
|
|
60
|
+
};
|
|
61
|
+
var SuitColor;
|
|
62
|
+
(function (SuitColor) {
|
|
63
|
+
SuitColor["RED"] = "RED";
|
|
64
|
+
SuitColor["BLACK"] = "BLACK";
|
|
65
|
+
})(SuitColor || (SuitColor = {}));
|
|
66
|
+
const suitColorMap = {
|
|
67
|
+
[cardGames_1.Suits.DIAMONDS]: SuitColor.RED,
|
|
68
|
+
[cardGames_1.Suits.HEARTS]: SuitColor.RED,
|
|
69
|
+
[cardGames_1.Suits.SPADES]: SuitColor.BLACK,
|
|
70
|
+
[cardGames_1.Suits.CLUBS]: SuitColor.BLACK,
|
|
71
|
+
};
|
|
72
|
+
class Blackjack {
|
|
73
|
+
static availableNextActions(currentPlayerHand, dealerCards, insuranceStatus, atMainHandAndHasNotSplit) {
|
|
74
|
+
if (this.canBuyInsurance(dealerCards) && insuranceStatus === InsuranceStatus.ELIGIBLE) {
|
|
75
|
+
return [BlackjackAction.BUY_INSURANCE, BlackjackAction.REJECT_INSURANCE];
|
|
76
|
+
}
|
|
77
|
+
if (this.calcHandValue(currentPlayerHand) >= 21) {
|
|
78
|
+
return [];
|
|
79
|
+
}
|
|
80
|
+
const actions = [BlackjackAction.HIT, BlackjackAction.STAND];
|
|
81
|
+
if (this.canDoubleDown(currentPlayerHand)) {
|
|
82
|
+
actions.push(BlackjackAction.DOUBLE_DOWN);
|
|
83
|
+
}
|
|
84
|
+
if (this.canSplit(currentPlayerHand) && atMainHandAndHasNotSplit) {
|
|
85
|
+
actions.push(BlackjackAction.SPLIT);
|
|
86
|
+
}
|
|
87
|
+
return actions;
|
|
88
|
+
}
|
|
89
|
+
static playingMainHand(mainPlayerCards, splitPlayerCards, mainPlayerActions, splitPlayerActions) {
|
|
90
|
+
if (this.calcHandValue(mainPlayerCards) < 21 &&
|
|
91
|
+
!mainPlayerActions.includes(BlackjackAction.DOUBLE_DOWN) &&
|
|
92
|
+
!mainPlayerActions.includes(BlackjackAction.STAND)) {
|
|
93
|
+
return true;
|
|
94
|
+
}
|
|
95
|
+
if (splitPlayerCards.length > 0 &&
|
|
96
|
+
this.calcHandValue(splitPlayerCards) < 21 &&
|
|
97
|
+
!splitPlayerActions.includes(BlackjackAction.DOUBLE_DOWN) &&
|
|
98
|
+
!splitPlayerActions.includes(BlackjackAction.STAND)) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
if (mainPlayerCards.length === 2 && this.calcHandValue(mainPlayerCards) === 21 && splitPlayerCards.length === 0) {
|
|
102
|
+
return true;
|
|
103
|
+
}
|
|
104
|
+
throw new Error('No available action');
|
|
105
|
+
}
|
|
106
|
+
static getHandOutcome(dealerCards, playerCards, hasSplit) {
|
|
107
|
+
const dealerBlackjack = this.isBlackjack(dealerCards);
|
|
108
|
+
const playerBlackjack = this.isBlackjack(playerCards);
|
|
109
|
+
if (playerBlackjack && !dealerBlackjack && !hasSplit) {
|
|
110
|
+
return { multiplier: new bignumber_js_1.default(2.5), outcome: HandOutcome.BLACKJACK };
|
|
111
|
+
}
|
|
112
|
+
if (dealerBlackjack && !playerBlackjack) {
|
|
113
|
+
return { multiplier: new bignumber_js_1.default(0), outcome: HandOutcome.LOSS };
|
|
114
|
+
}
|
|
115
|
+
if (dealerBlackjack && playerBlackjack) {
|
|
116
|
+
return { multiplier: new bignumber_js_1.default(1), outcome: HandOutcome.PUSH };
|
|
117
|
+
}
|
|
118
|
+
if (this.hasBusted(playerCards)) {
|
|
119
|
+
return { multiplier: new bignumber_js_1.default(0), outcome: HandOutcome.LOSS };
|
|
120
|
+
}
|
|
121
|
+
if (this.hasBusted(dealerCards)) {
|
|
122
|
+
return { multiplier: new bignumber_js_1.default(2), outcome: HandOutcome.WIN };
|
|
123
|
+
}
|
|
124
|
+
const playerSum = this.calcHandValue(playerCards);
|
|
125
|
+
const dealerSum = this.calcHandValue(dealerCards);
|
|
126
|
+
if (playerSum > dealerSum) {
|
|
127
|
+
return { multiplier: new bignumber_js_1.default(2), outcome: HandOutcome.WIN };
|
|
128
|
+
}
|
|
129
|
+
else if (playerSum < dealerSum) {
|
|
130
|
+
return { multiplier: new bignumber_js_1.default(0), outcome: HandOutcome.LOSS };
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
return { multiplier: new bignumber_js_1.default(1), outcome: HandOutcome.PUSH };
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
static calcSideBetWins(dealerUpCard, playerCards) {
|
|
137
|
+
const results = {};
|
|
138
|
+
const dealerCardDetails = cardGames_1.CardGames.getCardDetails(dealerUpCard);
|
|
139
|
+
const playerCard0 = cardGames_1.CardGames.getCardDetails(playerCards[0]);
|
|
140
|
+
const playerCard1 = cardGames_1.CardGames.getCardDetails(playerCards[1]);
|
|
141
|
+
if (playerCard0.value === playerCard1.value) {
|
|
142
|
+
const cardSuits = [playerCard0.suit, playerCard1.suit];
|
|
143
|
+
if (playerCards[0] === playerCards[1]) {
|
|
144
|
+
results.perfectPair = PerfectPairType.PERFECT_PAIR;
|
|
145
|
+
}
|
|
146
|
+
else if (suitColorMap[cardSuits[0]] === suitColorMap[cardSuits[1]]) {
|
|
147
|
+
results.perfectPair = PerfectPairType.COLORED_PAIR;
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
results.perfectPair = PerfectPairType.MIXED_PAIR;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
const cardValueMap = {
|
|
154
|
+
'2': [2],
|
|
155
|
+
'3': [3],
|
|
156
|
+
'4': [4],
|
|
157
|
+
'5': [5],
|
|
158
|
+
'6': [6],
|
|
159
|
+
'7': [7],
|
|
160
|
+
'8': [8],
|
|
161
|
+
'9': [9],
|
|
162
|
+
'10': [10],
|
|
163
|
+
J: [11],
|
|
164
|
+
Q: [12],
|
|
165
|
+
K: [13],
|
|
166
|
+
A: [14, 1],
|
|
167
|
+
};
|
|
168
|
+
const cardValues = [...cardValueMap[playerCard0.value], ...cardValueMap[playerCard1.value], ...cardValueMap[dealerCardDetails.value]].sort((a, b) => a - b);
|
|
169
|
+
const isFlush = dealerCardDetails.suit === playerCard0.suit && playerCard0.suit === playerCard1.suit;
|
|
170
|
+
const firstThreeCards = cardValues.slice(0, 3);
|
|
171
|
+
const lastThreeCards = cardValues.slice(-3);
|
|
172
|
+
const isStraight = (firstThreeCards[0] + 1 === firstThreeCards[1] && firstThreeCards[1] + 1 === firstThreeCards[2]) ||
|
|
173
|
+
(lastThreeCards[0] + 1 === lastThreeCards[1] && lastThreeCards[1] + 1 === lastThreeCards[2]);
|
|
174
|
+
const threeOfAKind = dealerCardDetails.value === playerCard0.value && playerCard0.value === playerCard1.value;
|
|
175
|
+
if (dealerUpCard === playerCards[0] && playerCards[0] === playerCards[1]) {
|
|
176
|
+
results.twentyOnePlusThree = TwentyOnePlusThreeType.SUITED_TRIPS;
|
|
177
|
+
}
|
|
178
|
+
else if (isFlush && isStraight) {
|
|
179
|
+
results.twentyOnePlusThree = TwentyOnePlusThreeType.STRAIGHT_FLUSH;
|
|
180
|
+
}
|
|
181
|
+
else if (threeOfAKind) {
|
|
182
|
+
results.twentyOnePlusThree = TwentyOnePlusThreeType.THREE_OF_A_KIND;
|
|
183
|
+
}
|
|
184
|
+
else if (isStraight) {
|
|
185
|
+
results.twentyOnePlusThree = TwentyOnePlusThreeType.STRAIGHT;
|
|
186
|
+
}
|
|
187
|
+
else if (isFlush) {
|
|
188
|
+
results.twentyOnePlusThree = TwentyOnePlusThreeType.FLUSH;
|
|
189
|
+
}
|
|
190
|
+
return results;
|
|
191
|
+
}
|
|
192
|
+
static calcHandValue(cards) {
|
|
193
|
+
const cardValueMap = {
|
|
194
|
+
'2': 2,
|
|
195
|
+
'3': 3,
|
|
196
|
+
'4': 4,
|
|
197
|
+
'5': 5,
|
|
198
|
+
'6': 6,
|
|
199
|
+
'7': 7,
|
|
200
|
+
'8': 8,
|
|
201
|
+
'9': 9,
|
|
202
|
+
'10': 10,
|
|
203
|
+
A: 11,
|
|
204
|
+
J: 10,
|
|
205
|
+
Q: 10,
|
|
206
|
+
K: 10,
|
|
207
|
+
};
|
|
208
|
+
let aceCount = cardGames_1.CardGames.getCardDetailsArr(cards).filter((card) => card.value === 'A').length;
|
|
209
|
+
let cardSum = cardGames_1.CardGames.getCardDetailsArr(cards).reduce((acc, cur) => acc + cardValueMap[cur.value], 0);
|
|
210
|
+
if (aceCount === 0) {
|
|
211
|
+
return cardSum;
|
|
212
|
+
}
|
|
213
|
+
while (aceCount > 0 && cardSum > 21) {
|
|
214
|
+
cardSum -= 10;
|
|
215
|
+
aceCount--;
|
|
216
|
+
}
|
|
217
|
+
return cardSum;
|
|
218
|
+
}
|
|
219
|
+
static canBuyInsurance(dealerCards) {
|
|
220
|
+
return cardGames_1.CardGames.getCardDetails(dealerCards[0]).value === 'A';
|
|
221
|
+
}
|
|
222
|
+
static shouldDealerHit(dealerCards) {
|
|
223
|
+
return this.calcHandValue(dealerCards) < 17;
|
|
224
|
+
}
|
|
225
|
+
static hasBusted(cards) {
|
|
226
|
+
return this.calcHandValue(cards) > 21;
|
|
227
|
+
}
|
|
228
|
+
static canSplit(mainHand) {
|
|
229
|
+
if (mainHand.length !== 2) {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
const cardActions = cardGames_1.CardGames.getCardDetailsArr(mainHand);
|
|
233
|
+
return cardActions[0].value === cardActions[1].value;
|
|
234
|
+
}
|
|
235
|
+
static canDoubleDown(playerCards) {
|
|
236
|
+
return playerCards.length === 2;
|
|
237
|
+
}
|
|
238
|
+
static isBlackjack(cards) {
|
|
239
|
+
if (cards.length !== 2) {
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
return this.calcHandValue(cards) === 21;
|
|
243
|
+
}
|
|
244
|
+
static getGameOutcome(data) {
|
|
245
|
+
const mainHandBetAmount = data.mainHandDoubleDown ? data.mainBetAmount.times(2) : data.mainBetAmount;
|
|
246
|
+
let splitHandBetAmount = new bignumber_js_1.default(0);
|
|
247
|
+
if (data.hasSplit) {
|
|
248
|
+
splitHandBetAmount = data.splitHandDoubleDown ? data.mainBetAmount.times(2) : data.mainBetAmount;
|
|
249
|
+
}
|
|
250
|
+
let perfectPairPayoutAmt = new bignumber_js_1.default(0);
|
|
251
|
+
let twentyOnePlusThreePayoutAmt = new bignumber_js_1.default(0);
|
|
252
|
+
const { mainHandOutcome, payout: mainBetPayout, splitHandOutcome } = Blackjack.getMainBetPayout(Object.assign(Object.assign({}, data), { mainHandBetAmount, splitHandBetAmount }));
|
|
253
|
+
const playerHand = data.hasSplit ? [data.mainPlayerHand[0], data.splitPlayerHand[0]] : [data.mainPlayerHand[0], data.mainPlayerHand[1]];
|
|
254
|
+
const { perfectPair, twentyOnePlusThree } = Blackjack.calcSideBetWins(data.dealerHand[0], playerHand);
|
|
255
|
+
if (exports.perfectPairPayout[perfectPair] && data.perfectPairAmount.gt(0)) {
|
|
256
|
+
perfectPairPayoutAmt = data.perfectPairAmount.times(exports.perfectPairPayout[perfectPair]);
|
|
257
|
+
}
|
|
258
|
+
if (exports.twentyOnePlusThreePayout[twentyOnePlusThree] && data.twentyOnePlusThreeAmount.gt(0)) {
|
|
259
|
+
twentyOnePlusThreePayoutAmt = data.twentyOnePlusThreeAmount.times(exports.twentyOnePlusThreePayout[twentyOnePlusThree]);
|
|
260
|
+
}
|
|
261
|
+
const payout = mainBetPayout.plus(perfectPairPayoutAmt).plus(twentyOnePlusThreePayoutAmt);
|
|
262
|
+
const insuranceCost = data.boughtInsurance ? data.mainBetAmount.dividedBy(2) : new bignumber_js_1.default(0);
|
|
263
|
+
const totalBetAmount = mainHandBetAmount.plus(splitHandBetAmount).plus(data.perfectPairAmount).plus(data.twentyOnePlusThreeAmount).plus(insuranceCost);
|
|
264
|
+
let multiplier = payout.dividedBy(totalBetAmount);
|
|
265
|
+
if (totalBetAmount.isZero()) {
|
|
266
|
+
const mainHandBetAmount = data.mainHandDoubleDown ? new bignumber_js_1.default(2) : new bignumber_js_1.default(1);
|
|
267
|
+
let splitHandBetAmount = new bignumber_js_1.default(0);
|
|
268
|
+
if (data.hasSplit) {
|
|
269
|
+
splitHandBetAmount = data.splitHandDoubleDown ? new bignumber_js_1.default(2) : new bignumber_js_1.default(1);
|
|
270
|
+
}
|
|
271
|
+
const insuranceCost = data.boughtInsurance ? new bignumber_js_1.default(0.5) : new bignumber_js_1.default(0);
|
|
272
|
+
const totalBetAmount = mainHandBetAmount.plus(splitHandBetAmount).plus(insuranceCost);
|
|
273
|
+
multiplier = Blackjack.getMainBetPayout(Object.assign(Object.assign({}, data), { mainHandBetAmount, splitHandBetAmount })).payout.dividedBy(totalBetAmount);
|
|
274
|
+
}
|
|
275
|
+
return { payout, multiplier, mainHandOutcome, splitHandOutcome };
|
|
276
|
+
}
|
|
277
|
+
static getMainBetPayout({ mainPlayerHand, splitPlayerHand, dealerHand, mainHandBetAmount, splitHandBetAmount, boughtInsurance, hasSplit, }) {
|
|
278
|
+
const { multiplier: mainHandMultiplier, outcome: mainHandOutcome } = Blackjack.getHandOutcome(dealerHand, mainPlayerHand, hasSplit);
|
|
279
|
+
const mainHandPayout = mainHandMultiplier.times(mainHandBetAmount);
|
|
280
|
+
const { multiplier: splitHandMultiplier, outcome: splitHandOutcome } = Blackjack.getHandOutcome(dealerHand, splitPlayerHand, hasSplit);
|
|
281
|
+
const splitHandPayout = splitPlayerHand.length > 0 ? splitHandMultiplier.times(splitHandBetAmount) : new bignumber_js_1.default(0);
|
|
282
|
+
const insurancePayout = boughtInsurance && Blackjack.isBlackjack(dealerHand) ? mainHandBetAmount.dividedBy(2).times(3) : new bignumber_js_1.default(0);
|
|
283
|
+
return {
|
|
284
|
+
mainHandOutcome,
|
|
285
|
+
splitHandOutcome: hasSplit ? splitHandOutcome : HandOutcome.NONE,
|
|
286
|
+
payout: mainHandPayout.plus(splitHandPayout).plus(insurancePayout),
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
exports.Blackjack = Blackjack;
|
|
291
|
+
//# sourceMappingURL=blackjack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blackjack.js","sourceRoot":"","sources":["../../src/games/blackjack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export declare enum Suits {
|
|
2
|
+
DIAMONDS = "DIAMONDS",
|
|
3
|
+
HEARTS = "HEARTS",
|
|
4
|
+
SPADES = "SPADES",
|
|
5
|
+
CLUBS = "CLUBS"
|
|
6
|
+
}
|
|
7
|
+
export declare const suitsArr: Suits[];
|
|
8
|
+
export type CardValue = '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | '10' | 'J' | 'Q' | 'K' | 'A';
|
|
9
|
+
export interface CardDetail {
|
|
10
|
+
suit: Suits;
|
|
11
|
+
value: CardValue;
|
|
12
|
+
}
|
|
13
|
+
export declare class CardGames {
|
|
14
|
+
static toComparableNo(result: number): number;
|
|
15
|
+
static getCardDetails(cardNum: number): CardDetail;
|
|
16
|
+
static getCardDetailsArr(cardNums: number[]): CardDetail[];
|
|
17
|
+
static getResult(hexStr: string, cardNo: number): number;
|
|
18
|
+
static getResults(hexStr: string[]): number[];
|
|
19
|
+
static getCardIndexFromDetails(card: CardDetail): number;
|
|
20
|
+
}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CardGames = exports.suitsArr = exports.Suits = void 0;
|
|
7
|
+
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
|
+
const utils_1 = require("../utils");
|
|
9
|
+
const BYTE_TOTAL = new bignumber_js_1.default(256);
|
|
10
|
+
const CARD_MAP = {
|
|
11
|
+
'1': 'A',
|
|
12
|
+
'11': 'J',
|
|
13
|
+
'12': 'Q',
|
|
14
|
+
'13': 'K',
|
|
15
|
+
};
|
|
16
|
+
var Suits;
|
|
17
|
+
(function (Suits) {
|
|
18
|
+
Suits["DIAMONDS"] = "DIAMONDS";
|
|
19
|
+
Suits["HEARTS"] = "HEARTS";
|
|
20
|
+
Suits["SPADES"] = "SPADES";
|
|
21
|
+
Suits["CLUBS"] = "CLUBS";
|
|
22
|
+
})(Suits = exports.Suits || (exports.Suits = {}));
|
|
23
|
+
exports.suitsArr = [Suits.DIAMONDS, Suits.HEARTS, Suits.SPADES, Suits.CLUBS];
|
|
24
|
+
class CardGames {
|
|
25
|
+
static toComparableNo(result) {
|
|
26
|
+
const comparableNo = Math.trunc(result / 4) + 2;
|
|
27
|
+
if (comparableNo === 14) {
|
|
28
|
+
return 1;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
return comparableNo;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
static getCardDetails(cardNum) {
|
|
35
|
+
if (cardNum > 51 || cardNum < 0 || !Number.isInteger(cardNum)) {
|
|
36
|
+
throw 'out of bounds';
|
|
37
|
+
}
|
|
38
|
+
const suit = exports.suitsArr[cardNum % 4];
|
|
39
|
+
let value = this.toComparableNo(cardNum).toString();
|
|
40
|
+
if (CARD_MAP[value]) {
|
|
41
|
+
value = CARD_MAP[value];
|
|
42
|
+
}
|
|
43
|
+
return { suit, value: value };
|
|
44
|
+
}
|
|
45
|
+
static getCardDetailsArr(cardNums) {
|
|
46
|
+
return cardNums.map((cardNum) => this.getCardDetails(cardNum));
|
|
47
|
+
}
|
|
48
|
+
static getResult(hexStr, cardNo) {
|
|
49
|
+
const bytePosition = cardNo % 8;
|
|
50
|
+
const bytes = (0, utils_1.hexToBytes)(hexStr);
|
|
51
|
+
let result = new bignumber_js_1.default(0);
|
|
52
|
+
for (let j = 0; j < 4; j++) {
|
|
53
|
+
const value = bytes[4 * bytePosition + j];
|
|
54
|
+
result = result.plus(new bignumber_js_1.default(value).dividedBy(BYTE_TOTAL.pow(j + 1)));
|
|
55
|
+
}
|
|
56
|
+
return result.multipliedBy(52).integerValue(bignumber_js_1.default.ROUND_FLOOR).toNumber();
|
|
57
|
+
}
|
|
58
|
+
static getResults(hexStr) {
|
|
59
|
+
const results = [];
|
|
60
|
+
for (let i = 0; i < hexStr.length * 8; i++) {
|
|
61
|
+
const hexNo = Math.trunc(i / 8);
|
|
62
|
+
results.push(this.getResult(hexStr[hexNo], i));
|
|
63
|
+
}
|
|
64
|
+
return results;
|
|
65
|
+
}
|
|
66
|
+
static getCardIndexFromDetails(card) {
|
|
67
|
+
const suitIncrement = exports.suitsArr.indexOf(card.suit);
|
|
68
|
+
if (card.value === 'J') {
|
|
69
|
+
return 9 * 4 + suitIncrement;
|
|
70
|
+
}
|
|
71
|
+
else if (card.value === 'Q') {
|
|
72
|
+
return 10 * 4 + suitIncrement;
|
|
73
|
+
}
|
|
74
|
+
else if (card.value === 'K') {
|
|
75
|
+
return 11 * 4 + suitIncrement;
|
|
76
|
+
}
|
|
77
|
+
else if (card.value === 'A') {
|
|
78
|
+
return 12 * 4 + suitIncrement;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
return (Number(card.value) - 2) * 4 + suitIncrement;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
exports.CardGames = CardGames;
|
|
86
|
+
//# sourceMappingURL=cardGames.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cardGames.js","sourceRoot":"","sources":["../../src/games/cardGames.ts"],"names":[],"mappings":"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"}
|
package/lib/games/hilo.d.ts
CHANGED
|
@@ -15,9 +15,6 @@ export interface CardDetail {
|
|
|
15
15
|
value: string;
|
|
16
16
|
}
|
|
17
17
|
export declare class Hilo {
|
|
18
|
-
static getResult(hexStr: string, cardNo: number): number;
|
|
19
|
-
static getResults(hexStr: string[]): number[];
|
|
20
|
-
static toComparableNo(result: number): number;
|
|
21
18
|
static isGuessCorrect(previousCard: number, guess: HiloGuess, result: number): boolean;
|
|
22
19
|
static calculateTotalMultiplierBN(actions: {
|
|
23
20
|
guess: HiloGuess;
|
|
@@ -27,5 +24,4 @@ export declare class Hilo {
|
|
|
27
24
|
static calculateMultiplierBN(guess: HiloGuess, previousCard: number, edgeBps: number): BigNumber;
|
|
28
25
|
static calculateWinChance(guess: HiloGuess, previousCard: number): number;
|
|
29
26
|
static calculateWinChanceBN(guess: HiloGuess, previousCard: number): BigNumber;
|
|
30
|
-
static getCardDetails(cardNum: number): CardDetail;
|
|
31
27
|
}
|
package/lib/games/hilo.js
CHANGED
|
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.Hilo = exports.Suits = exports.HiloGuess = void 0;
|
|
7
7
|
const bignumber_js_1 = __importDefault(require("bignumber.js"));
|
|
8
8
|
const utils_1 = require("../utils");
|
|
9
|
-
const
|
|
9
|
+
const cardGames_1 = require("./cardGames");
|
|
10
10
|
const TOTAL_CARD = new bignumber_js_1.default(13);
|
|
11
11
|
var HiloGuess;
|
|
12
12
|
(function (HiloGuess) {
|
|
@@ -21,44 +21,10 @@ var Suits;
|
|
|
21
21
|
Suits["SPADES"] = "SPADES";
|
|
22
22
|
Suits["CLUBS"] = "CLUBS";
|
|
23
23
|
})(Suits = exports.Suits || (exports.Suits = {}));
|
|
24
|
-
const suitsArr = [Suits.DIAMONDS, Suits.HEARTS, Suits.SPADES, Suits.CLUBS];
|
|
25
|
-
const CARD_MAP = {
|
|
26
|
-
'1': 'A',
|
|
27
|
-
'11': 'J',
|
|
28
|
-
'12': 'Q',
|
|
29
|
-
'13': 'K',
|
|
30
|
-
};
|
|
31
24
|
class Hilo {
|
|
32
|
-
static getResult(hexStr, cardNo) {
|
|
33
|
-
const bytePosition = cardNo % 8;
|
|
34
|
-
const bytes = (0, utils_1.hexToBytes)(hexStr);
|
|
35
|
-
let result = new bignumber_js_1.default(0);
|
|
36
|
-
for (let j = 0; j < 4; j++) {
|
|
37
|
-
const value = bytes[4 * bytePosition + j];
|
|
38
|
-
result = result.plus(new bignumber_js_1.default(value).dividedBy(BYTE_TOTAL.pow(j + 1)));
|
|
39
|
-
}
|
|
40
|
-
return result.multipliedBy(52).integerValue(bignumber_js_1.default.ROUND_FLOOR).toNumber();
|
|
41
|
-
}
|
|
42
|
-
static getResults(hexStr) {
|
|
43
|
-
const results = [];
|
|
44
|
-
for (let i = 0; i < hexStr.length * 8; i++) {
|
|
45
|
-
const hexNo = Math.trunc(i / 8);
|
|
46
|
-
results.push(this.getResult(hexStr[hexNo], i));
|
|
47
|
-
}
|
|
48
|
-
return results;
|
|
49
|
-
}
|
|
50
|
-
static toComparableNo(result) {
|
|
51
|
-
const comparableNo = Math.trunc(result / 4) + 2;
|
|
52
|
-
if (comparableNo === 14) {
|
|
53
|
-
return 1;
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
return comparableNo;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
25
|
static isGuessCorrect(previousCard, guess, result) {
|
|
60
|
-
const previousCardValue =
|
|
61
|
-
const resultValue =
|
|
26
|
+
const previousCardValue = cardGames_1.CardGames.toComparableNo(previousCard);
|
|
27
|
+
const resultValue = cardGames_1.CardGames.toComparableNo(result);
|
|
62
28
|
if (guess === HiloGuess.SAME_OR_ABOVE) {
|
|
63
29
|
if (previousCardValue === 1) {
|
|
64
30
|
return resultValue > 1;
|
|
@@ -103,7 +69,7 @@ class Hilo {
|
|
|
103
69
|
}
|
|
104
70
|
static calculateWinChanceBN(guess, previousCard) {
|
|
105
71
|
let possibleOutcomes = new bignumber_js_1.default(0);
|
|
106
|
-
const previousCardValue =
|
|
72
|
+
const previousCardValue = cardGames_1.CardGames.toComparableNo(previousCard);
|
|
107
73
|
if ((previousCardValue === 1 && guess === HiloGuess.SAME_OR_BELOW) || (previousCardValue === 13 && guess === HiloGuess.SAME_OR_ABOVE)) {
|
|
108
74
|
possibleOutcomes = (0, bignumber_js_1.default)(1);
|
|
109
75
|
}
|
|
@@ -118,17 +84,6 @@ class Hilo {
|
|
|
118
84
|
}
|
|
119
85
|
return possibleOutcomes.dividedBy(TOTAL_CARD);
|
|
120
86
|
}
|
|
121
|
-
static getCardDetails(cardNum) {
|
|
122
|
-
if (cardNum > 51 || cardNum < 0 || !Number.isInteger(cardNum)) {
|
|
123
|
-
throw 'out of bounds';
|
|
124
|
-
}
|
|
125
|
-
const suit = suitsArr[cardNum % 4];
|
|
126
|
-
let value = this.toComparableNo(cardNum).toString();
|
|
127
|
-
if (CARD_MAP[value]) {
|
|
128
|
-
value = CARD_MAP[value];
|
|
129
|
-
}
|
|
130
|
-
return { suit, value };
|
|
131
|
-
}
|
|
132
87
|
}
|
|
133
88
|
exports.Hilo = Hilo;
|
|
134
89
|
//# sourceMappingURL=hilo.js.map
|
package/lib/games/hilo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hilo.js","sourceRoot":"","sources":["../../src/games/hilo.ts"],"names":[],"mappings":";;;;;;AAAA,gEAAqC;AACrC,
|
|
1
|
+
{"version":3,"file":"hilo.js","sourceRoot":"","sources":["../../src/games/hilo.ts"],"names":[],"mappings":"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"}
|
package/lib/index.d.ts
CHANGED
|
@@ -6,4 +6,6 @@ export { Plinko, PlinkoRiskLevel } from './games/plinko';
|
|
|
6
6
|
export { Crash } from './games/crash';
|
|
7
7
|
export { Limbo } from './games/limbo';
|
|
8
8
|
export { Keno, KenoRiskLevel } from './games/keno';
|
|
9
|
-
export { Hilo, HiloGuess
|
|
9
|
+
export { Hilo, HiloGuess } from './games/hilo';
|
|
10
|
+
export { CardGames, CardDetail, CardValue, Suits, suitsArr } from './games/cardGames';
|
|
11
|
+
export { BlackjackAction, Blackjack, InsuranceStatus, PerfectPairType, TwentyOnePlusThreeType, perfectPairPayout, twentyOnePlusThreePayout, HandOutcome, } from './games/blackjack';
|