Пример 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:

# Упростите логику сценария.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

ОГОРОД КОЗЛОВСКОГО: Четыре мега за четыре гига

Из книги Журнал `Компьютерра` №721 автора Журнал «Компьютерра»

ОГОРОД КОЗЛОВСКОГО: Четыре мега за четыре гига Автор: Козловский ЕвгенийЗаканчивая прошлый "Огород", "Убивца", я пообещал детектив. Выполняю обещание.Итак, набив до отказа привычными программами описанный в "Убивце" x600, я начал с ним жить. Жизнь была нормальная, к


Маленькие хитрости

Из книги Эффективное делопроизводство автора Пташинский Владимир Сергеевич

Маленькие хитрости Печать слайдовПечать слайдов презентаций нужна для последующей их демонстрации с помощью проектора. Особенность может быть в том, что слайды распечатываются как на черно-белых, так и на цветных принтерах, а PowerPoint автоматически оптимизирует слайды для


Глава 8. Массивы, хэши и другие перечисляемые структуры

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

Глава 8. Массивы, хэши и другие перечисляемые структуры Все детали должны соединяться без усилий. Помните, что механизм, который вы пытаетесь собрать, вами же был и разобран. Если не удается соединить детали, на то должна быть причина. Ни в коем случае не пользуйтесь


Глава 6 Пиринговые сети, торренты, сиды и раздачи на службе у пользователя

Из книги Как найти и скачать в Интернете любые файлы автора Райтман М. А.

Глава 6 Пиринговые сети, торренты, сиды и раздачи на службе у пользователя Интернет прочно вошел в нашу жизнь. Теперь многие и не представляют себе, как бы они узнавали последние новости, обменивались письмами или ходили в магазин без этой вездесущей паутины. А на заре


Создание собственной раздачи

Из книги PGP: Кодирование и шифрование информации с открытым ключом. автора Левин Максим

Создание собственной раздачи В пиринговых сетях каждый пользователь может инициировать и собственную раздачу, если ему есть чем поделиться. Чтобы начать собственную раздачу, следует сначала сохранить раздаваемый файл на жестком диске своего компьютера. Далее,


Создание своей раздачи на трекере

Из книги Windows Vista. Трюки и эффекты автора Зозуля Юрий

Создание своей раздачи на трекере Чтобы иметь возможность скачивать, вы должны поддерживать свой рейтинг, раздавая уже скачанные торренты или создавая свои. Плюс ваших собственных раздач в том, что в этом случае объем отданных данных подсчитывается в качестве бонуса к


Тонкости и хитрости.

Из книги Искусство программирования на языке сценариев командной оболочки автора Купер Мендель

Тонкости и хитрости. Установка и применение программы PGP. В PGP применяется принцип использования двух взаимосвязанных ключей: открытого и закрытого. К закрытому ключу имеете доступ только вы, а свой открытый ключ вы распространяете среди своих


4.4. Хитрости выполнения файловых операций

Из книги Цифровая фотография от А до Я [2-е издание] автора Газаров Артур Юрьевич

4.4. Хитрости выполнения файловых операций Смена расширений файлов и ее последствияНадеюсь, вам известно, что любой файл имеет расширение, которое указывает на его тип и добавляется к имени через точку. По умолчанию Windows автоматически скрывает расширения файлов, и как бы


Пример 9-24. Выбор случайной карты из колоды

Из книги Виртуальная библиотека Delphi автора

Пример 9-24. Выбор случайной карты из колоды #!/bin/bash# pick-card.sh# Пример выбора случайного элемента массива.# Выбор случайной карты из колоды.Suites="ТрефБубейЧервейПик"Denominations="2345678910ВалетДамаКорольТуз"suite=($Suites) # Инициализация массивов.denomination=($Denominations)num_suites=${#suite[*]} #


Полезные хитрости

Из книги автора

Полезные хитрости Очень полезно иметь две цифровые камеры: зеркальную для основной работы и компактную, но достаточно качественную, которая всегда окажется под рукой, особенно когда «зеркалка» упакована в рюкзак. Таким образом, вы никогда не пропустите интересный