Реализация покера! Хочется узнать мнение специалистов...
Возможно это громкое слово - "реализация". Ну просто в качестве тренировки (т.к. изучаю ДжС только пару недель), хочется попробовать написать какой-то реальный проект, опробовав прототипы. Вот придумал себе задачку про покер:
Задаётся количество игроков, для каждого раздаются карты, вычисляются комбинации (тройка, каре, фул хаус и т.д.). Дальнейшая функциональность определится со временем. Вот кое-что набросал. Сейчас занимаюсь определением комбинаций - функция isCombination(). Хотелось бы услышать комментарии, предложения, замечания ... function Hand(playerName) { this.playerName = playerName; this.cards = []; // карты представляю номерами от 0 до 51, потом по номеру определяю ранг и масть this.getCards(); } Hand.prototype = { constructor : Hand, isStarted : false, availableCardsID : [], // карты в колоде, доступные к раздаче playersQuan : 0, ALL_RANKS : ["2", "3", "4", "5", "6", "7", "8", "9", "10", "В", "Д", "К", "Т"], ALL_SUITS : { name: ["пика", "трефа", "бубна", "черви"], code: ["♠", "♣", "♦", "♥"] } }; Hand.prototype.getCards = function() { if (this.cards.length === 0) { if ( !this.isStarted ) Hand.prototype.init(); for (var i = 1; i <= 5; i++) { this.cards.push( this.getRandom() ); // this.cards.push( i ); } } else alert("Вы уже получили карты!"); Hand.prototype.playersQuan++; }; Hand.prototype.init = function() { for (var i = 0; i < 52; i++) { Hand.prototype.availableCardsID[i] = i; } Hand.prototype.isStarted = true; }; Hand.prototype.getRandom = function() { var avC = Hand.prototype.availableCardsID.length; // количество доступных к раздаче карт var rand = Math.floor( Math.random() * avC ) ; var cardID = Hand.prototype.availableCardsID[ rand ]; Hand.prototype.availableCardsID.splice( rand, 1 ); return cardID; }; Hand.prototype.showCards = function() { var $div = $("<div>"); $div.attr("id", this.playerName); var $p = $("<p>"); for (var i = 0; i < this.cards.length; i++) { var card = this.getCardByID( this.cards[i] ); var $span = $("<span>" + this.ALL_RANKS[card[0]] + "" + this.ALL_SUITS.code[card[1]] + "</span>"); if (card[1] > 1) $span.attr("class", "red"); $p.append($span); console.log(this.ALL_RANKS[card[0]] + " " + this.ALL_SUITS.name[card[1]]); } $div.append($p); $("main").append($div); this.isCombination(); }; // возвращает карту в виде массива [r, s] (r - индекс в массиве ALL_RANKS; s - индекс в массивах ALL_SUITS) Hand.prototype.getCardByID = function (id) { var suit = Math.floor(id / 13), rank = id % 13; return [rank, suit]; }; Hand.prototype.isCombination = function () { if (this.cards.length === 0) alert(this.playerName + ", получите карты"); else alert(this.playerName + ": возможно, что-то есть :)"); }; |
Часовой пояс GMT +3, время: 23:20. |