Guest User

Untitled

a guest
Nov 18th, 2020
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.17 KB | None | 0 0
  1. // localStorage.clear();
  2. // localStorage.amount_player = 3501;
  3. class Blackjack {
  4. constructor(bj_obj) {
  5. this.cards_dealer = bj_obj.cards_dealer;
  6. this.cards_player = bj_obj.cards_player;
  7. this.bet_parent = bj_obj.bet_parent;
  8. this.bet = bj_obj.bet;
  9. this.more = bj_obj.more;
  10. this.leave = bj_obj.leave;
  11. this.double = bj_obj.double;
  12. this.split = bj_obj.split;
  13. this.control = [this.bet_parent, this.more.parentNode.parentNode];
  14. this.admin_list = bj_obj.admin_list;
  15. this.winner = {};
  16. this.balance = bj_obj.balance;
  17. }
  18.  
  19. game_start() {
  20. console.log('Game start');
  21.  
  22. this.arr_bet = [];
  23.  
  24. if ( localStorage.amount_player ) {
  25. this.balance.innerText = parseInt(localStorage.amount_player).toLocaleString('en-US');
  26. if ( parseInt(localStorage.amount_player) == 0 ) {
  27. this.control.forEach(item => {
  28. if ( !item.classList.contains('hidden') ) {
  29. item.classList.add('hidden');
  30. }
  31. })
  32. localStorage.clear();
  33. localStorage.setItem('amount_player', 3500);
  34. }
  35. } else {
  36. localStorage.clear();
  37. localStorage.setItem('amount_player', 3500);
  38. }
  39.  
  40. for ( let bet of this.bet ) {
  41. bet.addEventListener('click', (e) => {
  42. const bet_value = e.target;
  43.  
  44. this.arr_bet.push(parseInt(bet_value.innerText));
  45. this.bets = this.arr_bet.reduce((sum, current) => {
  46. return sum + current;
  47. }, 0);
  48. this.admin_list.children[0].innerText = 'Ставка: ' + this.bets.toLocaleString('en-US') + '$';
  49.  
  50. this.inited || setTimeout((e) => {
  51. const balance_update = parseInt(localStorage.amount_player) - this.bets;
  52.  
  53. if ( balance_update < 0 ) {
  54. this.bets = parseInt(localStorage.amount_player);
  55. this.admin_list.children[0].innerText = 'Ставка: ' + this.bets.toLocaleString('en-US') + '$';
  56. this.balance.innerText = 0;
  57.  
  58. localStorage.amount_player = 0;
  59. } else {
  60. this.balance.innerText = balance_update;
  61. localStorage.amount_player = parseInt(localStorage.amount_player) - this.bets;
  62. }
  63.  
  64. console.log('0', localStorage.amount_player);
  65.  
  66. this.bet_parent.classList.add('hidden');
  67. this.distribution_of_cards();
  68. }, 100);
  69.  
  70. this.inited = 1;
  71. });
  72. }
  73. }
  74.  
  75. generate_cards(user, count) {
  76.  
  77. console.log(user);
  78. const cards = ['A', 'K', 'Q', 'J', 10, 9, 8, 7, 6, 5, 4, 3, 2];
  79. const cards_obj = {
  80. diamonds: [cards, 'diamonds', 1],
  81. clubs: [cards, 'clubs', 2],
  82. hearts: [cards, 'hearts', 3],
  83. spades: [cards, 'spades', 4],
  84. }
  85.  
  86. for ( let i = 0; i < count; i++ ) {
  87. let random = Math.floor(Math.random() * (3 - 0 + 1)) + 0;
  88. let random_suit = cards_obj[Object.keys(cards_obj)[random]];
  89. let random_card = Math.floor(Math.random() * (random_suit[0].length - 1)) + 0;
  90.  
  91. user.push({suit: random_suit[2], card: random_suit[0][random_card]});
  92. }
  93. }
  94.  
  95. distribution_of_cards() {
  96. const dealer = [];
  97. const pre_dealer = [];
  98. const player = [];
  99.  
  100. this.generate_cards(dealer, 2);
  101. this.generate_cards(player, 2);
  102.  
  103. const board = {
  104. dealer: dealer,
  105. player: player,
  106. }
  107.  
  108. this.amount_cards(board);
  109.  
  110. pre_dealer.push(board.dealer[0]);
  111.  
  112. this.cards_update(pre_dealer, this.cards_dealer);
  113. this.cards_update(board.player, this.cards_player);
  114.  
  115. this.admin_list.children[1].innerText = 'Игрок: ' + board.amount_player;
  116. this.admin_list.children[2].innerText = 'Дилер: ' + board.amount_dealer;
  117. }
  118.  
  119. amount_cards(board) {
  120. const cards_obj = {
  121. A: ["A", 11],
  122. K: ["K", 10],
  123. Q: ["Q", 10],
  124. J: ["J", 10],
  125. }
  126. let amount = 0;
  127. let amount_dealer = amount;
  128. let amount_player = amount;
  129.  
  130. let cards_player = [];
  131. let cards_dealer = [];
  132.  
  133. board.player.forEach(obj => {
  134. cards_player.push(obj.card);
  135. })
  136.  
  137. board.dealer.forEach(obj => {
  138. cards_dealer.push(obj.card);
  139. })
  140.  
  141. board.amount_player = this.amount_func(cards_player, amount_player, cards_obj);
  142. board.amount_dealer = this.amount_func(cards_dealer, amount_dealer, cards_obj);
  143.  
  144. if ( cards_dealer ) {
  145. const last_card = cards_dealer[cards_dealer.length - 1];
  146.  
  147. if ( typeof(last_card) == "string" ) {
  148. for ( let item of Object.keys(cards_obj) ) {
  149. if ( last_card == cards_obj[item][0] ) {
  150. board.amount_dealer = board.amount_dealer - cards_obj[item][1];
  151. board.real_amount_dealer = board.amount_dealer + cards_obj[item][1];
  152. }
  153. }
  154. } else {
  155. board.amount_dealer = board.amount_dealer - last_card;
  156. board.real_amount_dealer = board.amount_dealer + last_card;
  157. }
  158. }
  159.  
  160. this.choice(board, cards_obj, board.real_amount_dealer);
  161. }
  162.  
  163. amount_func(user, amount, cards_obj) {
  164. user.forEach(item => {
  165. if ( typeof(item) == "string" ) {
  166. for ( let card of Object.keys(cards_obj) ) {
  167. if ( item == cards_obj[card][0] ) {
  168. amount = amount + cards_obj[card][1];
  169. }
  170. }
  171. } else if ( typeof(item) == "number" ) {
  172. amount = amount + item;
  173. }
  174. })
  175.  
  176. return amount;
  177. }
  178.  
  179. create_cards(user, card, color) {
  180. const li = document.createElement('li');
  181. li.setAttribute('data-aos', 'flip-left');
  182. li.innerText = card.card;
  183. li.className = `bj-board__item ${color}`,
  184. user.appendChild(li);
  185. }
  186.  
  187. cards_update(cards, user) {
  188. cards.forEach(card => {
  189. if ( card.suit == 1 ) {
  190. this.create_cards(user, card, 'diamonds');
  191. } else if ( card.suit == 2 ) {
  192. this.create_cards(user, card, 'clubs');
  193. } else if ( card.suit == 3 ) {
  194. this.create_cards(user, card, 'hearts');
  195. } else if ( card.suit == 4 ) {
  196. this.create_cards(user, card, 'spades');
  197. }
  198. })
  199. }
  200.  
  201. wait_end(board) {
  202. setTimeout((e) => {
  203. this.game_end(board);
  204. }, 1000);
  205. }
  206.  
  207. amount_check_player(board) {
  208. if ( board.amount_player > 21 ) {
  209. this.winner.amount_winner = board.real_amount_dealer;
  210. this.control[0].classList.add('hidden');
  211. this.wait_end(board);
  212. } else if ( board.amount_player == 21 ) {
  213. this.winner.amount_winner = board.amount_player;
  214. this.control[0].classList.add('hidden');
  215. this.wait_end(board);
  216. }
  217. }
  218.  
  219. amount_check_dealer(board) {
  220. if ( board.real_amount_dealer > 21 ) {
  221. this.winner.amount_winner = board.amount_player;
  222. this.wait_end(board);
  223. } else if ( board.real_amount_dealer == 21 ) {
  224. this.winner.amount_winner = board.real_amount_dealer;
  225. this.wait_end(board);
  226. } else if ( board.real_amount_dealer > board.amount_player ) {
  227. this.winner.amount_winner = board.real_amount_dealer;
  228. this.wait_end(board);
  229. } else if ( board.real_amount_dealer == board.amount_player ) {
  230. this.winner.tie = true;
  231. this.wait_end(board);
  232. } else {
  233. this.winner.amount_winner = board.amount_player;
  234. this.wait_end(board);
  235. }
  236. }
  237.  
  238. add_card(board, user, suit, cards_user, cards_obj) {
  239. let amount = 0;
  240. let amount_users = amount;
  241. const li = document.createElement('li');
  242.  
  243. board.amount_users = this.amount_func(user, amount_users, cards_obj);
  244. li.innerText = user[user.length - 1];
  245.  
  246. suit.forEach(color => {
  247. if ( color == 1 ) {
  248. li.className = 'bj-board__item diamonds';
  249. } else if ( color == 2 ) {
  250. li.className = 'bj-board__item clubs';
  251. } else if ( color == 3 ) {
  252. li.className = 'bj-board__item hearts';
  253. } else if ( color == 4 ) {
  254. li.className = 'bj-board__item spades';
  255. }
  256. })
  257.  
  258. li.setAttribute('data-aos', 'flip-left');
  259. cards_user.appendChild(li);
  260.  
  261. return board.amount_users;
  262. }
  263.  
  264. mores(board, cards_obj) {
  265. const cards_player = [];
  266. const suit_player = [];
  267.  
  268. this.generate_cards(board.player, 1);
  269.  
  270. board.player.forEach(obj => {
  271. cards_player.push(obj.card);
  272. suit_player.push(obj.suit);
  273. });
  274.  
  275. board.amount_player = this.add_card(board, cards_player, suit_player, this.cards_player, cards_obj);
  276.  
  277. this.admin_list.children[1].innerText = 'Игрок: ' + board.amount_player;
  278. this.amount_check_player(board);
  279.  
  280. if ( board.amount_player >= 21 ) {
  281. this.more.classList.add('inactive');
  282. }
  283. }
  284.  
  285. leaves(board, cards_obj) {
  286. for ( let btn of this.control[1].children[0].children ) {
  287. btn.classList.add('inactive');
  288. }
  289.  
  290. for ( let item of Object.keys(this.cards_dealer.children) ) {
  291. this.cards_dealer.removeChild(this.cards_dealer.children[item]);
  292. }
  293.  
  294. this.cards_update(board.dealer, this.cards_dealer);
  295.  
  296. if ( board.real_amount_dealer < 17 ) {
  297. for ( let i = board.real_amount_dealer; i < 17; ) {
  298. if ( board.real_amount_dealer < 17 ) {
  299. const cards_dealer = [];
  300. const suit_dealer = [];
  301.  
  302. this.generate_cards(board.dealer, 1);
  303.  
  304. board.dealer.forEach(obj => {
  305. cards_dealer.push(obj.card);
  306. suit_dealer.push(obj.suit);
  307. });
  308.  
  309. board.real_amount_dealer = this.add_card(board, cards_dealer, suit_dealer, this.cards_dealer, cards_obj);
  310. this.admin_list.children[2].innerText = 'Дилер: ' + board.real_amount_dealer;
  311.  
  312. } else {
  313. this.amount_check_dealer(board);
  314. break;
  315. }
  316. }
  317. } else {
  318. this.amount_check_dealer(board);
  319. this.admin_list.children[2].innerText = 'Дилер: ' + board.real_amount_dealer;
  320. }
  321. }
  322.  
  323. dual(board, cards_obj) {
  324. this.mores(board, cards_obj);
  325. this.bets = this.bets * 2;
  326. localStorage.amount_player = parseInt(localStorage.amount_player) - this.bets / 2;
  327. this.admin_list.children[0].innerText = 'Ставка: ' + this.bets.toLocaleString('en-US') + '$';
  328. }
  329.  
  330. rift(board, cards_obj) {
  331. console.log();
  332. }
  333.  
  334. test(board, cards_obj, button, func) {
  335. button.addEventListener('click', (e) => {
  336. if ( !button.classList.contains('inactive') ) {
  337. func(board, cards_obj);
  338. // this.double.classList.add('inactive');
  339. }
  340. });
  341. }
  342.  
  343. choice(board, cards_obj) {
  344. this.amount_check_player(board);
  345.  
  346. if ( board.amount_player < 21 ) {
  347. this.control[1].classList.remove('hidden');
  348.  
  349. const cards = [];
  350. const picture_cards = [];
  351.  
  352. if ( !(parseInt(localStorage.amount_player) >= this.bets * 2) ) {
  353. this.double.classList.add('inactive');
  354. }
  355.  
  356. board.player.forEach(item => {
  357. cards.push(item.card);
  358. })
  359.  
  360. cards.forEach(card => {
  361. if ( typeof(card) == "string" ) {
  362. for ( let item of Object.keys(cards_obj) ) {
  363. if ( card == cards_obj[item][0] ) {
  364. picture_cards.push(cards_obj[item][1]);
  365. }
  366. }
  367. } else if ( typeof(card) == "number" ) {
  368. if ( cards[0] != cards[1] ) {
  369. this.split.classList.add('inactive');
  370. }
  371. }
  372. })
  373.  
  374. if ( picture_cards[0] != picture_cards[1] ) {
  375. this.split.classList.add('inactive');
  376. }
  377.  
  378. this.test(board, cards_obj, this.more, this.mores);
  379. // this.more.addEventListener('click', (e) => {
  380. // if ( !this.more.classList.contains('inactive') ) {
  381. // this.mores(board, cards_obj);
  382. // this.double.classList.add('inactive');
  383. // }
  384. // });
  385.  
  386. this.double.addEventListener('click', (e) => {
  387. if ( !this.double.classList.contains('inactive') ) {
  388. this.dual(board, cards_obj);
  389. this.double.classList.add('inactive');
  390. }
  391. });
  392.  
  393. this.split.addEventListener('click', (e) => {
  394. this.rift(board, cards_obj);
  395. })
  396.  
  397. this.leave.addEventListener('click', (e) => {
  398. if ( !this.leave.classList.contains('inactive') ) {
  399. this.leaves(board, cards_obj);
  400. }
  401. });
  402. }
  403. }
  404.  
  405. game_end(board) {
  406. const arr_winner = {
  407. dealer: ["Рука дилера оказалась сильнее!", board.real_amount_dealer],
  408. player: ["Рука игрока оказалась сильнее!", board.amount_player],
  409. };
  410.  
  411. if ( this.winner.tie ) {
  412. this.admin_list.children[3].innerText = "Ничья.";
  413. localStorage.amount_player = parseInt(localStorage.amount_player) + this.bets;
  414. console.log(localStorage.amount_player);
  415. } else {
  416. for ( let win of Object.keys(arr_winner) ) {
  417. if ( arr_winner[win][1] == this.winner.amount_winner ) {
  418. this.admin_list.children[3].innerText = "Победитель: " + arr_winner[win][0];
  419.  
  420. if ( arr_winner[win][1] == board.amount_player ) {
  421. if ( localStorage.amount_player ) {
  422. localStorage.amount_player = this.bets * 2 + parseInt(localStorage.amount_player);
  423. this.balance.innerText = localStorage.amount_player;
  424. } else {
  425. localStorage.amount_player = this.balance.innerText;
  426. }
  427. } else {
  428. this.balance.innerText = localStorage.amount_player;
  429.  
  430. if ( parseInt(localStorage.amount_player) <= 0 ) {
  431. localStorage.amount_player = 0;
  432. this.balance.innerText = 0;
  433. } else {
  434. this.balance.innerText = localStorage.amount_player;
  435. }
  436. }
  437. }
  438. }
  439. }
  440.  
  441. console.log('end', localStorage.amount_player);
  442.  
  443. // setTimeout(() => {
  444. // location.reload();
  445. // }, 2000);
  446. }
  447. }
  448.  
  449. const bj_obj = {
  450. cards_dealer: document.querySelector('.dealer'),
  451. cards_player: document.querySelector('.player'),
  452. bet_parent: document.querySelector('.bj-board__bet'),
  453. bet: document.querySelectorAll('.bj-board__bet > ul > li'),
  454. more: document.querySelector('.bj-control__more'),
  455. leave: document.querySelector('.bj-control__leave'),
  456. double: document.querySelector('.bj-control__double'),
  457. split: document.querySelector('.bj-control__split'),
  458. admin_list: document.querySelector('.bj-admin__list'),
  459. balance: document.querySelector('.bj-balance'),
  460. }
  461.  
  462. let blackjack = new Blackjack(bj_obj);
  463. blackjack.game_start();
  464. // blackjack.b();
Advertisement
Add Comment
Please, Sign In to add comment