Видеопокер
Следующая функция handvalue начинается с того, что копирует массив cards и помешает его в массив hand. Затем она сортирует полученный массив с использованием функции compareHands (1).
Например, если на руках у игрока имеются карты ["h4", "d5", "c2", "s3", "h6"], после сортировки массив будет выглядеть следующим образом: ["с2", "s3", "h4", "d5", "h6"]. Так гораздо проще узнать, находится ли на руках у игрока "стрит".
"Стрит" определяется путем просмотра каждой карты и выяснением, больше ли ранг этой карты на единицу ранга карты предыдущей (2). Если такое условие выполняется для всего массива, то тогда на руках у игрока "стрит".
Таким образом будет определен не только "стрит": когда "стрит" начинается с десятки и заканчивается тузом, то это "флэш стрит". Произошло ли так или нет, можно определить с помощью простого теста (3).
Затем вы проверяете, одной ли масти карты (4). Для этого все карты, кроме первой, сравниваются с первой. Если масть всех карт совпадает с мастью первой карты, значит, все карты одной масти.
На следующем шаге создается массив counts, в котором будет храниться число карт одинакового достоинства (5). В этом массиве находится 14 элементов, каждый из которых будет отвечать за число карт определенного ранга, имеющихся у игрока. Первый элемент массива не используется, так как нет карт с нулевым рангом.
Некоторые люди думают, что стритом можно считать и такой набор карт, в котором задействован туз. Например, дама, король, туз, двойка и тройка. Это не стрит, а всего лишь его дополнительная вариация, используемая в любительских играх в покер. Туз может быть использован и как первая карта стрита (туз, двойка, тройка, четверка, пятерка), и как последняя (десять, валет, дама, король, туз), но только не в середине.
Например, если на руках туз, две тройки, четверка и валет, массив будет выглядеть следующим образом:
[0, 1, 0, 2, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0]Теперь, наконец, программа может начать определение расклада на руках у игрока. Просматривается массив counts и отмечаются все значения пары, тройки или четверки (6). Если один раз встречаются две карты одного достоинства, то у игрока пара. Если один раз встречается три карты одного достоинства, то у игрока тройка; если один раз встречается четыре карты одного достоинства, то – каре. Также можно дважды обнаружить две карты одного достоинства или пару и тройку. В первом случае будет две пары, а втором – фул хаус.
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
Затем проверяется, есть ли на руках пары с валетом или картами высшего достоинства (7). Обычно видеопокер отмечает только такие пары.
Следующий тест проверяет, есть ли в раскладе туз (8). Это будет нужно для определения флэш стрита. Если у игрока флэш стрит, и одна из карт – туз, то у него самый высший тип флэш стрита – флэш роял.
Теперь у функции есть весь набор значений логических переменных: straight, flush, hasAce, fourOfAKind, threeOfAKind, twoPair, pair, fullHouse и jackOrHigher. С их помощью определяется действительная ценность расклада, и возвращается символьная строка (9).
function handValue() { // Копируем и сортируем карты игрока. hand = cards.slice(); //(1) hand.sort(compareHands); // Создаем массив мастей и ранг с ов для более легкого доступа к ним suits = new Array(); nums = new Array(); for (i = 0; i < 5; i++) { suits.push(hand[i].substr(0, 1)); nums.push(Number(hand[i].substr(1, 2))); } //(2) Проверяем, расположены ли он р и по возрастанию straight = true; for (i = 0; i < 4; i++) { if (nums[i] + 1 != num[i + 1]) straight = false; } //(3) Ищем десятку, валета, даму, короля и туза if ((nums[0] == 1) and (nums[1] == 10) and (nums[2]) == 11) and (nums[3] == 12) and (nums[4] == 13)) straight = true; //(4) Выясняем, одной ли масти карты. flush = true; for (i = 1; i < 5; i++) { if (suits[i] != suits[0]) flush = false; } //(5) Создаем массив для подсчета, сколько карт одного // достоинства находится в раскладе. counts = new Array(); for (i = 0; i < 14; i++) { counts.push(0); } for (i = 0; i < 5; i++) { counts[nums[i]]++; } //(6) Используя массив counts, ищем совпадения pair = false; twoPair = false; threeOfAKind = false; fourOfAKind = false; for (i = 1; i < 14; i++) { // Найдена пара if (counts[i] == 2) { // Найдена вторая пара. if (pair) { twoPair = true; // Найдена только одна пара. } else { pair = true; } // Три карты одного достоинства } else if (counts[i] == 3) { threeOfAKind = true; // Четыре карты одн х ого достоинства. } else if (counts[i] == 4) { fourOfAKind = true; } } //(7) Проверяем, есть л ц и среди совпадающих карт валеты или // карты более высоко щ го ранга jackOrHigher = false; for (i = 1; i < 14; i++) { if ((i == 1) or (i > 10) and (counts[i] >= 2)) { jackOtHigher = true; } } //(8) Выясняем, является ли карта более высо к кого ранга тузом hasAce = false; if (counts[1] > 0) hasAce = true; //(9) Делаем вывод, какой расклад на руках у игрока. if (straight and flush and hasAce) { return("Royal Flush"); } else if (straight and flush) { return("Straight Flush"); } else if (fourOfAKind) { return("Four-Of-A-Kind"); } else if (pair and threeOfAKind) { return("Full House"); } else if (flush) { return("Flush"); } else if (straight) { return("Straight"); } else if (threeOfAKind) { return("Three-Of-A-Kind"); } else if (twoPair) { return("Two Pair"); } else if (pair and jaskOrHigher) { return("High Pair"); } else if (pair) { return("Low Pair"); } else { return("Nothing"); } }