Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
error_reporting(0);
допустим, напишем на этом алгоритме подсказчик для неопытного игрока.
просто "у вас 2 пары" — это он сможет понять и сам через полчаса знакомства с правилами игры — пользы никакой.
а вот "у вас 2 пары. ваша комбинация выиграет X% игр против N игроков" — уже надо будет и монте-карло и точный учёт старших карт.
function cardsCreation()
{
$arrayCards = [];
for($suit = 0; $suit < 4; $suit++) {
for($card = 2; $card <= 14; $card++) {
$arrayCards[] = $suit * 100 + $card;
}
}
shuffle($arrayCards);
return $arrayCards;
}
function pokerFlush(array $arrayCards) {
$suits = array_fill(0, 4, []);
foreach ($arrayCards as $card) { //создаю 4 массива, содержащих разные масти исходного массива
$suit = floor($card / 100);
$suites[$suit][] = $card;
}
//и 4 огромных ифа тоже станут не нужны
for($suit = 0; $suit < 4; $suit++) {
if (count($suits[$suit]) >= 5) {
...
return $result;
}
}
return 0;
}
Так ведь cardsCreation генерирует 7 карт, а не 52. Так что не так уж и много раз последнюю карту подбирать))
хотя вместо
if (1 == $multiplier) { //если множитель равен 1, добавляю к числу 100
$card = $card + 100;
} else if (2 == $multiplier) { //если множитель равен 2, добавляю к числу 200
$card = $card + 200;
} else if (3 == $multiplier) { //если множитель равен 3, добавляю к числу 300
$card = $card + 300;
}можно было написать
$card = $card + 100*$multiplierможно написать свою используя mt_rand, там всего-то строки 4.
*Только не mt_rand, а random_int. Небольшое уточнение.
$arr = array_slice($arr_description, 0, 42);
$description = implode(" ", $arr);
if (count($arr_description) > 42) {$description .= '...';};
function straight ( array $cards ) {
// убираем масти
$tmp = array_map(function ( $card ) {
return $card % 100;
});
// убираем пары
$tmp = array_unique($tmp);
// сортируем
rsort($tmp);
// добавляем туз как 1 в конец
if ( $tmp[0] == 14 ) {
$tmp[] = 1;
}
// проверяем разницу между текущей и +4 картой
// цикл закончится если индекс карты +4 выходит за пределы массива номиналов
for ( $i=0; $i+4<count($tmp); $i++ ) {
if ( abs($tmp[$i] - $tmp[$i+4]) == 4 ) {
// с этой карты начинается стрит
return $tmp[$i];
// наерное вам нужно будет уммножить на 1e+8
}
}
return 0;
}
Расчет приоритета комбинаций в техасском холдеме (покере) на PHP