3.9. Пример: азартная игра
Одной из наиболее популярных азартных игр считается игра в кости, известная как «крепс», в которую играют и в казино, и в глухих закоулках по всему миру. Правила игры просты:
Игрок бросает две кости. Каждая кость имеет шесть граней. Эти грани помечены как 1, 2, 3, 4, 5 и 6. После броска вычисляется сумма цифр двух верхних граней. Если сумма после первого броска равна 7 или 11, игрок выиграл. Если после первого броска сумма равна 2, 3 или 12 (это называется «крепс»), игрок проигрывает (т. e. выигрывает «банк»). Если после первого броска сумма равна 4, 5, 6, 8, 9 или 10, то эта сумма становится «очками» игрока. Чтобы выиграть, игрок должен продолжать бросать кости до тех пор, пока не выпадет сумма, равная его очкам. Игрок проигрывает, если во время этих бросков ему выпадет сумма 7.
Программа на рис. 3.10 моделирует игру крепс. На рис 3.11 показано несколько примеров ее выполнения.
Заметим, что игрок должен бросать каждый раз по две кости. Мы описали функцию rollDice, которая имитирует бросок костей, подсчитывает выпавшую сумму и печатает ее. Функция rollDice описана один раз, но она вызывается из двух мест программы. Интересно, что rollDice не требует аргументов, поэтому в списке параметров мы указали void. Функция rollDice возвращает сумму двух костей, возвращаемый тип int указывается в заголовочном файле.
Игра разумно запутана. Игрок может выиграть или проиграть после первого же броска или после серии бросков. Переменная gameStatus используется для запоминания состояния игры. Переменная gameStatus объявлена как имеющая тип с именем Status. Строка
enum Status { CONTINUE, WON, LOST );
объявляет определенный пользователем тип, называемый перечислимым (enu-meration). Перечислимый тип, вводимый ключевым словом enum перед именем
196
- 116 Глава 2
- 2.13. Основы повторения, управляемого счетчиком
- 2.14. Структура повторения for (цикл)
- 120 Глава 2
- 122 Глава 2
- 2.15. Пример использования структуры for
- 124 Глава 2
- 126 Глава 2
- 2.16. Структура множественного выбора switch
- Глава 2
- 130 Глава 2
- 132 Глава 2
- 2.17. Структура повторения do/while
- 134 Глава 2
- 2.18. Операторы break и continue
- Глава 2
- 2.19. Логические операции
- 138 Глава 2
- Глава 2
- 2.21. Заключение по структурному программированию
- IfcrpyKTypa (единственный выбор)
- Глава 2
- Глава 2
- 148 Глава 2
- Глава 2
- Глава 2
- Глава 2
- 156 Глава 2
- 158 Глава 2
- 160 Глава 2
- 2.1. А) следование, выбор и повторение, b) if/else. С) управляемым счет чиком или определенным заранее, d) Метку, сигнал, флаг или лож ный сигнал.
- 162 Глава 2
- 164 Глава 2
- 166 Глава 2
- 168 Глава 2
- 170 Глава 2
- 172 Глава 2
- 174 Глава 2
- 176 Глава 2
- 178 Глава 3
- Глава 3
- 3.3. Математические библиотечные функции
- 3.4. Функции
- Глава 3
- 3.5 Определения функций
- 184 Глава 3
- 186 ГлаваЗ
- 3.6. Прототипы функций
- 188 Глава 3
- 3.7. Заголовочные файлы
- 3.8. Генерация случайных чисел
- Глава 3
- 192 Глава 3
- 194 Глава 3
- 3.9. Пример: азартная игра
- Глава 3
- 198 Глава 3
- 3.10. Классы памяти
- 200 Глава 3
- 3.11. Правила, определяющие область действия
- 202 Глава 3
- 204 Глава 3
- 3.12 Рекурсия
- Глава 3
- 6) Значения, возвращаемые после каждого рекурсивного вызова
- 3.13. Пример использования рекурсии: последовательность чисел Фибоначчи
- Глава 3
- 3.14. Рекурсии или итерации
- 212 Глава 3
- Глава 3
- Глава 4
- Глава 5
- Глава 6
- 3.15. Функции с пустыми списками параметров
- 214 Глава 3
- 3.16. Встраиваемые функции