Пример 34-4. Массивы и другие хитрости для раздачи колоды карт в четыре руки
Пример 34-4. Массивы и другие хитрости для раздачи колоды карт в четыре руки
#!/bin/bash
# На старых системах может потребоваться вставить #!/bin/bash2.
# Карты:
# раздача в четыре руки.
UNPICKED=0
PICKED=1
DUPE_CARD=99
LOWER_LIMIT=0
UPPER_LIMIT=51
CARDS_IN_SUIT=13
CARDS=52
declare -a Deck
declare -a Suits
declare -a Cards
# Проще и понятнее было бы, имей мы дело
# с одним 3-мерным массивом.
# Будем надеяться, что в будущем, поддержка многомерных массивов будет введена в Bash.
initialize_Deck ()
{
i=$LOWER_LIMIT
until [ "$i" -gt $UPPER_LIMIT ]
do
Deck[i]=$UNPICKED # Пометить все карты в колоде "Deck", как "невыданная".
let "i += 1"
done
echo
}
initialize_Suits ()
{
Suits[0]=Т # Трефы
Suits[1]=Б # Бубны
Suits[2]=Ч # Червы
Suits[3]=П # Пики
}
initialize_Cards ()
{
Cards=(2 3 4 5 6 7 8 9 10 В Д K Т)
# Альтернативный способ инициализации массива.
}
pick_a_card ()
{
card_number=$RANDOM
let "card_number %= $CARDS"
if [ "${Deck[card_number]}" -eq $UNPICKED ]
then
Deck[card_number]=$PICKED
return $card_number
else
return $DUPE_CARD
fi
}
parse_card ()
{
number=$1
let "suit_number = number / CARDS_IN_SUIT"
suit=${Suits[suit_number]}
echo -n "$suit-"
let "card_no = number % CARDS_IN_SUIT"
Card=${Cards[card_no]}
printf %-4s $Card
# Вывод по столбцам.
}
seed_random () # Переустановка генератора случайных чисел.
{
seed=`eval date +%s`
let "seed %= 32766"
RANDOM=$seed
}
deal_cards ()
{
echo
cards_picked=0
while [ "$cards_picked" -le $UPPER_LIMIT ]
do
pick_a_card
t=$?
if [ "$t" -ne $DUPE_CARD ]
then
parse_card $t
u=$cards_picked+1
# Возврат к индексации с 1 (временно).
let "u %= $CARDS_IN_SUIT"
if [ "$u" -eq 0 ] # вложенный if/then.
then
echo
echo
fi
# Смена руки.
let "cards_picked += 1"
fi
done
echo
return 0
}
# Структурное программирование:
# вся логика приложения построена на вызове функций.
#================
seed_random
initialize_Deck
initialize_Suits
initialize_Cards
deal_cards
exit 0
#================
# Упражнение 1:
# Добавьте комментарии, чтобы до конца задокументировать этот сценарий.
# Упражнение 2:
# Исправьте сценарий так, чтобы карты в каждой руке выводились отсортированными по масти.
# Вы можете добавить и другие улучшения.
# Упражнение 3:
# Упростите логику сценария.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
4.4. Хитрости выполнения файловых операций
4.4. Хитрости выполнения файловых операций Смена расширений файлов и ее последствияНадеюсь, вам известно, что любой файл имеет расширение, которое указывает на его тип и добавляется к имени через точку. По умолчанию Windows автоматически скрывает расширения файлов, и как бы
Глава 6 Пиринговые сети, торренты, сиды и раздачи на службе у пользователя
Глава 6 Пиринговые сети, торренты, сиды и раздачи на службе у пользователя Интернет прочно вошел в нашу жизнь. Теперь многие и не представляют себе, как бы они узнавали последние новости, обменивались письмами или ходили в магазин без этой вездесущей паутины. А на заре
Создание собственной раздачи
Создание собственной раздачи В пиринговых сетях каждый пользователь может инициировать и собственную раздачу, если ему есть чем поделиться. Чтобы начать собственную раздачу, следует сначала сохранить раздаваемый файл на жестком диске своего компьютера. Далее,
Создание своей раздачи на трекере
Создание своей раздачи на трекере Чтобы иметь возможность скачивать, вы должны поддерживать свой рейтинг, раздавая уже скачанные торренты или создавая свои. Плюс ваших собственных раздач в том, что в этом случае объем отданных данных подсчитывается в качестве бонуса к
Глава 8. Массивы, хэши и другие перечисляемые структуры
Глава 8. Массивы, хэши и другие перечисляемые структуры Все детали должны соединяться без усилий. Помните, что механизм, который вы пытаетесь собрать, вами же был и разобран. Если не удается соединить детали, на то должна быть причина. Ни в коем случае не пользуйтесь
Маленькие хитрости
Маленькие хитрости Печать слайдовПечать слайдов презентаций нужна для последующей их демонстрации с помощью проектора. Особенность может быть в том, что слайды распечатываются как на черно-белых, так и на цветных принтерах, а PowerPoint автоматически оптимизирует слайды для
Пример 9-24. Выбор случайной карты из колоды
Пример 9-24. Выбор случайной карты из колоды #!/bin/bash# pick-card.sh# Пример выбора случайного элемента массива.# Выбор случайной карты из колоды.Suites="ТрефБубейЧервейПик"Denominations="2345678910ВалетДамаКорольТуз"suite=($Suites) # Инициализация массивов.denomination=($Denominations)num_suites=${#suite[*]} #
Тонкости и хитрости.
Тонкости и хитрости. Установка и применение программы PGP. В PGP применяется принцип использования двух взаимосвязанных ключей: открытого и закрытого. К закрытому ключу имеете доступ только вы, а свой открытый ключ вы распространяете среди своих
Полезные хитрости
Полезные хитрости Очень полезно иметь две цифровые камеры: зеркальную для основной работы и компактную, но достаточно качественную, которая всегда окажется под рукой, особенно когда «зеркалка» упакована в рюкзак. Таким образом, вы никогда не пропустите интересный
ОГОРОД КОЗЛОВСКОГО: Четыре мега за четыре гига
ОГОРОД КОЗЛОВСКОГО: Четыре мега за четыре гига Автор: Козловский ЕвгенийЗаканчивая прошлый "Огород", "Убивца", я пообещал детектив. Выполняю обещание.Итак, набив до отказа привычными программами описанный в "Убивце" x600, я начал с ним жить. Жизнь была нормальная, к