Равенство нескольких чисел в разных комбинациях

Andronik

Новичок
Равенство нескольких чисел в разных комбинациях

Подскажите пожалуйста как можно идейно в программе реализовать следующее.
Напримере карточной игры. Есть 54 карты. В программе каждая карта соответствует своему номеру. Червы - от 1 до 13, пики 14 - 26, и остальные две масти.
Программа получает номера карт. Например 1,14,16,27,12.
Первые две карты одинаковые. Т.к. разница между картами +13.
Писать просто условиями типа if($x1 == $x2+13){echo 'пара';} просто кошмар. А если четвёртая карта того же достоинства, 27, ($x1 == X4+13*3).

Подскажите как организовать такую функцию.
 

denver

?>Скриптер
PHP:
функция гетМасть($num) {
    if (in_array($num, range(1,13)) return 'червы';
    if (in_array($num, range(14,26)) return 'пики';
    return 'другая масть';
}
функция гетДостоинство($num) {
   while ($num > 13) $num = $num - 13;
   if ($num == 1) return 'двойка';
   if ($num == 2) return 'тройка';
   ...
}
if (гетДостоинство($x1)==гетДостоинство($x2)) echo 'пара';
 

avm

Новичок
PHP:
<?php
$card_name = array(
    'масть' => array( 'червы', 'пики', 'бубны', 'крести' ),
    'достоинство' => array( 'двойка', 'тройка', 'четверка', 'пятерка', 'шестерка', 'семерка', 'восьмерка', 'девятка', 'десятка', 'валет', 'дама', 'король', 'туз'),
);

function card($num) { return array( (int)(($num - 1) % 13), (int)(($num - 1) / 13)); }

// проверка:
foreach( range(1,52) as $num ) {
    list($dostoinstvo,$mast) = card($num);
    echo $mast.": ".$card_name['масть'][$mast] ."; ";
    echo $dostoinstvo.": ".$card_name['достоинство'][$dostoinstvo]."\n";
}

// проверка сравнения:
list($card1_dost, $card1_mast) = card( 5 ); // карта 1
list($card2_dost, $card2_mast) = card( 18 ); // карта 2

if ( $card2_dost == $card1_dost ) echo "карты одного достоинства\n";

?>
-~{}~ 18.10.06 00:45:

кстати, карт - 52, а не 54... ;)
 

Andronik

Новичок
вычислять пару или тройку получается вполне в итоге хорошо. Каре - вообще самое простое. Но так запоролся на вычислении двух пар или пара плюс тройка.

И 54 карты я привел впример просто по своей колоде. У меня номера привязаны к уже готовым графическим двум джокерам: красному и чёрному. Но это лирическое отступление. Суть-то ведь не в том.
 
Сверху