Разработчику. Сборник рецептов PHP
Задавайте вопросы

Тасование колоды карт

Вернуться назад

Задача

Необходимо перетасовать колоду карт и раздать их.

Решение

Создайте массив из 52 целых чисел, перемешайте его и свяжите с картами:

$suits = array('Clubs' , 'Diamonds' , 'Hearts' , 'Spades');
$cards = array('Ace' , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 'Jack' , 'Queen' , 'King');

$deck = pc_array_shuffle(range(0, 51));
while (($draw = array_pop($deck)) != NULL) {
     print $cards[$draw / 4] . ' of ' . $suits[$draw % 4] . "\n";
}

Этот код использует функцию pc_array_shuffle() из описания Рандомизация массива

Обсуждение

Для английского представления карт создается пара массивов, $suits и $cards. Числа от 0 до 51 случайным образом расставляются и назначаются массиву $deck. Чтобы сдать карту, достаточно извлечь число из начала массива, рассматривая этот массив как буквальную колоду карт.

Необходимо добавить проверку на значение NULL внутри оператора while, иначе цикл прервется, когда вы вытащите нулевую карту. Если изменить колоду так, чтобы она содержала числа от 1 до 52, то, с математической точки зрения, сопоставление чисел и карт становится более сложным.

Чтобы сдать несколько карт сразу, вызовите функцию array_slice():

array_slice($deck , $cards * - 1);

См. также

Документацию по функции array_slice() на http://www.php.net/array-slice.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ