Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.01.2016, 20:58
Профессор
Отправить личное сообщение для Keramet Посмотреть профиль Найти все сообщения от Keramet
 
Регистрация: 30.12.2015
Сообщений: 194

Реализация покера! Хочется узнать мнение специалистов...
Возможно это громкое слово - "реализация". Ну просто в качестве тренировки (т.к. изучаю ДжС только пару недель), хочется попробовать написать какой-то реальный проект, опробовав прототипы. Вот придумал себе задачку про покер:
Задаётся количество игроков, для каждого раздаются карты, вычисляются комбинации (тройка, каре, фул хаус и т.д.). Дальнейшая функциональность определится со временем.

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

Последний раз редактировалось Keramet, 03.01.2016 в 21:11.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск