Лабораторные работы (2010) (Лаба 3 отчет)

Посмотреть архив целиком

Московский Энергетический Институт

(Технический Университет)

















Лабораторная работа №3.

по курсу

«Теория игр и исследование операций»





Выполнил:

студент 4 курса

группы А-13-06

Смоляков Дмитрий





















Москва, 2010г.

СОДЕРЖАНИЕ.


  1. Постановка задачи.


  1. Общее описание предметной области.


  1. Описание имитационной модели.



  • Типы ресурсов.

  • Ресурсы.

  • Операции.

  • Интерфейс.

  • Файл выполнения.

  • Статистика.


  1. Приложение.































Постановка задачи.

Реализовать с помощью комплекса РДО карточную игру «Блекджек» для двух игроков – играющего и дилера. Реализовать возможность управлению действиями игрока, за дилера играет компьютер.



Общее описание предметной области.

Цель игры:

Для игрока : выиграть как можно больше фишек у дилера. Игрок может прекратить игру после каждой раздачи.

Для дилера: выиграть все фишки игрока . Игра заканчивается, если игрок проиграл все свои деньги.

Правила игры:

Вся игра разделена на некоторое количество раздач.

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

После этого игроку выделяется некоторое количество фишек на игру (по умолчанию - 20000).

В начале каждой раздачи игрок делает ставку - кладёт фишки определённого достоинства на специальное место на игровом столе.

Игрок может сделать ставку в размере 1000, 2000, 3000 фишек. Для этого необходимо нажать на соответствующую кнопку снизу экрана.

Дилер сдает карты 2 карты игроку и 2 карты себе.

Для первоначальной сдачи карт нужно нажать кнопку ”Сдать карты”.

Достоинства карт : c 2 по 10- соответственно порядку, Валет, Дама, Король -10 очков, Туз - «мягкая рука», поскольку при необходимости Туз можно считать равным 11 и равным 1.

Игрок оценивает полученную комбинацию и, если считает необходимым (принято как если счет игрока < 14 ), «прикупить» карту, нажимает кнопку “Еще карту”, после чего дилер выдает игроку еще карту. «Прикуп» продолжается до тех пор, пока все игрок не останется удовлетворенным своей комбинацией, или не «переберет» за 21 очко.

Если игрок удовлетворен своей комбинацией, он должен нажать кнопку ”Оставить” для продолжения раздачи.

Затем дилер оценивает свои карты и, если требуется, «прикупает» - дилер, если имеет при раздаче комбинацию меньше 17, обязан прикупать дальше, если он набрал сумму очков 17, то обязан на этом остановиться.

После оценки своей комбинации дилером происходит анализ ситуации и выплата игроку приза.

Если у дилера «перебор», то выигрывает игрок, если он не «перебрал» в процессе игры. Если дилер не «перебрал», то игрок с меньшей, чем у него комбинацией на руках - проиграл, а тот, у кого комбинация больше - выиграл.

Если же комбинации у игрока и дилера равны (включая БлэкДжек) объявляется «ничья», игроку возвращается его ставка.

Если игрок обыгрывает дилера, не собирая блекджек (если дилер перебрал или игрок набрал больший счет, то игроку выдается приз - 2 начальных ставки). Если игрок выиграл, собрал блекджек, то – 3 начальных ставки.

После разбора ситуации и выплат игроку предоставляется выбор : продолжить играть следующую раздачу (кнопка ”След. сдача”), либо закончить игру (кнопка ”Закончить”).

Если у игрока не остается фишек (он все проиграл), игра прекращается и у игрока появляется в качестве выбора только кнопка ”Закончить”.

Игра заканчивается, когда у игрока не остается фишек, либо когда игрок не желает дальше продолжать игру после раздачи.















Описание имитационной модели.

Типы ресурсов.

В модели используется 1 тип ресурсов - КлассИгра.

КлассИгра содержит поля:

$Resource_type КлассИгра : permanent

$Parameters

СтекИгрока : integer = 0 - количество фишек игрока.

СтавкаИгрока : integer = 0 - количество фишек, которые игрок поставил на кон.

КартаИгрока1 : integer = 0 - код 1-ой карты игрока.

КартаИгрока2 : integer = 0 - код 2-ой карты игрока.

КартаИгрока3 : integer = 0 - код 3-ой карты игрока.

КартаИгрока4 : integer = 0 - код 4-ой карты игрока.

КартаИгрока5 : integer = 0 - код 5-ой карты игрока.

КартаДилера1 : integer = 0 - код 1-ой карты дилера.

КартаДилера2 : integer = 0 - код 2-ой карты дилера.

КартаДилера3 : integer = 0 - код 3-ой карты дилера.

КартаДилера4 : integer = 0 - код 4-ой карты дилера.

КартаДилера5 : integer = 0 - код 5-ой карты дилера.

СчетИгрока : integer [0..50] = 0 - счет игрока

СчетДилера : integer [0..50] = 0 - счет дилера

ВыигрышИгрока : integer = 0 - величина выигрыша игрока в раздаче

Состояние : integer [0..4] = 0 -Cостояние игры : 0-игра не началась,1-игра идет ,2-игра может быть продолжена,3-игрок проиграл все деньги,игра закончилась

Победитель : integer [0..31] = 0 - Победитель раздачи : 11-победил игрок блекджеком,12-игрок победил,у дилера перебор,13- игрок победил по счету, 21-победил дилер блекджеком,22-победил дилер,у игрока перебор,23-победил дилер по счету,30-ничья,банк делится.

$End







Ресурсы.

В модели используется ресурс Игра. Это объект описанного выше класса.

$Resources

Игра : КлассИгра * * * * * * * * * * * * * * * * *

$End

Операции.

В программе предусмотрены следующие операции:

$Operations

СделатьСтавку1000 : ОбразецСделатьСтавку '1' 1000 – Операция, отвечащая за ставку игрока 1000 фишек.

СделатьСтавку2000 : ОбразецСделатьСтавку '1' 2000– Операция, отвечающая за ставку игрока 2000 фишек.

СделатьСтавку3000 : ОбразецСделатьСтавку '1' 3000– Операция, отвечающая за ставку игрока 3000 фишек.

РаздатьКарты : ОбразецРаздатьКарты '5'– Операция, отвечающая за раздачу начальных 2-х карт игроку и дилера.

ЕщеКарту : ОбразецЕщеКарту 'E'– Операция, отвечающая за добор карт игроком.

Оставить : ОбразецОставить '0'– Операция, сообщающая об удовлетворенности игроком своей комбинацией.

НачатьИгру : ОбразецНачатьИгру 'SPACE'– Операция, отвечающая начало игры.

ЗакончитьИгру : ОбразецКонецИгры 'ESCAPE'– Операция, отвечающая за прекращение игры.

СледующаяРаздача : ОбразецСледСдача 'S'– Операция, сообщающая о желании игрока продолжить игру.

$End



Интерфейс.

Интерфейс при первом запуске игры:

Для начала игры можно нажать пробел, либо щёлкнуть мышью по полю начать.




















Интерфейс игры ‘в процессе ставки’: