Возможно это громкое слово - "реализация". Ну просто в качестве тренировки (т.к. изучаю ДжС только пару недель), хочется попробовать написать какой-то реальный проект, опробовав прототипы. Вот придумал себе задачку про покер:
Задаётся количество игроков, для каждого раздаются карты, вычисляются комбинации (тройка, каре, фул хаус и т.д.). Дальнейшая функциональность определится со временем.
Вот кое-что набросал. Сейчас занимаюсь определением комбинаций - функция 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 + ": возможно, что-то есть :)");
};