-
Notifications
You must be signed in to change notification settings - Fork 1
/
bundle.js
194 lines (163 loc) · 61.5 KB
/
bundle.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, {
/******/ configurable: false,
/******/ enumerable: true,
/******/ get: getter
/******/ });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "./index.js");
/******/ })
/************************************************************************/
/******/ ({
/***/ "./index.js":
/*!******************!*\
!*** ./index.js ***!
\******************/
/*! no exports provided */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _lib_shoe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/shoe */ \"./lib/shoe.js\");\n/* harmony import */ var _lib_card__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/card */ \"./lib/card.js\");\n/* harmony import */ var _lib_player__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/player */ \"./lib/player.js\");\n/* harmony import */ var _lib_hand__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/hand */ \"./lib/hand.js\");\n/* harmony import */ var _lib_game__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/game */ \"./lib/game.js\");\n/* harmony import */ var _lib_util_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/util.js */ \"./lib/util.js\");\n/* harmony import */ var _lib_messages_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/messages.js */ \"./lib/messages.js\");\n/* harmony import */ var _lib_sounds__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lib/sounds */ \"./lib/sounds.js\");\n\n\n\n\n\n\n\n\n\n\nwindow.addEventListener('load', () => {\n const game = new _lib_game__WEBPACK_IMPORTED_MODULE_4__[\"default\"]();\n game.shoe.shuffle();\n Object(_lib_util_js__WEBPACK_IMPORTED_MODULE_5__[\"renderBankrolls\"])(game);\n\n Object(_lib_util_js__WEBPACK_IMPORTED_MODULE_5__[\"startRound\"])(game);\n\n document.getElementById('how-to-play').addEventListener('click', () => {\n document.getElementById('modal-container').style.display = 'block';\n });\n\n document.getElementById('modal-container').addEventListener('click', e => {\n if (e.target === e.currentTarget) {\n document.getElementById('modal-container').style.display = 'none';\n }\n });\n\n document.getElementById('hit-button').addEventListener('click', () => {\n Object(_lib_messages_js__WEBPACK_IMPORTED_MODULE_6__[\"clearError\"])();\n game.player.hit(game, game.shoe);\n });\n\n document.getElementById('stay-button').addEventListener('click', () => {\n Object(_lib_messages_js__WEBPACK_IMPORTED_MODULE_6__[\"clearError\"])();\n game.player.stay(game);\n });\n\n document.getElementById('double-down-button').addEventListener('click', () => {\n Object(_lib_messages_js__WEBPACK_IMPORTED_MODULE_6__[\"clearError\"])();\n if (game.player.bankroll < game.player.currentHand.bet) {\n Object(_lib_messages_js__WEBPACK_IMPORTED_MODULE_6__[\"printError\"])('Your bankroll is too low to double!');\n } else {\n _lib_sounds__WEBPACK_IMPORTED_MODULE_7__[\"chipsSound\"].play();\n game.player.doubleDown(game, game.shoe);\n }\n });\n\n document.getElementById('split-button').addEventListener('click', () => {\n Object(_lib_messages_js__WEBPACK_IMPORTED_MODULE_6__[\"clearError\"])();\n if (game.player.bankroll < game.player.currentHand.bet) {\n Object(_lib_messages_js__WEBPACK_IMPORTED_MODULE_6__[\"printError\"])('Your bankroll is too low to split!');\n } else {\n _lib_sounds__WEBPACK_IMPORTED_MODULE_7__[\"chipsSound\"].play();\n game.player.split(game);\n }\n });\n\n document.getElementById('clear-bet').addEventListener('click', () => {\n game.player.clearBet(game);\n Array.from(document.getElementsByClassName('alternate-bet-buttons')).forEach(button => button.style.display = 'none');\n Object(_lib_util_js__WEBPACK_IMPORTED_MODULE_5__[\"renderBankrolls\"])(game);\n });\n\n document.getElementById('bet25').addEventListener('click', () => {\n _lib_sounds__WEBPACK_IMPORTED_MODULE_7__[\"chipsSound\"].play();\n game.player.placeBet(game.player.currentHand, 25);\n betButtonAction(game);\n });\n\n document.getElementById('bet100').addEventListener('click', () => {\n _lib_sounds__WEBPACK_IMPORTED_MODULE_7__[\"chipsSound\"].play();\n game.player.placeBet(game.player.currentHand, 100);\n betButtonAction(game);\n });\n\n document.getElementById('bet500').addEventListener('click', () => {\n _lib_sounds__WEBPACK_IMPORTED_MODULE_7__[\"chipsSound\"].play();\n game.player.placeBet(game.player.currentHand, 500);\n betButtonAction(game);\n });\n\n document.getElementById('betAllIn').addEventListener('click', () => {\n _lib_sounds__WEBPACK_IMPORTED_MODULE_7__[\"chipsSound\"].play();\n game.player.placeBet(game.player.currentHand, game.player.bankroll);\n betButtonAction(game);\n });\n\n document.getElementById('deal').addEventListener('click', () => {\n Object(_lib_util_js__WEBPACK_IMPORTED_MODULE_5__[\"startHand\"])(game);\n });\n\n document.getElementById('play-again-button').addEventListener('click', () => {\n Object(_lib_util_js__WEBPACK_IMPORTED_MODULE_5__[\"resetGame\"])(game);\n Object(_lib_util_js__WEBPACK_IMPORTED_MODULE_5__[\"startRound\"])(game);\n });\n\n const showCountButton = document.getElementById('show-count-button');\n document.getElementById('show-count-button').addEventListener('click', () => {\n document.getElementById('count-inner-container').classList.toggle('active');\n\n if (showCountButton.getAttribute(\"data-text-swap\") == showCountButton.innerHTML) {\n showCountButton.innerHTML = showCountButton.getAttribute(\"data-text-original\");\n } else {\n showCountButton.setAttribute(\"data-text-original\", showCountButton.innerHTML);\n showCountButton.innerHTML = showCountButton.getAttribute(\"data-text-swap\");\n }\n });\n\n const showBasicStrategyButton = document.getElementById('show-basic-strategy-button');\n document.getElementById('show-basic-strategy-button').addEventListener('click', () => {\n document.getElementById('basic-strategy-inner-container').classList.toggle('active');\n\n if (showBasicStrategyButton.getAttribute(\"data-text-swap\") == showBasicStrategyButton.innerHTML) {\n showBasicStrategyButton.innerHTML = showBasicStrategyButton.getAttribute(\"data-text-original\");\n } else {\n showBasicStrategyButton.setAttribute(\"data-text-original\", showBasicStrategyButton.innerHTML);\n showBasicStrategyButton.innerHTML = showBasicStrategyButton.getAttribute(\"data-text-swap\");\n }\n });\n\n const betButtonAction = game => {\n document.getElementById('bet-button-title').style.display = 'none';\n const playerBet = document.getElementById('player-bet');\n if (playerBet) {\n playerBet.innerHTML = `$${game.player.bet}`;\n } else {\n const bet = document.createElement('h1');\n bet.id = 'player-bet';\n bet.innerHTML = `$${game.player.bet}`;\n document.getElementById('bet-buttons').prepend(bet);\n }\n Array.from(document.getElementsByClassName('alternate-bet-buttons')).forEach(button => button.style.display = 'initial');\n document.getElementById('bet-buttons-container').style.display = 'initial';\n\n Object(_lib_util_js__WEBPACK_IMPORTED_MODULE_5__[\"renderBankrolls\"])(game);\n };\n});\n\n//# sourceURL=webpack:///./index.js?");
/***/ }),
/***/ "./lib/basic_strategy.js":
/*!*******************************!*\
!*** ./lib/basic_strategy.js ***!
\*******************************/
/*! exports provided: displayBasicStrategy */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"displayBasicStrategy\", function() { return displayBasicStrategy; });\n/* harmony import */ var _card__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./card */ \"./lib/card.js\");\n/* harmony import */ var _hand__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./hand */ \"./lib/hand.js\");\n\n\n\nconst displayBasicStrategy = game => {\n const basicStrategyContainer = document.getElementById('basic-strategy');\n const basicStrategyText = document.getElementById('basic-strategy-text');\n if (game.dealer.hand.cards.length === 2 && game.player.currentHand && !game.player.currentHand.busted && !game.player.currentHand.isDoubled && !game.player.currentHand.isBlackjack && !game.dealer.hand.isBlackjack) {\n basicStrategyText.innerHTML = 'Basic Strategy:';\n basicStrategyContainer.innerHTML = `${basicStrategy(game)}`;\n } else {\n basicStrategyText.innerHTML = 'Waiting For Your Turn...';\n basicStrategyContainer.innerHTML = '';\n }\n};\n\nconst basicStrategy = game => {\n const hand = game.player.currentHand;\n const dealerUpCard = game.dealer.hand.cards[1].value();\n\n if (isSplittable(hand)) {\n if (hand.value === 4 || hand.value === 6) {\n return dealerUpCard <= 7 ? 'Split' : 'Hit';\n } else if (hand.value === 8) {\n return dealerUpCard === 5 || dealerUpCard === 6 ? 'Split' : 'Hit';\n } else if (hand.value === 10) {\n return dealerUpCard < 10 ? 'Double' : 'Hit';\n } else if (hand.value === 12 && !hand.aceAs11) {\n return dealerUpCard <= 6 ? 'Split' : 'Hit';\n } else if (hand.value === 14) {\n return dealerUpCard <= 7 ? 'Split' : 'Hit';\n } else if (hand.value === 16 || hand.value === 12) {\n return 'Split';\n } else if (hand.value === 18) {\n return dealerUpCard <= 7 || dealerUpCard === 9 ? 'Split' : 'Stand';\n } else {\n return 'Stand';\n }\n } else if (isDoubleable(hand)) {\n if (hand.value < 9) {\n return 'Hit';\n } else if (hand.value === 9) {\n return dealerUpCard <= 6 && dealerUpCard >= 3 ? 'Double' : 'Hit';\n } else if (hand.value === 10) {\n return dealerUpCard <= 9 ? 'Double' : 'Hit';\n } else if (hand.value === 11) {\n return dealerUpCard <= 10 ? 'Double' : 'Hit';\n } else if (hand.aceAs11 && (hand.value === 13 || hand.value === 14)) {\n return dealerUpCard === 5 || dealerUpCard === 6 ? 'Double' : 'Hit';\n } else if (hand.aceAs11 && (hand.value === 15 || hand.value === 16)) {\n return dealerUpCard <= 6 && dealerUpCard >= 4 ? 'Double' : 'Hit';\n } else if (hand.aceAs11 && hand.value === 17) {\n return dealerUpCard <= 6 && dealerUpCard >= 3 ? 'Double' : 'Hit';\n } else if (hand.aceAs11 && hand.value === 18) {\n if (dealerUpCard <= 6 && dealerUpCard >= 3) {\n return 'Double';\n } else if (dealerUpCard === 2 || dealerUpCard === 7 || dealerUpCard === 8) {\n return 'Stand';\n } else {\n return 'Hit';\n }\n } else if (hand.value === 12) {\n return dealerUpCard <= 3 || dealerUpCard >= 7 ? 'Hit' : 'Stand';\n } else if (hand.value <= 16) {\n return dealerUpCard <= 6 ? 'Stand' : 'Hit';\n } else {\n return 'Stand';\n }\n } else {\n if (hand.value <= 11) {\n return 'Hit';\n } else if (hand.value <= 17 && hand.aceAs11 && !hand.isHard) {\n return 'Hit';\n } else if (hand.value === 18 && hand.aceAs11 && !hand.isHard) {\n if (dealerUpCard <= 8) {\n return 'Stand';\n } else {\n return 'Hit';\n }\n } else if (hand.value === 12) {\n return dealerUpCard <= 3 || dealerUpCard >= 7 ? 'Hit' : 'Stand';\n } else if (hand.value <= 16) {\n return dealerUpCard <= 6 ? 'Stand' : 'Hit';\n } else {\n return 'Stand';\n }\n }\n};\n\nconst isSplittable = hand => {\n return hand.cards.length === 2 && hand.cards[0].rank === hand.cards[1].rank;\n};\n\nconst isDoubleable = hand => {\n return hand.cards.length === 2;\n};\n\n//# sourceURL=webpack:///./lib/basic_strategy.js?");
/***/ }),
/***/ "./lib/card.js":
/*!*********************!*\
!*** ./lib/card.js ***!
\*********************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Card; });\nconst SUITS = {\n 'h': 'h',\n 'd': 'd',\n 's': 's',\n 'c': 'c'\n};\n\nconst RANKS = {\n '2': '2',\n '3': '3',\n '4': '4',\n '5': '5',\n '6': '6',\n '7': '7',\n '8': '8',\n '9': '9',\n '10': '10',\n 'J': '10',\n 'Q': '10',\n 'K': '10',\n 'A': '11'\n};\n\nclass Card {\n constructor(rank, suit) {\n this.rank = rank;\n this.suit = suit;\n }\n\n value() {\n return parseInt(RANKS[this.rank]);\n }\n\n static suits() {\n return Object.keys(SUITS);\n }\n\n static ranks() {\n return Object.keys(RANKS);\n }\n\n static values() {\n return Object.values(RANKS);\n }\n}\n\n//# sourceURL=webpack:///./lib/card.js?");
/***/ }),
/***/ "./lib/game.js":
/*!*********************!*\
!*** ./lib/game.js ***!
\*********************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Game; });\n/* harmony import */ var _shoe__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./shoe */ \"./lib/shoe.js\");\n/* harmony import */ var _player__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./player */ \"./lib/player.js\");\n/* harmony import */ var _hand__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./hand */ \"./lib/hand.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util.js */ \"./lib/util.js\");\n/* harmony import */ var _messages_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./messages.js */ \"./lib/messages.js\");\n/* harmony import */ var _sounds__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sounds */ \"./lib/sounds.js\");\n/* harmony import */ var _basic_strategy__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./basic_strategy */ \"./lib/basic_strategy.js\");\n\n\n\n\n\n\n\n\n\nclass Game {\n constructor() {\n this.dealer = new _player__WEBPACK_IMPORTED_MODULE_1__[\"Dealer\"]('Dealer');\n this.player = new _player__WEBPACK_IMPORTED_MODULE_1__[\"Player\"]('Player');\n this.shoe = new _shoe__WEBPACK_IMPORTED_MODULE_0__[\"default\"]();\n this.count = 0;\n }\n\n async dealCards() {\n const shoe = this.shoe;\n const currentHandIndex = this.player.currentHandIndex;\n const self = this;\n\n for (let i = 0; i < 2; i++) {\n this.player.hands.forEach(async hand => {\n const card = hand.receiveCard(shoe);\n Object(_util_js__WEBPACK_IMPORTED_MODULE_3__[\"renderCard\"])(card, hand, 'player', null, currentHandIndex);\n self.addToCount(card);\n _sounds__WEBPACK_IMPORTED_MODULE_5__[\"cardSound\"].play();\n await Object(_util_js__WEBPACK_IMPORTED_MODULE_3__[\"sleep\"])(500);\n });\n\n await Object(_util_js__WEBPACK_IMPORTED_MODULE_3__[\"sleep\"])(500);\n if (i === 0) {\n const card = this.dealer.hand.receiveCard(shoe);\n Object(_util_js__WEBPACK_IMPORTED_MODULE_3__[\"renderCard\"])(card, this.dealer.hand, 'dealer-facedown');\n _sounds__WEBPACK_IMPORTED_MODULE_5__[\"cardSound\"].play();\n } else {\n const card = this.dealer.hand.receiveCard(shoe);\n Object(_util_js__WEBPACK_IMPORTED_MODULE_3__[\"renderCard\"])(card, this.dealer.hand, 'dealer-normal');\n self.addToCount(card);\n _sounds__WEBPACK_IMPORTED_MODULE_5__[\"cardSound\"].play();\n }\n await Object(_util_js__WEBPACK_IMPORTED_MODULE_3__[\"sleep\"])(500);\n }\n Object(_basic_strategy__WEBPACK_IMPORTED_MODULE_6__[\"displayBasicStrategy\"])(self);\n }\n\n async payBets() {\n const self = this;\n const player = self.player;\n const dealer = self.dealer;\n\n if (dealer.hand.isBlackjack) {\n this.payBetsWithDealerBlackjack(player, dealer);\n } else {\n this.payBetsNormal(player, dealer);\n }\n\n const numHands = player.hands.filter(hand => !hand.busted).length;\n\n await Object(_util_js__WEBPACK_IMPORTED_MODULE_3__[\"sleep\"])(1000 * numHands);\n\n if (this.isOver()) {\n if (this.winner() === 'player') {\n Object(_messages_js__WEBPACK_IMPORTED_MODULE_4__[\"printMessage\"])('YOU WIN');\n } else {\n Object(_messages_js__WEBPACK_IMPORTED_MODULE_4__[\"printMessage\"])('DEALER WINS');\n }\n } else {\n Object(_util_js__WEBPACK_IMPORTED_MODULE_3__[\"startRound\"])(self);\n }\n }\n\n async payBetsWithDealerBlackjack(player, dealer) {\n const self = this;\n\n await Object(_util_js__WEBPACK_IMPORTED_MODULE_3__[\"asyncForEach\"])(player.hands, async (hand, idx) => {\n if (hand.busted) {\n return;\n } else if (hand.isBlackjack) {\n Object(_messages_js__WEBPACK_IMPORTED_MODULE_4__[\"flashPayout\"])('player', hand.bet, '+');\n player.bankroll += hand.bet;\n } else {\n Object(_messages_js__WEBPACK_IMPORTED_MODULE_4__[\"flashPayout\"])('dealer', hand.bet, '+');\n dealer.bankroll += hand.bet;\n document.getElementById(`player-bet-${idx}`).style.color = 'red';\n document.getElementById(`player-hand-value-${idx}`).style.color = 'red';\n }\n\n hand.bet = null;\n Object(_util_js__WEBPACK_IMPORTED_MODULE_3__[\"renderBankrolls\"])(self);\n await Object(_util_js__WEBPACK_IMPORTED_MODULE_3__[\"sleep\"])(1000);\n });\n }\n\n async payBetsNormal(player, dealer) {\n const self = this;\n\n await Object(_util_js__WEBPACK_IMPORTED_MODULE_3__[\"asyncForEach\"])(player.hands, async (hand, idx) => {\n if (hand.busted) {\n return;\n } else if (hand.isBlackjack) {\n Object(_messages_js__WEBPACK_IMPORTED_MODULE_4__[\"flashPayout\"])('player', hand.bet * 2.5, '+');\n Object(_messages_js__WEBPACK_IMPORTED_MODULE_4__[\"flashPayout\"])('dealer', hand.bet * 1.5, '-');\n _sounds__WEBPACK_IMPORTED_MODULE_5__[\"winSound\"].play();\n player.bankroll += hand.bet * 2.5;\n dealer.bankroll -= hand.bet * 1.5;\n document.getElementById(`player-bet-${idx}`).style.color = 'gold';\n document.getElementById(`player-hand-value-${idx}`).style.color = 'gold';\n } else if (dealer.hand.busted || hand.value > dealer.hand.value) {\n Object(_messages_js__WEBPACK_IMPORTED_MODULE_4__[\"flashPayout\"])('player', hand.bet * 2, '+');\n Object(_messages_js__WEBPACK_IMPORTED_MODULE_4__[\"flashPayout\"])('dealer', hand.bet, '-');\n _sounds__WEBPACK_IMPORTED_MODULE_5__[\"winSound\"].play();\n player.receiveWinnings(hand.bet);\n dealer.bankroll -= hand.bet;\n document.getElementById(`player-bet-${idx}`).style.color = 'gold';\n document.getElementById(`player-hand-value-${idx}`).style.color = 'gold';\n } else if (hand.value < dealer.hand.value) {\n Object(_messages_js__WEBPACK_IMPORTED_MODULE_4__[\"flashPayout\"])('dealer', hand.bet, '+');\n dealer.bankroll += hand.bet;\n document.getElementById(`player-bet-${idx}`).style.color = 'red';\n document.getElementById(`player-hand-value-${idx}`).style.color = 'red';\n } else {\n Object(_messages_js__WEBPACK_IMPORTED_MODULE_4__[\"flashPayout\"])('player', hand.bet, '+');\n Object(_messages_js__WEBPACK_IMPORTED_MODULE_4__[\"flashPushMessage\"])();\n player.bankroll += hand.bet;\n }\n\n hand.bet = null;\n Object(_util_js__WEBPACK_IMPORTED_MODULE_3__[\"renderBankrolls\"])(self);\n await Object(_util_js__WEBPACK_IMPORTED_MODULE_3__[\"sleep\"])(1000);\n });\n }\n\n addToCount(card) {\n if (parseInt(card.value()) < 7) {\n this.count += 1;\n } else if (parseInt(card.value()) > 9) {\n this.count -= 1;\n }\n const count = this.countToString();\n const decks = Math.round(parseFloat(this.shoe.cards.length / 52));\n let trueCount = Math.round(parseFloat(count / decks));\n trueCount = trueCount > 0 ? `+${trueCount}` : trueCount;\n document.getElementById('count').innerHTML = `${count}`;\n document.getElementById('decks-remaining').innerHTML = `${decks}`;\n document.getElementById('true-count').innerHTML = `${trueCount}`;\n }\n\n countToString() {\n if (this.count > 0) {\n return `+${this.count}`;\n } else if (this.count < 0) {\n return `${this.count}`;\n } else {\n return '0';\n }\n }\n\n isOver() {\n return this.player.bankroll <= 0 || this.dealer.bankroll <= 0;\n }\n\n winner() {\n return this.player.bankroll <= 0 ? 'dealer' : 'player';\n }\n}\n\n//# sourceURL=webpack:///./lib/game.js?");
/***/ }),
/***/ "./lib/hand.js":
/*!*********************!*\
!*** ./lib/hand.js ***!
\*********************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Hand; });\nclass Hand {\n constructor() {\n this.cards = [];\n this.value = 0;\n this.aceAs11 = false;\n this.isHard = false;\n this.bet = null;\n this.busted = false;\n this.isDoubled = false;\n this.isBlackjack = false;\n }\n\n hit(shoe) {\n return this.receiveCard(shoe);\n }\n\n doubleDown(shoe) {\n this.bet *= 2;\n return this.receiveCard(shoe);\n }\n\n split() {\n const hand1 = new Hand();\n const hand2 = new Hand();\n\n const card1 = this.cards[0];\n const card2 = this.cards[1];\n\n hand1.cards.push(card1);\n hand1.addCardToValue(card1);\n hand1.bet = this.bet;\n\n hand2.cards.push(card2);\n hand2.addCardToValue(card2);\n hand2.bet = this.bet;\n\n return [hand1, hand2];\n }\n\n receiveCard(shoe) {\n const card = shoe.drawCard();\n this.cards.push(card);\n this.addCardToValue(card);\n return card;\n }\n\n addCardToValue(card) {\n if (card.rank === 'A') {\n\n if (this.value >= 11) {\n this.value += 1;\n } else {\n this.aceAs11 = true;\n this.value += 11;\n }\n } else {\n this.value += card.value();\n }\n\n if (this.value > 21 && this.aceAs11 === true && this.isHard === false) {\n this.isHard = true;\n this.value -= 10;\n }\n }\n\n checkForBlackjack() {\n return this.value === 21 && this.cards.length === 2;\n }\n\n isBusted() {\n return this.value > 21;\n }\n}\n\n//# sourceURL=webpack:///./lib/hand.js?");
/***/ }),
/***/ "./lib/messages.js":
/*!*************************!*\
!*** ./lib/messages.js ***!
\*************************/
/*! exports provided: printMessage, flashShuffleMessage, flashBustMessage, flashBlackjackMessage, flashDealerBustMessage, flashPushMessage, printError, clearError, flashPayout */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"printMessage\", function() { return printMessage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flashShuffleMessage\", function() { return flashShuffleMessage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flashBustMessage\", function() { return flashBustMessage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flashBlackjackMessage\", function() { return flashBlackjackMessage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flashDealerBustMessage\", function() { return flashDealerBustMessage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flashPushMessage\", function() { return flashPushMessage; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"printError\", function() { return printError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"clearError\", function() { return clearError; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"flashPayout\", function() { return flashPayout; });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./lib/util.js\");\n/* harmony import */ var _sounds__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./sounds */ \"./lib/sounds.js\");\n\n\n\nconst printMessage = message => {\n Array.from(document.getElementsByClassName('hand-value')).map(el => el.style.display = 'none');\n document.getElementById('dealer-hand-value').style.display = 'none';\n document.getElementById('message').innerHTML = `${message}`;\n message === 'YOU WIN' ? _sounds__WEBPACK_IMPORTED_MODULE_1__[\"winnerSound\"].play() : _sounds__WEBPACK_IMPORTED_MODULE_1__[\"loseSound\"].play();\n document.getElementById('play-again-button').style.display = 'initial';\n};\n\nconst flashShuffleMessage = async () => {\n document.getElementById('message').innerHTML = 'Re-Shuffling Shoe...';\n await Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"sleep\"])(2000);\n document.getElementById('message').innerHTML = '';\n};\n\nconst flashBustMessage = async () => {\n Array.from(document.getElementsByClassName('hand-value')).map(el => el.style.display = 'none');\n document.getElementById('dealer-hand-value').style.display = 'none';\n document.getElementById('message').innerHTML = 'BUST';\n await Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"sleep\"])(1000);\n document.getElementById('message').innerHTML = '';\n document.getElementById('dealer-hand-value').style.display = 'initial';\n Array.from(document.getElementsByClassName('hand-value')).map(el => el.style.display = 'initial');\n};\n\nconst flashBlackjackMessage = async () => {\n Array.from(document.getElementsByClassName('hand-value')).map(el => el.style.display = 'none');\n document.getElementById('dealer-hand-value').style.display = 'none';\n document.getElementById('message').innerHTML = 'BLACKJACK!';\n await Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"sleep\"])(1000);\n document.getElementById('message').innerHTML = '';\n document.getElementById('dealer-hand-value').style.display = 'initial';\n Array.from(document.getElementsByClassName('hand-value')).map(el => el.style.display = 'initial');\n};\n\nconst flashDealerBustMessage = async () => {\n Array.from(document.getElementsByClassName('hand-value')).map(el => el.style.display = 'none');\n document.getElementById('dealer-hand-value').style.display = 'none';\n document.getElementById('message').innerHTML = 'DEALER BUSTS!';\n await Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"sleep\"])(1000);\n document.getElementById('message').innerHTML = '';\n document.getElementById('dealer-hand-value').style.display = 'initial';\n Array.from(document.getElementsByClassName('hand-value')).map(el => el.style.display = 'initial');\n};\n\nconst flashPushMessage = async () => {\n Array.from(document.getElementsByClassName('hand-value')).map(el => el.style.display = 'none');\n document.getElementById('dealer-hand-value').style.display = 'none';\n document.getElementById('message').innerHTML = 'PUSH';\n await Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"sleep\"])(1000);\n document.getElementById('message').innerHTML = '';\n document.getElementById('dealer-hand-value').style.display = 'initial';\n Array.from(document.getElementsByClassName('hand-value')).map(el => el.style.display = 'initial');\n};\n\nconst printError = message => {\n const error = document.createElement('div');\n error.id = 'error';\n error.innerHTML = `${message}`;\n document.getElementById('action-buttons').appendChild(error);\n};\n\nconst clearError = () => {\n const error = document.getElementById('error');\n if (error) {\n document.getElementById('action-buttons').removeChild(error);\n }\n};\n\nconst flashPayout = async (player, amt, sign) => {\n const amount = document.createElement('h3');\n amount.innerHTML = `${sign} ${amt}`;\n document.getElementById(`${player}-info-area`).appendChild(amount);\n await Object(_util__WEBPACK_IMPORTED_MODULE_0__[\"sleep\"])(1000);\n document.getElementById(`${player}-info-area`).removeChild(amount);\n};\n\n//# sourceURL=webpack:///./lib/messages.js?");
/***/ }),
/***/ "./lib/player.js":
/*!***********************!*\
!*** ./lib/player.js ***!
\***********************/
/*! exports provided: Player, Dealer */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Player\", function() { return Player; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Dealer\", function() { return Dealer; });\n/* harmony import */ var _hand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hand */ \"./lib/hand.js\");\n/* harmony import */ var _game__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./game */ \"./lib/game.js\");\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util */ \"./lib/util.js\");\n/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./messages */ \"./lib/messages.js\");\n/* harmony import */ var _sounds__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./sounds */ \"./lib/sounds.js\");\n/* harmony import */ var _basic_strategy__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./basic_strategy */ \"./lib/basic_strategy.js\");\n\n\n\n\n\n\n\nclass Player {\n constructor(name) {\n this.name = name;\n this.bankroll = 1000;\n this.hands = [new _hand__WEBPACK_IMPORTED_MODULE_0__[\"default\"]()];\n this.bet = 0;\n this.currentHandIndex = 0;\n this.currentHand = this.hands[this.currentHandIndex];\n this.isBusted = false;\n }\n\n placeBet(hand, amt) {\n if (amt > this.bankroll) {\n amt = this.bankroll;\n }\n\n this.bankroll -= amt;\n this.bet += amt;\n hand.bet += amt;\n }\n\n clearBet() {\n this.bankroll += this.bet;\n this.bet = 0;\n this.currentHand.bet = 0;\n\n document.getElementById('player-bet').remove();\n document.getElementById('bet-button-title').style.display = 'block';\n }\n\n receiveWinnings(amt) {\n this.bankroll += amt * 2;\n }\n\n hit(game, shoe) {\n const hand = this.currentHand;\n const card = hand.hit(shoe);\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"renderCard\"])(card, hand, 'player', null, this.currentHandIndex);\n game.addToCount(card);\n Object(_basic_strategy__WEBPACK_IMPORTED_MODULE_5__[\"displayBasicStrategy\"])(game);\n document.getElementById(`player-hand-value-${game.player.currentHandIndex}`).style.left = '10px';\n _sounds__WEBPACK_IMPORTED_MODULE_4__[\"cardSound\"].play();\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"renderHandValue\"])(this);\n document.getElementById('double-down-button').style.display = 'none';\n document.getElementById('split-button').style.display = 'none';\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"checkTurnStatus\"])(game, this);\n }\n\n stay(game) {\n this.nextHand(game);\n }\n\n async doubleDown(game, shoe) {\n const hand = this.currentHand;\n hand.isDoubled = true;\n this.bet += this.currentHand.bet;\n this.bankroll -= this.currentHand.bet;\n const card = hand.doubleDown(shoe);\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"renderCard\"])(card, hand, 'player', 'double', this.currentHandIndex);\n game.addToCount(card);\n Object(_basic_strategy__WEBPACK_IMPORTED_MODULE_5__[\"displayBasicStrategy\"])(game);\n document.getElementById(`player-hand-value-${game.player.currentHandIndex}`).style.left = '0';\n _sounds__WEBPACK_IMPORTED_MODULE_4__[\"doubleDownSound\"].play();\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"renderBet\"])(game, game.player.currentHandIndex);\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"renderBankrolls\"])(game);\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"renderHandValue\"])(this);\n document.getElementById('action-buttons').style.display = 'none';\n await Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"sleep\"])(1000);\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"checkTurnStatus\"])(game, this);\n }\n\n async split(game) {\n document.getElementById('action-buttons').style.display = 'none';\n this.bet += this.currentHand.bet;\n this.bankroll -= this.currentHand.bet;\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"renderBankrolls\"])(game);\n\n const i = this.currentHandIndex;\n\n const half1 = this.hands.slice(0, i);\n const half2 = this.hands.slice(i + 1);\n\n const currentHand = this.currentHand;\n\n this.hands = half1.concat(currentHand.split()).concat(half2);\n\n const currentHandIndex = this.currentHandIndex;\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"createPlayerHand\"])(currentHandIndex, 'split');\n\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"renderCardsAfterSplit\"])(game, this.hands);\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"renderHandValuesAfterSplit\"])(this.hands);\n\n this.currentHand = this.hands[currentHandIndex];\n\n const hand = this.currentHand;\n await Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"sleep\"])(500);\n const card = hand.receiveCard(game.shoe);\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"renderCard\"])(card, hand, 'player', null, currentHandIndex);\n document.getElementById('action-buttons').style.display = 'initial';\n if (this.currentHand.cards[0].rank === this.currentHand.cards[1].rank && this.currentHand.cards.length === 2) {\n document.getElementById('split-button').style.display = 'initial';\n } else {\n document.getElementById('split-button').style.display = 'none';\n }\n game.addToCount(card);\n Object(_basic_strategy__WEBPACK_IMPORTED_MODULE_5__[\"displayBasicStrategy\"])(game);\n _sounds__WEBPACK_IMPORTED_MODULE_4__[\"cardSound\"].play();\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"renderHandValue\"])(this);\n if (hand.checkForBlackjack()) {\n hand.isBlackjack = true;\n Array.from(document.getElementsByClassName('hand-value')).forEach(el => el.style.display = 'none');\n document.getElementById('action-buttons').style.display = 'none';\n _sounds__WEBPACK_IMPORTED_MODULE_4__[\"blackjackSound\"].play();\n Object(_messages__WEBPACK_IMPORTED_MODULE_3__[\"flashBlackjackMessage\"])();\n await Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"sleep\"])(1000);\n Array.from(document.getElementsByClassName('hand-value')).forEach(el => el.style.display = 'initial');\n this.nextHand(game);\n }\n }\n\n async nextHand(game) {\n document.getElementById('action-buttons').style.display = 'none';\n const idx = this.currentHandIndex;\n\n document.getElementById(`player-hand-value-${game.player.currentHandIndex}`).style.border = 'none';\n\n this.currentHandIndex += 1;\n\n this.currentHand = this.hands[this.currentHandIndex];\n const currentHand = this.currentHand;\n\n if (currentHand === undefined) {\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"endTurn\"])(game);\n } else if (currentHand.cards.length === 1) {\n await Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"sleep\"])(500);\n const card = currentHand.receiveCard(game.shoe);\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"renderCard\"])(card, currentHand, 'player', null, this.currentHandIndex);\n game.addToCount(card);\n Object(_basic_strategy__WEBPACK_IMPORTED_MODULE_5__[\"displayBasicStrategy\"])(game);\n _sounds__WEBPACK_IMPORTED_MODULE_4__[\"cardSound\"].play();\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"renderHandValue\"])(this);\n if (currentHand.checkForBlackjack()) {\n currentHand.isBlackjack = true;\n Array.from(document.getElementsByClassName('hand-value')).forEach(el => el.style.display = 'none');\n _sounds__WEBPACK_IMPORTED_MODULE_4__[\"blackjackSound\"].play();\n Object(_messages__WEBPACK_IMPORTED_MODULE_3__[\"flashBlackjackMessage\"])();\n await Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"sleep\"])(1000);\n Array.from(document.getElementsByClassName('hand-value')).forEach(el => el.style.display = 'initial');\n this.nextHand(game);\n } else {\n document.getElementById('action-buttons').style.display = 'initial';\n if (currentHand.cards.length === 2) {\n document.getElementById('double-down-button').style.display = 'initial';\n }\n if (currentHand.cards[0].rank !== currentHand.cards[1].rank || currentHand.cards.length !== 2) {\n document.getElementById('split-button').style.display = 'none';\n } else {\n document.getElementById('split-button').style.display = 'initial';\n }\n }\n } else {\n\n // if (currentHand) {\n document.getElementById('action-buttons').style.display = 'initial';\n // document.getElementById('double-down-button').style.display = 'initial';\n // document.getElementById('split-button').style.display = 'initial';\n if (currentHand.cards[0].rank !== currentHand.cards[1].rank || currentHand.cards.length !== 2) {\n document.getElementById('split-button').style.display = 'none';\n }\n }\n }\n\n everyHandBlackjack() {\n return this.hands.every(hand => hand.isBlackjack);\n }\n\n checkIfBusted() {\n if (this.hands.every(hand => hand.busted)) {\n this.isBusted = true;\n }\n }\n}\n\nclass Dealer extends Player {\n constructor(name) {\n super(name);\n this.hand = new _hand__WEBPACK_IMPORTED_MODULE_0__[\"default\"]();\n }\n\n async playTurn(game, shoe) {\n document.getElementById('flipped').removeAttribute('id');\n const card = game.dealer.hand.cards[0];\n game.addToCount(card);\n _sounds__WEBPACK_IMPORTED_MODULE_4__[\"swooshSound\"].play();\n game.player.everyHandBlackjack() ? await Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"sleep\"])(1000) : await Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"sleep\"])(400);\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"renderHandValue\"])(this);\n await Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"sleep\"])(600);\n\n if (!game.player.isBusted && !game.player.everyHandBlackjack()) {\n\n while (this.hand.value < 17) {\n this.hit(game, shoe);\n\n if (this.hand.isBusted()) {\n this.hand.busted = true;\n Object(_messages__WEBPACK_IMPORTED_MODULE_3__[\"flashDealerBustMessage\"])();\n }\n\n await Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"sleep\"])(1200);\n }\n this.checkIfBusted();\n }\n\n await Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"sleep\"])(1000);\n game.payBets();\n }\n\n hit(game, shoe) {\n const hand = this.hand;\n const card = hand.hit(shoe);\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"renderCard\"])(card, hand, 'dealer');\n game.addToCount(card);\n _sounds__WEBPACK_IMPORTED_MODULE_4__[\"cardSound\"].play();\n Object(_util__WEBPACK_IMPORTED_MODULE_2__[\"renderHandValue\"])(this);\n }\n\n hasBlackjack() {\n if (this.hand.checkForBlackjack()) {\n this.hand.isBlackjack = true;\n return true;\n }\n }\n\n checkIfBusted() {\n if (this.hand.busted) {\n this.isBusted = true;\n }\n }\n}\n\n//# sourceURL=webpack:///./lib/player.js?");
/***/ }),
/***/ "./lib/shoe.js":
/*!*********************!*\
!*** ./lib/shoe.js ***!
\*********************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return Shoe; });\n/* harmony import */ var _card__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./card */ \"./lib/card.js\");\n\n\nclass Shoe {\n constructor(cards = Shoe.createShoe()) {\n this.cards = cards;\n }\n\n static createShoe() {\n let shoe = [];\n\n _card__WEBPACK_IMPORTED_MODULE_0__[\"default\"].ranks().forEach(rank => {\n _card__WEBPACK_IMPORTED_MODULE_0__[\"default\"].suits().forEach(suit => {\n shoe.push(new _card__WEBPACK_IMPORTED_MODULE_0__[\"default\"](rank, suit));\n });\n });\n\n for (let i = 0; i < 3; i++) {\n shoe = shoe.concat(shoe);\n }\n\n return shoe;\n }\n\n shuffle() {\n for (let i = this.cards.length - 1; i > 0; i--) {\n const j = Math.floor(Math.random() * (i + 1));\n [this.cards[i], this.cards[j]] = [this.cards[j], this.cards[i]];\n }\n\n // const randomRank = Card.ranks()[Math.floor(Math.random() * Card.ranks().length)];\n // const randomSuit = Card.suits()[Math.floor(Math.random() * Card.suits().length)];\n //\n // const card = new Card(randomRank, randomSuit)\n //\n // for (let i = 0; i < 4; i ++) {\n // if (i % 2 !== 0) {\n // continue;\n // } else {\n // let nextCard = Object.assign(new Card, card);\n // this.cards.splice(i, 0, nextCard);\n // }\n // }\n\n // const aceCard = new Card('A', 's');\n // const kingCard = new Card('K', 's');\n // // this.cards.splice(0, 0, aceCard);\n // this.cards.splice(4, 0, kingCard);\n // this.cards.splice(5, 0, kingCard);\n\n return this.cards;\n }\n\n count() {\n return this.cards.length;\n }\n\n drawCard() {\n return this.cards.shift();\n }\n\n}\n\n//# sourceURL=webpack:///./lib/shoe.js?");
/***/ }),
/***/ "./lib/sounds.js":
/*!***********************!*\
!*** ./lib/sounds.js ***!
\***********************/
/*! exports provided: blackjackSound, doubleDownSound, cardSound, winSound, chipsSound, swooshSound, winnerSound, loseSound */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"blackjackSound\", function() { return blackjackSound; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"doubleDownSound\", function() { return doubleDownSound; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"cardSound\", function() { return cardSound; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"winSound\", function() { return winSound; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"chipsSound\", function() { return chipsSound; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"swooshSound\", function() { return swooshSound; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"winnerSound\", function() { return winnerSound; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"loseSound\", function() { return loseSound; });\nconst blackjackSound1 = new Audio('sounds/blackjack1.mp3');\nconst blackjackSound2 = new Audio('sounds/blackjack2.mp3');\nconst blackjackSound3 = new Audio('sounds/blackjack3.mp3');\nconst blackjackSound4 = new Audio('sounds/blackjack4.mp3');\nconst blackjackSound5 = new Audio('sounds/blackjack5.mp3');\nconst blackjackSound6 = new Audio('sounds/blackjack6.mp3');\nconst blackjackSound7 = new Audio('sounds/blackjack7.mp3');\n\nconst doubleDownSound1 = new Audio('sounds/letItRide.mp3');\nconst doubleDownSound2 = new Audio('sounds/letItRide.mp3');\n\nconst blackjackSoundArray = [blackjackSound1, blackjackSound2, blackjackSound3, blackjackSound4, blackjackSound5, blackjackSound6, blackjackSound7];\n\nconst doubleDownSoundArray = [doubleDownSound1, doubleDownSound2];\n\nconst blackjackSound = blackjackSoundArray[Math.floor(Math.random() * blackjackSoundArray.length)];\nconst doubleDownSound = doubleDownSoundArray[Math.floor(Math.random() * doubleDownSoundArray.length)];\nconst cardSound = new Audio('sounds/cardDeal.mp3');\nconst winSound = new Audio('sounds/cashRegister.mov');\nconst chipsSound = new Audio('sounds/chips.mov');\nconst swooshSound = new Audio('sounds/swoosh.mp3');\nconst winnerSound = new Audio('sounds/clapping.mp3');\nconst loseSound = new Audio('sounds/loseSound.mp3');\n\n//# sourceURL=webpack:///./lib/sounds.js?");
/***/ }),
/***/ "./lib/util.js":
/*!*********************!*\
!*** ./lib/util.js ***!
\*********************/
/*! exports provided: sleep, createPlayerHand, renderCard, renderCardsAfterSplit, renderBankrolls, startRound, startHand, createBet, renderBet, renderHandValue, renderHandValuesAfterSplit, checkTurnStatus, endTurn, resetGame, clearPlayerCards, asyncForEach */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"sleep\", function() { return sleep; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createPlayerHand\", function() { return createPlayerHand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"renderCard\", function() { return renderCard; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"renderCardsAfterSplit\", function() { return renderCardsAfterSplit; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"renderBankrolls\", function() { return renderBankrolls; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"startRound\", function() { return startRound; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"startHand\", function() { return startHand; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"createBet\", function() { return createBet; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"renderBet\", function() { return renderBet; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"renderHandValue\", function() { return renderHandValue; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"renderHandValuesAfterSplit\", function() { return renderHandValuesAfterSplit; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"checkTurnStatus\", function() { return checkTurnStatus; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"endTurn\", function() { return endTurn; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"resetGame\", function() { return resetGame; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"clearPlayerCards\", function() { return clearPlayerCards; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"asyncForEach\", function() { return asyncForEach; });\n/* harmony import */ var _hand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./hand */ \"./lib/hand.js\");\n/* harmony import */ var _player__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./player */ \"./lib/player.js\");\n/* harmony import */ var _game__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./game */ \"./lib/game.js\");\n/* harmony import */ var _shoe__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./shoe */ \"./lib/shoe.js\");\n/* harmony import */ var _messages__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./messages */ \"./lib/messages.js\");\n/* harmony import */ var _sounds__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./sounds */ \"./lib/sounds.js\");\n\n\n\n\n\n\n\n\nconst sleep = ms => {\n return new Promise(resolve => setTimeout(resolve, ms));\n};\n\nconst createPlayerHand = (currentHandIndex, split) => {\n const hand = document.createElement('div');\n\n hand.id = `player-card-container-${currentHandIndex}`;\n hand.className = 'player-card-container';\n document.getElementById('player-card-area').appendChild(hand);\n\n if (split) {\n const cardContainers = Array.from(document.getElementsByClassName('player-card-container')).reverse();\n cardContainers.forEach((container, idx) => {\n container.id = `player-card-container-${idx}`;\n });\n }\n};\n\nconst renderCard = (card, hand, type, double, currentHandIndex) => {\n if (type === 'player') {\n const container = document.getElementById(`player-card-container-${currentHandIndex}`);\n if (double) {\n container.appendChild(createPlayerCard(card, hand, double));\n } else {\n container.appendChild(createPlayerCard(card, hand));\n }\n } else {\n document.getElementById('dealer-card-container').appendChild(createDealerCard(card, hand, type));\n }\n};\n\nconst renderCardsAfterSplit = (game, hands) => {\n clearPlayerCards();\n hands.forEach((hand, idx) => {\n hand.cards.forEach((card, cardIdx) => {\n if (hand.isDoubled && cardIdx === 2) {\n renderCard(card, hand, 'player', 'doubled', idx);\n } else {\n renderCard(card, hand, 'player', null, idx);\n }\n });\n createBet(idx);\n renderBet(game, idx);\n });\n};\n\nconst createPlayerCard = (card, hand, double) => {\n const newCard = document.createElement('div');\n card.suit === 'h' || card.suit === 'd' ? newCard.className = 'player-card red-card' : newCard.className = 'player-card black-card';\n\n if (double) {\n newCard.style.transform = 'rotate(90deg)';\n newCard.style.bottom = '70px';\n newCard.style.left = '-120px';\n } else {\n const cardNumber = hand.cards.lastIndexOf(card);\n newCard.style.bottom = `${15 * cardNumber}px`;\n newCard.style.left = `${-70 * cardNumber}px`;\n }\n\n const cardRankTop = document.createElement('div');\n cardRankTop.className = 'card-rank card-rank-top';\n cardRankTop.innerHTML = card.rank;\n if (card.rank === '10') {\n cardRankTop.style.left = '2px';\n }\n\n const cardSuit = document.createElement('div');\n cardSuit.className = 'card-suit';\n if (card.suit === 'h') {\n cardSuit.innerHTML = `♥`;\n } else if (card.suit === 'd') {\n cardSuit.innerHTML = `♦`;\n } else if (card.suit === 's') {\n cardSuit.innerHTML = `♠`;\n } else {\n cardSuit.innerHTML = `♣`;\n }\n\n const cardRankBottom = document.createElement('div');\n cardRankBottom.className = 'card-rank card-rank-bottom';\n cardRankBottom.innerHTML = card.rank;\n if (card.rank === '10') {\n cardRankBottom.style.right = '2px';\n }\n\n newCard.appendChild(cardRankTop);\n newCard.appendChild(cardSuit);\n newCard.appendChild(cardRankBottom);\n\n return newCard;\n};\n\nconst createDealerCard = (card, hand, type) => {\n const flippedCardContainer = document.createElement('div');\n flippedCardContainer.className = 'flipped-card-container';\n\n const newCard = document.createElement('div');\n newCard.className = 'card';\n if (type === 'dealer-facedown') {\n newCard.id = 'flipped';\n }\n\n const cardFront = document.createElement('figure');\n card.suit === 'h' || card.suit === 'd' ? cardFront.className = 'front red-card' : cardFront.className = 'front black-card';\n\n const cardRankTop = document.createElement('div');\n cardRankTop.className = 'card-rank card-rank-top';\n cardRankTop.innerHTML = card.rank;\n\n const cardSuit = document.createElement('div');\n cardSuit.className = 'card-suit';\n if (card.suit === 'h') {\n cardSuit.innerHTML = `♥`;\n } else if (card.suit === 'd') {\n cardSuit.innerHTML = `♦`;\n } else if (card.suit === 's') {\n cardSuit.innerHTML = `♠`;\n } else {\n cardSuit.innerHTML = `♣`;\n }\n\n const cardRankBottom = document.createElement('div');\n cardRankBottom.className = 'card-rank card-rank-bottom';\n cardRankBottom.innerHTML = card.rank;\n\n const cardBack = document.createElement('figure');\n cardBack.className = 'back';\n\n cardFront.appendChild(cardRankTop);\n cardFront.appendChild(cardSuit);\n cardFront.appendChild(cardRankBottom);\n\n newCard.appendChild(cardFront);\n newCard.appendChild(cardBack);\n\n flippedCardContainer.appendChild(newCard);\n\n return flippedCardContainer;\n};\n\nconst renderBankrolls = game => {\n document.getElementById('player-bankroll').innerHTML = `$${game.player.bankroll}`;\n document.getElementById('dealer-bankroll').innerHTML = `$${game.dealer.bankroll}`;\n};\n\nconst startRound = async game => {\n resetRound(game);\n\n if (game.shoe.cards.length < 100) {\n Object(_messages__WEBPACK_IMPORTED_MODULE_4__[\"flashShuffleMessage\"])();\n game.shoe = new _shoe__WEBPACK_IMPORTED_MODULE_3__[\"default\"]();\n await sleep(2000);\n game.shoe.shuffle();\n game.count = 0;\n const count = game.countToString();\n const decks = Math.round(parseFloat(game.shoe.cards.length / 52));\n let trueCount = Math.round(parseFloat(count / decks));\n trueCount = trueCount > 0 ? `+${trueCount}` : trueCount;\n document.getElementById('count').innerHTML = `${count}`;\n document.getElementById('decks-remaining').innerHTML = `${decks}`;\n document.getElementById('true-count').innerHTML = `${trueCount}`;\n }\n\n createPlayerHand(game.player.currentHandIndex);\n createBet(game.player.currentHandIndex);\n requestBet(game);\n};\n\nconst requestBet = game => {\n document.getElementById('bet-buttons').style.display = 'initial';\n};\n\nconst startHand = async game => {\n renderBet(game, game.player.currentHandIndex);\n renderBankrolls(game);\n game.dealCards();\n\n document.getElementById('bet-buttons').style.display = 'none';\n await sleep(2000);\n renderHandValue(game.player);\n\n game.player.hands.forEach(hand => {\n if (hand.checkForBlackjack()) {\n hand.isBlackjack = true;\n }\n });\n\n if (game.dealer.hasBlackjack()) {\n game.dealer.playTurn(game, game.shoe);\n } else {\n if (game.player.currentHand.cards[0].rank !== game.player.currentHand.cards[1].rank || game.player.currentHand.cards.length !== 2) {\n document.getElementById('split-button').style.display = 'none';\n }\n document.getElementById('action-buttons').style.display = 'block';\n\n game.player.hands.forEach(hand => {\n if (hand.isBlackjack) {\n Object(_messages__WEBPACK_IMPORTED_MODULE_4__[\"flashBlackjackMessage\"])();\n }\n });\n\n if (game.player.currentHand.isBlackjack) {\n _sounds__WEBPACK_IMPORTED_MODULE_5__[\"blackjackSound\"].play();\n game.player.nextHand(game);\n }\n }\n};\n\nconst createBet = handIndex => {\n const playerBet = document.createElement('div');\n playerBet.className = 'player-bet';\n playerBet.id = `player-bet-${handIndex}`;\n document.getElementById(`player-card-container-${handIndex}`).appendChild(playerBet);\n};\n\nconst renderBet = (game, handIndex) => {\n document.getElementById(`player-bet-${handIndex}`).innerHTML = `Bet: $${game.player.hands[handIndex].bet}`;\n};\n\nconst renderHandValue = player => {\n if (player instanceof _player__WEBPACK_IMPORTED_MODULE_1__[\"Dealer\"]) {\n const dealerHandValue = Array.from(document.getElementsByClassName('dealer-hand-value'))[0];\n dealerHandValue.innerHTML = player.hand.value;\n dealerHandValue.style.display = 'initial';\n } else {\n let playerHandValue = document.getElementById(`player-hand-value-${player.currentHandIndex}`);\n if (!playerHandValue) {\n playerHandValue = document.createElement('div');\n playerHandValue.className = 'player-hand-value hand-value';\n playerHandValue.id = `player-hand-value-${player.currentHandIndex}`;\n }\n playerHandValue.innerHTML = player.currentHand.value;\n playerHandValue.style.border = '1px solid white';\n document.getElementById(`player-card-container-${player.currentHandIndex}`).appendChild(playerHandValue);\n }\n};\n\nconst renderHandValuesAfterSplit = hands => {\n const handContainers = Array.from(document.getElementsByClassName('player-card-container')).reverse();\n\n handContainers.forEach((hand, idx) => {\n let playerHandValue = document.createElement('div');\n playerHandValue.className = 'player-hand-value hand-value';\n playerHandValue.id = `player-hand-value-${idx}`;\n playerHandValue.innerHTML = hands[idx].value;\n hand.appendChild(playerHandValue);\n });\n};\n\nconst checkTurnStatus = async (game, player) => {\n const hand = game.player.currentHand;\n if (hand.isBusted()) {\n document.getElementById('basic-strategy-text').innerHTML = 'Waiting For Your Turn...';\n document.getElementById('basic-strategy').innerHTML = '';\n hand.busted = true;\n Object(_messages__WEBPACK_IMPORTED_MODULE_4__[\"flashBustMessage\"])();\n document.getElementById('action-buttons').style.display = 'none';\n await sleep(1000);\n document.getElementById(`player-bet-${player.currentHandIndex}`).style.color = 'red';\n document.getElementById(`player-hand-value-${player.currentHandIndex}`).style.color = 'red';\n Object(_messages__WEBPACK_IMPORTED_MODULE_4__[\"flashPayout\"])('dealer', hand.bet, '+');\n game.dealer.bankroll += hand.bet;\n renderBankrolls(game);\n player.checkIfBusted();\n player.nextHand(game);\n } else if (hand.isDoubled) {\n player.nextHand(game);\n }\n};\n\nconst endTurn = game => {\n document.getElementById('action-buttons').style.display = 'none';\n document.getElementById('basic-strategy-text').innerHTML = 'Waiting For Your Turn...';\n document.getElementById('basic-strategy').innerHTML = '';\n game.dealer.playTurn(game, game.shoe);\n};\n\nconst resetRound = game => {\n game.player.hands = [new _hand__WEBPACK_IMPORTED_MODULE_0__[\"default\"]()];\n game.player.bet = 0;\n game.player.currentHandIndex = 0;\n game.player.currentHand = game.player.hands[game.player.currentHandIndex];\n game.player.isBusted = false;\n\n game.dealer.hand = new _hand__WEBPACK_IMPORTED_MODULE_0__[\"default\"]();\n\n document.getElementById('message').innerHTML = '';\n document.getElementById('double-down-button').style.display = 'initial';\n document.getElementById('split-button').style.display = 'initial';\n document.getElementById('bet-button-title').style.display = 'block';\n document.getElementById('play-again-button').style.display = 'none';\n const playerBet = document.getElementById('player-bet');\n if (playerBet) {\n playerBet.remove();\n }\n\n Array.from(document.getElementsByClassName('alternate-bet-buttons')).forEach(button => button.style.display = 'none');\n document.getElementById('bet-buttons-container').style.display = 'initial';\n\n Array.from(document.getElementsByClassName('card-container')).forEach(cardContainer => {\n while (cardContainer.firstChild) {\n cardContainer.removeChild(cardContainer.firstChild);\n }\n });\n\n const playerCardArea = document.getElementById('player-card-area');\n while (playerCardArea.firstChild) {\n playerCardArea.removeChild(playerCardArea.firstChild);\n }\n\n document.getElementById('dealer-hand-value').innerHTML = null;\n};\n\nconst resetGame = game => {\n resetRound(game);\n game.dealer = new _player__WEBPACK_IMPORTED_MODULE_1__[\"Dealer\"]('Dealer');\n game.player = new _player__WEBPACK_IMPORTED_MODULE_1__[\"Player\"]('Player');\n game.shoe = new _shoe__WEBPACK_IMPORTED_MODULE_3__[\"default\"]();\n game.count = 0;\n const count = game.countToString();\n const decks = Math.round(parseFloat(game.shoe.cards.length / 52));\n let trueCount = Math.round(parseFloat(count / decks));\n trueCount = trueCount > 0 ? `+${trueCount}` : trueCount;\n document.getElementById('count').innerHTML = `${count}`;\n document.getElementById('decks-remaining').innerHTML = `${decks}`;\n document.getElementById('true-count').innerHTML = `${trueCount}`;\n\n game.shoe.shuffle();\n renderBankrolls(game);\n};\n\nconst clearPlayerCards = () => {\n Array.from(document.getElementsByClassName('player-card-container')).forEach(cardContainer => {\n while (cardContainer.firstChild) {\n cardContainer.removeChild(cardContainer.firstChild);\n }\n });\n};\n\nconst asyncForEach = async (array, callback) => {\n for (let index = 0; index < array.length; index++) {\n await callback(array[index], index, array);\n }\n};\n\n//# sourceURL=webpack:///./lib/util.js?");
/***/ })
/******/ });