logo
Харви Дейтел, Пол Дейтел Как программировать на С++ / 02-Deitel-Стр-115-214

Глава 3

типа (в нашем случае 8tatus), является набором целых именованных констант, представленных своими идентификаторами. Значения констант этого списка перечисления начинаются, если не указано иное, с 0 и увеличиваются после­довательно на 1. В предыдущем списке перечисления имя CONTINUE присвое­но значению 0, WON присвоено значению 1, а LOST — значению 2. Идентификаторы в enum должны быть уникальными, но отдельные константы перечисления могут иметь одинаковые целые значения.

// Крепс

#include <iostream.h>

#include <stdlib.h>

#include <time.h>

int rollDice(void);

main() {

enum Status { CONTINUE, WON, LOST };

int sum, myPoint;

Status gameStatus;

// первый бросок костей // выигрыш после первого броска //проигрыш после первого броска // запоминание очков

srand(time(NULL)); sum = rollDice();

switch(sum} {

case 7: case 11:

gameStatus = WON;

break; case 2: case 3: case 12:

gameStatus = LOST;

break; default:

gameStatus = CONTINUE;

myPoint = sum;

cout « "Очки: " « myPoint « endl;

break;

while (gameStatus == CONTINUE) sum = rollDice();

if (sum == myPoint) gameStatus = WON;

else

if (sum == 7)

gameStatus - LOST;

[ // бросать дальше // выигрыш по очкам // проигрыш после суммы 7

if (gameStatus == WON)

cout « "Игрок выиграл" « endl; else

cout « "Игрок проиграл" « endl;

return 0;

Рис. 3.10. Программа моделирования игры в крепс (часть 1 из 2)

Функции 197

int rollDice(void)

int diel, die2, workSum;

diel = 1 + rand() % 6; die2 = 1 + rand() % 6; workSum = diel + die2;

cout « "Бросок игрока " « diel « " + " « die2 « " = " « workSum « endl;

return workSum;

Рис. 3.10. Программа моделирования игры в крепс (часть 2 из 2)

Бросок игрока 6 + 5 = 11 Игрок выиграл

Бросок игрока 6 + 6 = 12 Игрок проиграл

Бросок игрока 4 + 6 = 10 Очки: 10

Бросок игрока 2 + 4 = 6

Бросок игрока 6 + 5 = 11

Бросок игрока 3 + 3 = 6

Бросок игрока 6 + 4 = 10 Игрок выиграл

Бросок игрока 1 + 3 = 4 Очки: 4

Бросок игрока 1 + 4 = 5

Бросок игрока 5 + 4 = 9

Бросок игрока 4 + 6 = 10

Бросок игрока 6 + 5 = 11

Бросок игрока 1 + 2 = 3

Бросок игрока 5 + 2 = 7 Игрок проиграл

Рис. 3.11. Примеры прогонов игры в крепс

Хороший стиль программирования 3.8

Делайте заглавной первую букву идентификатора, используемого как имя типа, оп­ределенного пользователем.

Переменным типа Status, определенного пользователем, может быть при­своено только одно из трех значений, объявленых в перечислении. Если игра выиграна, gameStatus принимает значение WON. Если игра проиграна, gameStatus устанавливается равной LOST. В ином случае gameStatus прини­мает значение CONTINUE, так что кости могут быть брошены снова.

Типичная ошибка программирования 3.13

Присвоение целого эквивалента константы перечисления переменной перечислимого типа приводит к замечанию (предупреждению) компилятора.