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

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

Решение
Создайте массив из 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));
(($draw = array_pop($deck)) != NULL) {
print $cards[$draw / 4] . ' of ' . $suits[$draw % 4] . "\n";
}

Этот код использует функцию pc_array_shuffle() из рецепта 4.20.

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

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

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

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

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Добавление одного массива к другому
Изменение длины массива
Инициализация массива диапазоном
Инициализация массива диапазоном целых чисел
Нахождение всех перестановок массива

Вернуться в раздел: PHP / 4. Массивы