Создание информационной системы 'Poker Helper' с использованием современных средств и подходов проектирования программного обеспечения

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    1,68 Мб
  • Опубликовано:
    2012-11-14
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Создание информационной системы 'Poker Helper' с использованием современных средств и подходов проектирования программного обеспечения

Министерство образования и науки Украины

Национальный аэрокосмический университет им. Н.Е. Жуковского

“Харьковский авиационный институт”

Кафедра 304






ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту

по дисциплине «Современные средства проектирования программного обеспечения»

на тему: «Создание информационной системы «Poker Helper» с использованием современных средств и подходов проектирования программного обеспечения»

Исполнители:

студенты 335 группы

Вдовитченко А.В.(…)

Фоменко А.С.(…)

Швыдка И.Ю.(…)

Проверил:

канд. техн. наук, доц. каф. 304 ___________(Радивоненко О.С.)

Харьков 2010

РЕФЕРАТ

Пояснительная записка состоит из 55 листов, включает 14 иллюстраций, 5 таблиц, 3 приложения на 20 листах. При ее составлении использовалось 10 источников литературы.

Темой разработки является «Poker Helper» с использованием современных средств и подходов проектирования программного обеспечения.

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

КЛЮЧЕВЫЕ СЛОВА: CASE-СРЕДСТВА ПРОЕКТИРОВАНИЯ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДИАГРАММА КЛАССОВ, ДИАГРАММА ВЗАИМОДЕЙСТВИЯ, ДИАГРАММА КОМПОНЕНТОВ, ТЕСТИРОВАНИЕ.

СОДЕРЖАНИЕ

РЕФЕРАТ

ВВЕДЕНИЕ

.          ТЕХНИЧЕСКОЕ ЗАДАНИЕ

.1         Основание для разработки.

.2         Назначение разработки.

.3         Требование пользователя.

.4         Требование к программному продукту.

.4.1      Функциональные требования.

.4.2      Требование к интерфейсу.

.4.3      Требования к ресурсам.

.4.4      Требование к производительности.

.4.5      Требование к верификации.

.4.6      Требование к документации

.4.7      Требование к защите информации.

.4.8      Требование к условиям эксплуатации.

.5         Матрица трассируемости требований.

.6         Стадии и этапы разработки:

.          ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ АНАЛИЗ И ПРОЕКТИРОВАНИЕ СИСТЕМЫ

.1         Моделирование системы

.1.1      Диаграмма прецедентов

.1.2      Диаграмма деятельности

.1.3      Диаграмма классов

.          ОПИСАНИЕ ПРОГРАММНОГО ПРОДУКТА

.1         Формат входных/выходных данных

.2         Модульная структура продукта

.3         Документация по программному коду

.          ИСПЫТАНИЯ ПРОГРАММНОГО ПРОДУКТА

.1         Тест-план

.1.1      Ресурсы

.1.2      Описание test-cases

.2         Протокол тестирования

.          ОПИСАНИЕ ПРИМЕНЕНИЯ

Заключение

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

ПРИЛОЖЕНИЕ А

ПРИЛОЖЕНИЕ Б

ПРИЛОЖЕНИЕ В

ВВЕДЕНИЕ

В современном мире компьютерная техника стала необходимым атрибутом жизни. Использование компьютерных технологий позволяет рационально использовать время и ресурсы, а также существенно снизить затраты при расчётах большинства задач, возникающих на практике. Сейчас компьютерные технологии применяются не только в производстве, но и в других областях, таких как спорт или игровая индустрия. Одной из видов деятельности, которые можно отнести к этим областям, является покер.

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

Сейчас существует довольно много онлайн-сервисов и программ, предлагающих виртуальный покер. Любой человек может сесть за стол играть как с противником, находящимся в той же комнате, так и с тем, кто находится в любой другой точке земного шара. Но главное - существуют виртуальные противники, все ходы которого просчитывает компьютер. Если есть виртуальные противники, то существуют и виртуальные помощники. Некоторые из таких программ предоставляют вам дополнительную информацию о ваших игровых соперниках, другие помогают узнавать результаты очередных покерных турниров. Есть программы, помогающие проанализировать вашу собственную игру или просчитать шансы на победу.

В принципе, все программы для игры в покер можно разделить на три основных вида.

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

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

Третий тип программ собирает статистическую базу данных по всем участникам. При их помощи вам станут известны сведения о результатах игровых партий оппонентов. Хотя использование программ этой категории запрещены многими покер румами.

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

В данной работе будет произведено проектирование одного из вариантов покерного калькулятора. Основными требованиями являлось создание простого и удобного счетчика шансов для реальной игры и большинства существующих игр онлайн покера. Этот онлайн калькулятор поможет рассчитать шансы появления той или иной комбинации карт в игре покер Холдем. “Poker Helper” может оказать незаменимую помощь всем любителям покера. Этой программой могут пользоваться как профессиональные игроки, так и люди, не знакомые с теорией вероятностей и только начинающие свою практику игры в покер, т.к. с помощью данного программного продукта можно произвести расчёт вероятностей появления возможных комбинаций карт в игре при симуляции любого расклада.

1       

1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ

 

1.1     Основание для разработки


Основанием для разработки программного продукта «Poker Helper» является задание Радивоненко О.С., в соответствии с учебным планом онкреальности «прикладная математика».

1.2     Назначение разработки


Программа «Poker Helper»: Основная функция данного калькулятора - это расчет вероятностей появления каждой возможной комбинации на любой стадии игры в холдем, от флопа до ривера. Т.е. пользователь в любой момент можете ввести то, что ему известно о картах на руках и на столе (и имеющихся, и отсутствующих). Он может воспользоваться графическим интерфейсом, который быстро позволяет выбирать из таблиц, как конкретные карты, так и диапазоны карт. Затем - просто нажать на клавишу «Рассчитать», и через несколько секунд искомые вероятности появятся в соответствующих окошках.

1.3     Требование пользователя


Программа должна иметь понятный интерфейс, выполнять расчет шансов при начальной комбинации и при дальнейших раскладах карт.

1.4     Требование к программному продукту

 

1.4.1  Функциональные требования

·        Ввод комбинации карт согласно ситуации, то есть выбор их на форме.

·        Вывод вероятности выигрыша на форму в отдельную панель

·        Представление справки по нажатию F1 или соответствующего меню на форме

·        Визуальное отображение карт

1.4.2  Требование к интерфейсу

Программный продукт должен иметь понятный и удобный интерфейс. Интерфейс должен иметь основные кнопки для расчёта и сброса текущих данных. В виде графических объектов должны быть реализованы наборы карт, которые находятся у игрока и на столе. Вывод результатов расчета шансов требуется произвести на форму в специально сгруппированную панель.

1.4.3  Требования к ресурсам

Процессор не менее 1 ГГц

ОЗУ - не менее 256 Mb

ЖД - свободное место не менее 100 мб

Видео - не менее 64 MbROM

Операционная система: Windows 98 и выше

Для работы программы необходим .NET Framework 4.0 или новей

1.4.4  Требование к производительности

Программа реализует сложный математический алгоритм, поэтому возможна загрузка системы.

1.4.5  Требование к верификации

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

1.4.6 

1.4.6 Требование к документации

При разработке программного продукта будут созданы документы:

Документ «Техническое задание», который разрабатывается в соответствии с ГОСТ 19-201-78. Документ будет содержать введение содержащие наименование и краткую характеристику основания разработки программного продукта, входные и выходные данные, требования к системным требованиям, программной совместимости к транспортировке. Данный документ разрабатывается в одном экземпляре.

Документ «Инструкция программиста», который разрабатывается в соответствие с ГОСТ 19-503-79. Документ будет содержать общие сведение о программе, структуру и настройку программы, дополнительные возможности и сообщения системному программисту. Разрабатывается в одном экземпляре.

Документ «Инструкция пользователя», который разрабатывается в соответствии с ГОСТ 19.504-79. Документ будет содержать назначения и условия применения, характеристики программы входные/выходные данные обращения к программе и сообщения. Документ разрабатывается в одном экземпляре.

1.4.7  Требование к защите информации

Защита информации, направленная на предотвращение воздействия на защищаемую информацию: ошибок ее пользователя, сбоя технических и программных средств информационных систем, природных явлений или иных нецеленаправленных на изменение информации событий, приводящих к искажению, уничтожению, копированию, блокированию доступа к информации, а также к утрате, уничтожению или сбою функционирования носителя информации.

1.4.8  Требование к условиям эксплуатации

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

1.5     Матрица трассируемости требований


Требования заказчика   Функциональные требования

Расчет вероятностей выигрыша на любой стадии игры

В любой момент можете ввести то, что вам известно о картах на ваших руках, на руках соперников и на борде.

Графический интерфейс, который быстро позволяет выбирать из таблиц, как конкретные карты, так и диапазоны карт.

Ввод комбинации карт согласно ситуации, то есть выбор их на форме.




Ввод номера расклада.




Вывод вероятности выигрыша на форму в отдельную панель




Предложение варианта текущего хода выводятся сообщениями и на форму




Визуальное отображение карт




 

1.6     Стадии и этапы разработки


Стадии разработки

Этапы разработки

Содержание работ

Сроки

Ответственный исполнитель

Анализ требований

Написать ТЗ

Создается документ, в котором будут представлены основные требования к ПП.

10.02.2011

Вдовитченко А.В


Use-case

Создается Use-case.

17.02.2011

Фоменко А.С.

Проектирование

Выбор метода

Выбирается метод для проектирования ПП.

24.02.2011

Швыдка И.Ю.


Алгоритм

Создается блок-схема.

03.03.2011

Швыдка И.Ю.


Построение UML

Создается UML.

10.03.2011

Фоменко А.С.

Разработка

Кодирование

Происходит написание кода.

17.03.2011

Вдовитченко А.В


Модульное тестирование

Тестируется ПП.

31.03.2011

Швыдка И.Ю.


Документация

Создается документ, сопровождающий ПП.

07.04.2011

Фоменко А.С.

Тестирование

Разработка тестирования

Происходит полное тестирование ПП.

14.04.2011

Швыдка И.Ю.


Формирование документов тестирования

Создается документация о результатах тестирования.

21.04.2011

Швыдка И.Ю.

Внедрение

Сдача, защита проекта

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

28.04.2011

Вдовитченко А.В Фоменко А.С. Швыдка И.Ю.

2       

.        ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ АНАЛИЗ И ПРОЕКТИРОВАНИЕ СИСТЕМЫ


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

В процессе анализа бы ли внесены такие классы системы:

·        Class Card - класс, описывающий атрибуты одной карту.

·        Class Cards - класс, описывающий колоду карт.

·        Class Combination - класс для определения комбинаций.

·        Class Desk - класс, описывающий карты игрока и на столе.

·        Class CombinationMaker - класс для расчета вероятностей.

·        Class Form1 - основной класс программы.

В качестве языка программирования путем проведения сравнительного анализа методом вариантных сетей был выбран язык С#, который поддерживает все необходимые объектно-ориентированные возможности, а также весьма гибок, результаты приведены в таблице 2.1. В качестве среды разработки под платформу Windows была выбрана визуальная среда разработки Visual Studio. Для проектирования системы был использован Rational Rose.

Таблица 2.1. - Сравнительный анализ средств разработки

Критерий

Коэфф. Вес-ти

Абсолютное значение показателей

Относительное значение показателей

Название

Ед. изм


Вар. А

Вар. В

Вар. С

А

В

С








KK






1

Требова-ния к ресурсам

0.15

100

50

100

1

0.51





2

Дружест-венность Пользова-телю

балл

0.20

5

4

3

1

0.80.6





3

цена


0.20

4

5

4

0.8

10.8





4

Затраты на адапта-цию

балл

0.15

5

3

3

1

0.60.6





5

БД

балл

0.15

5

3

3

1

0.60.6





6

Соотв. Совр. Техники

балл

0.15

5

4

5

1

0.81





Итого:


0.96

0.735

0.79


Выбор производился по трем вариантам:

Вариант А - C#

Вариант B - Object Pascal

Вариант C - C++

На основании проведеннонго анализа можем сделать вывод, что наиболее приемлемый для нас вариант -это вариант А (C#).

2.1     Моделирование системы

 

2.1.1  Диаграмма прецедентов



Рисунок 2.1 - Диаграмма вариантов использования

Диаграммы прецедентов (рис. 2.1) отображают требования к разрабатываемой системе. Прецедент (вариант использования) - это последовательность действий, выполняемых системой в ответ на событие, инициируемое внешним объектом (таким объектом может быть пользователь, время или внешняя система).

Описание потоков событий для прецедентов системы «Poker Helper».

Вариант использования «Выбрать расклад»:

.        Пользователь может выбрать расклад карт (как минимум из пяти карт: 2 карты игрока и 3 карты на столе), кликая по графическому изображению на панели выбора.

.        Предусловия: наличие ПК, умение пользоваться манипулятором-мышь, желание (необходимость) узнать вероятность появления комбинаций при определённом раскладе.

.        Основной поток событий:

.1. Запустить приложение

.2. Найти графическое изображение карты на панели выбора

.3. Кликнуть левой кнопкой мыши на карте и она автоматически переместится в соответствующую ячейку на столе.

.4. При необходимости перейти к шагу 3.2.

.        Альтернативный поток:

А1. Приложение не запускается - проверить, установлено ли приложение; удовлетворяются ли требования к ресурсам для работы приложения. Перезапустить компьютер и повторить шаг 3.1.

А2. Карта не перемещается в соответствующую ячейку на столе - перезапустить приложение, повторить шаги 3.2-3.4.

.        Постусловие: Выбран расклад.

Вариант использования «Сброс»:

.        Пользователь может сбросить текущие данные системы (очистить стол и обнулить вероятности).

.        Предусловия: наличие ПК, умение пользоваться манипулятором-мышь, желание (необходимость) очистить или сменить расклад.

.        Основной поток событий:

.1.      Запустить приложение

.2.      Выбрать расклад

26.04. Кликнуть левой кнопкой мыши на кнопке «Сброс» и автоматически обнулятся вероятности, и очистится стол.

.        Альтернативный поток:

А1. Приложение выдаёт ошибку - проверить, выбран ли расклад; удовлетворяются ли требования к ресурсам для работы приложения. Перейти к шагу 3.2.

.        Постусловие: Панель вероятностей и ячейки на столе пусты.

Вариант использования «Просмотр шансов»:

.        Пользователь может узнать шансы появления той или иной комбинации карт в зависимости от расклада.

.        Предусловия: наличие ПК, умение пользоваться манипулятором-мышь, желание (необходимость) узнать вероятность появления комбинаций при определённом раскладе.

.        Основной поток событий:

.1. Запустить приложение

.2. Выбрать расклад

.3. Кликнуть левой кнопкой мыши на кнопке «Рассчитать» и вероятности появятся в специально отведённой на форме панели.

.        Альтернативный поток:

А1. Приложение выдаёт ошибку - проверить, выбран ли расклад; удовлетворяются ли требования к ресурсам для работы приложения. Перейти к шагу 3.2.

.        Постусловие: Вероятности выведены на форму.

Вариант использования «Вызов справки»:

.        Пользователь может узнать шансы появления той или иной комбинации карт в зависимости от расклада.

.        Предусловия: наличие ПК, умение пользоваться манипулятором-мышь, желание (необходимость) узнать вероятность появления комбинаций при определённом раскладе.

.        Основной поток событий:

.1.      Запустить приложение

.2.      Выбрать на верхней панели (меню) вкладку «Справка»

.        Альтернативный поток:

А1. Приложение выдаёт ошибку - проверить, удовлетворяются ли требования к ресурсам для работы приложения. Перезапустить компьютер и перейти к шагу 1.

А2. Не открывается окошко «Справка» при выборе соответствующей вкладки - попробовать вызвать справку нажатием клавиши F1.

.        Постусловие: Открыта справка.

2.1.2 

.1.3    Диаграмма деятельности


Рисунок 2.2 - Диаграмма деятельности

2.1.4 

2.1.4  Диаграмма классов


Рисунок 2.3 - Диаграмма классов

Диаграммы классов определяют типы классов системы и статические связи между ними. Классы - это типы объектов, которые содержат данные и поведение, которое влияет на эти данные. Бывают граничные, управляющие онкрсы и классы-сущности.

3       

3.  ОПИСАНИЕ ПРОГРАММНОГО ПРОДУКТА

 

3.1     Формат входных/выходных данных


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

Входные данные:

Имя (тип)

Ограничения

1.

Card(object)

Не меньше 5


Выходные данные:

№ИмяОграничения



1.

Вероятность

от 0 до 1

 

3.2     Модульная структура продукта


На рисунке 3.1 приведена модульная структура программного продукта в виде диаграммы компонентов на языке UML.

Рисунок 3.1. - Модульная структура программного продукта

3.3     Документация по программному коду


Рассмотрим класс расчета вероятностей CombinationMaker.

Атрибуты класса:

·        Для накопления комбинаций:

o   PAIR;

o   TWO_PAIR;

o   SET;

o   STRAIGHT;

o   FLUSH;

o   FULL_HOUSE;

o   KARE;

o   STRAIGHT_FLUSH;

o   ROYAL_FLUSH.

·        Массив карт для расчета вероятностей:

o   playerCards.

Методы:

·        OneCard - метод,позволяющий реализовать перебор одной неизвестной карты при стадии игры Тёрн.

·        TwoCard - метод,позволяющий реализовать перебор двух неизвестных карт при стадии игры Флоп.

·        SetCard - метод, позволяющий рассчитать вероятность.

·        Kolichestvo - метод накопления комбинаций.

Рассмотрим класс определения комбинации:

Атрибуты:

·        Константы используються для доступа к масивам rangCard, mastCard.

o   PAIR;

o   TWO_PAIR;

o   SET;

o   STRAIGHT;

o   FLUSH;

o   FULL_HOUSE;

o   KARE;

o   STRAIGHT_FLUSH;

o   ROYAL_FLUSH.

o   COMBINATION_NUMBER;

o   CARD_NUMBER;

·        Массивы накопления рангов и мастей

o   cardRang

o   cardMast

·        val глобальная переменная служит для передачи комбинаций

Методы класса:

·        Boole - переводит число в булевский тип;

·        Calculate - метод определения комбинации;

·        Методы проверки наличия комбинации: checStraightFlush, isFlush, isStraight, maxNumberofStraight, secMaxNumberofStraight;

·        zeroArraay -очистка массива.

4.      

4. ИСПЫТАНИЯ ПРОГРАММНОГО ПРОДУКТА

 

4.1     Тест-план

 

4.1.1  Ресурсы

Для проведения испытаний программного продукта необходимы следующие ресурсы

Аппаратные требования:

Для работы необходим один ПК следующей минимальной конфигурации:

·        Процессор 533 MHz

·        RAM 64 MB

·        Free HDD space - 5 MB

·        Дисплей, манипулятор «мышь», клавиатура, видеоподсистема, совместимая со стандартом VGA.

Для успешной и эффективной работы необходима ОС Windows 98/2000/XP/Vista. Платформа .NET.

4.1.2  Описание test-cases

TC-1. Проверить панель «Карты» на предмет возможности выбора карт любого ранга и масти.

TC-2. Проверить панель «Карты» на предмет возможности повторного выбора карты во время одной сессии.

TC-3. Проверить работу кнопки «Расчёт» на предмет расчёта вероятностей появления возможных комбинаций и вывода результатов на соответствующую панель.

TC-4. Проверить работу кнопки «Перезапуск» на предмет очистки информации о вероятностях текущей сессии и очистки панели «Стол».

TC-5. Проверить работу кнопки «Расчёт» при отсутствии карт на панели «Стол».

TC-6. Проверить работу программы при задании на панели «Стол» комбинации «Пара».

TC-7. Проверить работу программы при задании на панели «Стол» комбинации «Две пары».

TC-8. Проверить работу программы при задании на панели «Стол» комбинации «Сет».

ТС-9. Проверить работу программы при задании на панели «Стол» комбинации «Каре».

ТС-10. Проверить работу программы при задании на панели «Стол» комбинации «Стрит»

ТС-11. Проверить работу программы при задании на панели «Стол» комбинации «Флеш».

TC-12. Проверить работу программы при задании на панели «Стол» комбинации «Стрит Флеш».

TC-13. Проверить работу программы при задании на панели «Стол» комбинации «Флеш Рояль».

TC-14. Проверить работу программы при задании на панели «Стол» комбинации «Фулл Хаус».

TC-15. Проверить работу пункта меню «Вызов справки»

TC-16. Проверить работу пункта меню «Вызов справки» нажатием клавиши F1.

ТС-17. Проверить работу пункта меню «Расчёт».

ТС-18. Проверить работу пункта меню «Перезапуск».

ТС-19. Проверить работу пункта меню «О программе»

ТС-20. Проверить работу программы при ее длительной работе.

4.2     Протокол тестирования


Результаты испытаний програмного продукта представлены в Приложении Б. В таблице 4.2 приведен протокол тестирования, содержащий отчеты об обнаруженных ошибках и их устранении.

Таблица 4.2 - Отчеты об ошибках

№ пп

№ теста

Название ошибки

Приоритет

Серьезность

Ответственный за устранение

Дата обнаружения

Дата устранения

1

ТС- 5

Попытка произвести расчёт при отсутствии выбранных карт на столе

High

Серьезная

Вдовитченко А.В.

14.04. 2011

26.04.2009

2

ТС- 4

Невозможно изменить расклад. Не очищается «Стол»

High

серьезная

Вдовитченко А.В.

14.04. 2011

26.04.2011

3

ТС-20

Длительная работа программы

High

серьезная

Вдовитченко А.В.

17.04. 2011

27.04.2011

4

ТС-11

Неверные результаты расчёта

Low

minor

Вдовитченко А.В.

15.04. 2011

16.04.2011

5

ТС-12

Неверные результаты расчёта

Low

Enhancement

Вдовитченко А.В.

15.04. 2011

16.04.2011

6

ТС-16

Не работает вызов справки нажатием клавиши F1

Low

Enhancement

Вдовитченко А.В.

16.04. 2011

26.04.2011

 

5       

5.  ОПИСАНИЕ ПРИМЕНЕНИЯ


При первом запуске программы пользователь видит перед собой окно приветствия программы. Это окно можно увидеть на рис. 5.1.

Рисунок 5.1. - Окно приветствия программы

покерный калькулятор программный код

Для начала работы с программой необходимо выбрать пункт меню «Программа» и в выпадающем списке выбрать «Запуск». Появится основное окно приложения «Poker Helper» (рис. 5.2).Это окно - отправная точка для всех действий, которые пользователь может сделать с системой. Окно разделено на несколько сгруппированных панелей: панели выбора карт (слева), текущего расклада или «стола» (вверху справа), панели управления (в центре) и панели вывода результата расчётов, а также панели меню (вверху). Панель меню включает в себя вкладки «Программа», «Инфо о программе» и «Справка», где можно производить расчёты, вызывать справку, узнать информацию о разработчиках и т.п.

Рисунок 5.2. - Основное окно программы

Изначально система представляет собой приложение с онкрет по умолчанию, т.е. на столе и у игрока нет карт. Для расчёта необходимо изменить исходные данные. Для этого пользователь кликает левой кнопкой мыши на графическом изображении выбранной карты. Программа выдаст сообщение о том, что необходимо выбрать как минимум 5 карт (рис. 5.3).

Рисунок 5.3

После того, как выбраны 2 карты игрока и 3 карты флопа, можно рассчитать вероятности. Нажатие кнопки «Рассчитать» выведет на экран для каждой возможной комбинации (от пары до флеш рояль) шансы её появления (рис. 5.4). Далее пользователь может выбрать карты тёрна и ривера и нажатием кнопки «Рассчитать» получить новые вероятности возможных исходов игры, а также очистить «стол» и таблицу текущих шансов нажатием кнопки «Перезапуск».

Рисунок 5.4- расчёт вероятностей для флопа

Выбрав пункт «Инфо о программе» на панели меню и кликнув на нём левой кнопкой мыши, пользователь увидит в ответ окошко, где отображена информация о программном продукте «Poker Helper» (рис. 5.5).

Рисунок 5.5 - информация о программе

Заключение

Целью данной работы была разработка системы «Poker Helper».

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

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1.       Г.Буч «Язык UML.Руководство пользователя»

2.       Г.Буч, А. Джекодсон , Д.Рамбо «UML основы.Краткое руководство по унафицированному языку моделирования» 2-е издание

.        Влад.В.Головач «Дизайн пользовательского интерфейса»

4.       В.В.Лабор «С#.Создание приложений для Windows» - Минск; Харвест 2003 .- 384 с.

5.       Макконелл С. «Совершенный код. Мастер класс», М.:Издательство «Русская редакция» СПб.:Питер 2005.-896 стр.

.        Робинсон С, Корнес О, Глин Д «С# для проффесионалов» том I,II, М. :Издательство «ЛОРИ», 2005 .-1002 с.

7.       <http://msdn.microsoft.com/ru-ru/>

.        Лекции и лабораторный практикум по курсу «Современные средства проектирования программного обеспечения».

.        Гмурман В. Е. Теория вероятности и математическая статистика: Учеб. пособие вузов/ В. Е. Гмурман. - 9-е изд., стер. - М.: Высш. Шк., 2003. - 479 c.: ил.

.        <http://thepropoker.com/articles/48.html>

ПРИЛОЖЕНИЕ А

Листинг основных модулей

Класс ProgramSystem;System.Collections.Generic;System.Linq;System.Windows.Forms;Kursovoy

{class Program

{static Form1 Form1

{

{new System.NotImplementedException();

}

{

}

}static AboutBox1 AboutBox1

{

{new System.NotImplementedException();

}

{

}

}static Kursovoy.Properties.Settings Settings

{

{new System.NotImplementedException();

}

{

}

}

/// <summary>

/// Главная точка входа для приложения.

/// </summary>

[STAThread]void Main()

{.EnableVisualStyles();.SetCompatibleTextRenderingDefault(false);.Run(new Form1());

}

}

}

Класс Form1System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.Linq;System.Text;System.Windows.Forms;System.Diagnostics;Kursovoy

{partial class Form1 : Form

{Form1()

{();

}void Form1_Load(object sender, EventArgs e)

{.init();hSpase = -30;vSpace = 0;i;(i = 0; i < Cards.getLength(); i++)

{PictureBox1 = new ExtendedPictureBox();

// Set the location and size of the PictureBox control.((i % 4) == 0)

{= 10;+= 50;

} else

{+= 40;

}.Location = new System.Drawing.Point(vSpace, hSpase);.Size = new System.Drawing.Size(32, 42);.TabStop = false;.setResourseNameField(Cards.get(i).ToString());.Image = (Image)Properties.Resources.ResourceManager.GetObject(Cards.get(i).ToString());.Click += new System.EventHandler(cards_Click);

// Set the SizeMode property to the StretchImage value. This

// will shrink or enlarge the image as needed to fit into

// the PictureBox..SizeMode = PictureBoxSizeMode.Normal;

// Set the border style to a three-dimensional border..BorderStyle = BorderStyle.Fixed3D;

// Add the PictureBox to the form..Controls.Add(PictureBox1);

}

}

[System.Runtime.InteropServices.DllImport("gdi32.dll")]static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest,nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);Bitmap memoryImage;void CaptureScreen()

{mygraphics = this.CreateGraphics();s = this.Size;= new Bitmap(s.Width, s.Height, mygraphics);memoryGraphics = Graphics.FromImage(memoryImage);dc1 = mygraphics.GetHdc();dc2 = memoryGraphics.GetHdc();(dc2, 0, 0, this.ClientRectangle.Width,.ClientRectangle.Height, dc1, 0, 0, 13369376);.ReleaseHdc(dc1);.ReleaseHdc(dc2);

}void printDocument1_PrintPage(System.Object sender, System.Drawing.Printing.PrintPageEventArgs e)

{.Graphics.DrawImage(memoryImage, 0, 0);

}void cards_Click(object sender, EventArgs e)

{pic = (ExtendedPictureBox)sender;card = Cards.get(pic.getResourseNameField());.setBlocked(true);(Desk.addCard(card))

{1:.Show("Выберите 5 или 6 или 7 карт");

karta1igroka.Image = pic.Image;;2:igroka.Image = pic.Image;;3:.Image = pic.Image;;4:.Image = pic.Image;;5:.Image = pic.Image;;6:.Image = pic.Image;;7:.Image = pic.Image;.Visible = false;;:

MessageBox.Show("Выбранно больше чем 7 карт, перезапустите программу и повторите выбор");

break;

}

}void button1_Click(object sender, EventArgs e)

{.SetCard();[] ver = new float[9];

//когда у нас 7 карт - ни на что не делим, когда 6 - на 46, а когда 5- на 1081

float i=1;(Desk.Count)

{5:= 1081;;6:= 46;;7:= 1;;:

MessageBox.Show(("Ошибка в определении вероятности перезапустите программу"+"r/n"+"Если ошибка повторится обратитесь к разработчику"));

break;

}[0] = (CombinationMaker.PAIR / i)*100;[1] = (CombinationMaker.TWO_PAIR / i)*100;[2] = (CombinationMaker.SET / i)*100;[3] = (CombinationMaker.STRAIGHT / i)*100;[4] = (CombinationMaker.FLUSH / i)*100;[5] = (CombinationMaker.FULL_HOUSE / i)*100;[6] = (CombinationMaker.KARE / i)*100;[7] = (CombinationMaker.STRAIGHT_FLUSH / i)*100;[8] = (CombinationMaker.ROYAL_FLUSH / i)*100;

.Text = Convert.ToString(ver[0]) + '%';_PAIR.Text = Convert.ToString(ver[1]) + '%';.Text = Convert.ToString(ver[2]) + '%';.Text = Convert.ToString(ver[3]) + '%';.Text = Convert.ToString(ver[4]) + '%';_HOUSE.Text = Convert.ToString(ver[5]) + '%';.Text = Convert.ToString(ver[6]) + '%';_FLUSH.Text = Convert.ToString(ver[7]) + '%';_Flash.Text = Convert.ToString(ver[8]) + '%';

}void button2_Click(object sender, EventArgs e)

{.Restart();

}void выходToolStripMenuItem1_Click(object sender, EventArgs e)

{.Exit();

}void печатьToolStripMenuItem_Click(object sender, EventArgs e)

{();.Print();

}void перезапускToolStripMenuItem_Click(object sender, EventArgs e)

{.Restart();

}void инфоОПрограммеToolStripMenuItem_Click(object sender, EventArgs e)

{a=new AboutBox1();.Show();

}void запускToolStripMenuItem1_Click(object sender, EventArgs e)

{.Visible = true;.Visible = true;.Visible = false;.Visible = true;.Visible = true;.Visible = true;

}void справкаToolStripMenuItem_Click(object sender, EventArgs e)

{

{SysInfo = new Process();.StartInfo.ErrorDialog = true;.StartInfo.FileName = "PokerStudio.chm";.Start();

}(Exception ex)

{.Show(ex.Message);

}

}AboutBox1 AboutBox1

{

{new System.NotImplementedException();

}

{

}

}Kursovoy.Properties.Resources Resources

{

{new System.NotImplementedException();

}

{

}

}Kursovoy.Properties.Settings Settings

{

{new System.NotImplementedException();

}

{

}

}

}

}

Класс DeskSystem;System.Collections.Generic;System.ComponentModel;System.Data;System.Text;System.Windows.Forms;Kursovoy

{static class Desk

{static ExtendedPictureBox[] playerCards = new ExtendedPictureBox[7];static Card[] playerCardsDesk = new Card[7];static int Count = 0;static ExtendedPictureBox ExtendedPictureBox

{

{new System.NotImplementedException();

}

{

}

}static CombinationMaker CombinationMaker

{

{new System.NotImplementedException();

}

{

}

}static Combination Combination

{

{new System.NotImplementedException();

}

{

}

}static Card Card

{

{new System.NotImplementedException();

}

{

}

}static int addCard(Card card)

{(Count < playerCards.Length)

{[Count] = new ExtendedPictureBox();[Count] = card;++Count;

}

{ /* throw new Exception("Err"); */ }-1;

}

}

}

Класс CombinationMakerSystem;System.Collections.Generic;System.Linq;System.Text;System.Windows.Forms;Kursovoy

{class CombinationMaker

{static int NONE = 0;static int HIGH_CARD = 0;static int PAIR = 0;static int TWO_PAIR = 0;static int SET = 0;static int STRAIGHT = 0;static int FLUSH = 0;static int FULL_HOUSE = 0;static int KARE = 0;static int STRAIGHT_FLUSH = 0;static int ROYAL_FLUSH = 0;static Card[] playerCards=new Card[7];Combination Combination

{

{new System.NotImplementedException();

}

{

}

}Cards Cards

{

{new System.NotImplementedException();

}

{

}

}static void SetCard()

{= Desk.playerCardsDesk;(Desk.Count)

{5:

{[] card=new Card[2];pr,i = 1;(int p = 0; p < 52; p++)

{(pr = i; pr < 52; pr++)

{=TwoCard(p, pr);(card[0] != null && card[1]!=null)

{(int n = 0; n < 2; n++)

{[Desk.Count+n]=card[n];

}.Calculate();(Combination.val);

}

}++;

};

}6:(int i = 0; i < 52; i++)

{card1=OneCard(i);(card1 != null)

{[Desk.Count] = card1;.Calculate();(Combination.val);[Desk.Count] = null;

}

};7:= Desk.playerCardsDesk;.Calculate();(Combination.val);;

}

}static Card OneCard(int j)

{ch=0;a=null;(int h=0;h<Desk.Count;h++)

{(Desk.playerCardsDesk[h] != Cards.get(j))

{++;

}

}(ch == Desk.Count)= Cards.get(j);a;

}static Card[] TwoCard(int j,int h)

{ch = 0;[] a=new Card[2];(int k = 0; k < Desk.Count; k++)

{((Desk.playerCardsDesk[k]!=Cards.get(j))&&(Desk.playerCardsDesk[k]!=Cards.get(h)))

{++;

}

}(ch==Desk.Count)

{[0] = Cards.get(j);[1] = Cards.get(h);

}a;

}static void Kolichestvo(int val)

{(val)

{0:++;;1:_CARD++;;2:++;;3:_PAIR++;;4:++;;5:++;;6:++;;7:_HOUSE++;;8:++;;9:_FLUSH++;;10:_FLUSH++;;

default:.Show("Если вы видите это сообщение, то это ошибка");

break;

}

}

}

}

Класс Combination: using System;System.Collections.Generic;System.Linq;System.Text;Kursovoy

{Combination

{static int[] rangCard = new int[14];static int[] mastCard = new int[5];static bool Bolle(int secMax)

{(secMax >= 1)

{true;

}return false;

}

// constantsconst int COMBINATION_NUMBER = 11;const int NONE = 0;const int HIGH_CARD = 1;const int PAIR = 2;const int TWO_PAIR = 3;const int SET = 4;const int STRAIGHT = 5;const int FLUSH = 6;const int FULL_HOUSE = 7;const int KARE = 8;const int STRAIGHT_FLUSH = 9;const int ROYAL_FLUSH = 10;const int CARD_NUMBER = 7;static int val;static void zeroArray(Array ar)

{.Clear(ar,0,ar.Length);

}static void Calculate()

{(rangCard);(mastCard);(int i = 0; i < CombinationMaker.playerCards.Length; i++)

{(CombinationMaker.playerCards[i].Rangi())

{"2":[Card.TWO] = rangCard[Card.TWO] + 1;;"3":[Card.THREE] = rangCard[Card.THREE] + 1;;"4":[Card.FOUR] = rangCard[Card.FOUR] + 1;;"5":[Card.FIVE] = rangCard[Card.FIVE] + 1;;"6":[Card.SIX] = rangCard[Card.SIX] + 1;;"7":[Card.SEVEN] = rangCard[Card.SEVEN] + 1;;"8":[Card.EIGHT] = rangCard[Card.EIGHT] + 1;;"9":[Card.NINE] = rangCard[Card.NINE] + 1;;"10":[Card.TEN] = rangCard[Card.TEN] + 1;;"J":[Card.JACK] = rangCard[Card.JACK] + 1;;"Q":[Card.QUEEN] = rangCard[Card.QUEEN] + 1;;"K":[Card.KING] = rangCard[Card.KING] + 1;;"T":[Card.ACE] = rangCard[Card.ACE] + 1;;

}(CombinationMaker.playerCards[i].Masti())

{"P":[Card.SPADES] = mastCard[Card.SPADES] + 1;;"CH":[Card.HEARTS] = mastCard[Card.HEARTS] + 1;;"K":[Card.CLUBS] = mastCard[Card.CLUBS] + 1;;"B":[Card.DIAMONDS] = mastCard[Card.DIAMONDS] + 1;;

}

}

/*for (int i = 0; i < 13; i++)

{.Show(Convert.ToString(rangCard[i]));

}(int j = 0; j < 4; j++)

{.Show(Convert.ToString(mastCard[j]));

}*/isFl = isFlush(mastCard);isST = isStraight(rangCard);(Bolle(isFl) && Bolle(isST) && checkStraightFlush(isFl))

{(isST == Card.ACE)

{= ROYAL_FLUSH;

}val = STRAIGHT_FLUSH;

}

{maxNum = maxNumberOfSimilarCards(rangCard);(maxNum == 4) { val = KARE; }

{secMax = secMaxNumberOfSimilarCards(rangCard, maxNum);(secMax && (maxNum == 3))= FULL_HOUSE;if (Bolle(isFl))= FLUSH;if (Bolle(isST))= STRAIGHT;if (maxNum == 3)= SET;if ((maxNum == 2) && secMax)= TWO_PAIR;if (maxNum == 2)= PAIR;

// If we want describe one card situation, write it here= NONE;

}

}

}static bool checkStraightFlush(int suit)

{[] I_values = new int[Card.VALUE_NUMBER];(int i = 0; i < CARD_NUMBER; i++)

{(CombinationMaker.playerCards[i].Suit() == suit)

{(Desk.playerCardsDesk[i].Rangi())

{"2":_values[Card.TWO] = I_values[Card.TWO] + 1;;"3":_values[Card.THREE] = I_values[Card.THREE] + 1;;"4":_values[Card.FOUR] = I_values[Card.FOUR] + 1;;"5":_values[Card.FIVE] = I_values[Card.FIVE] + 1;;"6":_values[Card.SIX] = I_values[Card.SIX] + 1;;"7":_values[Card.SEVEN] = I_values[Card.SEVEN] + 1;;"8":_values[Card.EIGHT] = I_values[Card.EIGHT] + 1;;"9":_values[Card.NINE] = I_values[Card.NINE] + 1;;"10":_values[Card.TEN] = I_values[Card.TEN] + 1;;"J":_values[Card.JACK] = I_values[Card.JACK] + 1;;"Q":_values[Card.QUEEN] = I_values[Card.QUEEN] + 1;;"K":_values[Card.KING] = I_values[Card.KING] + 1;;"T":_values[Card.ACE] = I_values[Card.ACE] + 1;;

}

}_values[Card.FAKE_ACE] = I_values[Card.ACE];Bolle(isStraight(I_values));

}static int isFlush(int[] mastCard)

{(mastCard[Card.SPADES] >= 5)Card.SPADES;if (mastCard[Card.CLUBS] >= 5)Card.CLUBS;if (mastCard[Card.DIAMONDS] >= 5)Card.DIAMONDS;if (mastCard[Card.HEARTS] >= 5)Card.HEARTS;0;

}static int isStraight(int[] values)

{i = 0;str_num = 0;(i = Card.VALUE_NUMBER - 1; (i >= 0) && (str_num < 5); i--)

{(values[i] > 0)_num++;_num = 0;

}(str_num == 5)i + 5;0;

}static int maxNumberOfSimilarCards(int[] values)

{maxValue = 0; ;(var i = Card.TWO; i < Card.VALUE_NUMBER; i++)

{(maxValue < values[i])= values[i];

}maxValue;

}static bool secMaxNumberOfSimilarCards(int[] values, int max)

{secMaxValue = 0;isMaxUsed = false;(var i = Card.TWO; i < Card.VALUE_NUMBER; i++)

{(!isMaxUsed && (values[i] == max))= true;if (secMaxValue < values[i])= values[i];

}(secMaxValue>1);

}static string getTextValue()

{(val)

{NONE:"Нет комбинации";HIGH_CARD:"Кикер (пока не работает)";PAIR:"Пара";TWO_PAIR:"Две пары";SET:"Сет";STRAIGHT:"Стрит";FLUSH:"Флеш";FULL_HOUSE:"Фул хаус";KARE:"Каре";STRAIGHT_FLUSH:"Стрит-флеш";ROYAL_FLUSH:

return "Флеш-рояль";:"Если вы видите это сообщение, то это ошибка";

}

}

}

}

Класс CardsSystem;System.Collections.Generic;System.Linq;System.Text;System.Windows.Forms;Kursovoy

{class Cards

{private long length;static int[] valu = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ,13};static int[] sui = new int[] { 1, 2, 3,4 };static string[] mast = new string[] { "P", "CH", "K", "B" };static string[] rang = new string[] { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "T" };private Card[] cards = new Card[52];

Combination Combination

{

{new System.NotImplementedException();

}

{

}

}Kursovoy.Properties.Resources Resources

{

{new System.NotImplementedException();

}

{

}

}static void init()

{counter = 0;(int i = 0; i < mast.Length; i++)

{(int j = 0; j < rang.Length; j++)

{[counter++] = new Card(mast[i], rang[j],valu[j],sui[i]);

}

}= counter;

}static long getLength()

{length;

}static Card get(int index)

{cards[index];

}static Card get(string escapedObject)

{(Card card in cards)

{(card.ToString().Equals(escapedObject))

{card;

}

}

null;

}static void set(int index, string mast, string rang,int value,int suits)

{[index] = new Card(mast, rang,value,suits);

}

}

}

Класс CardSystem;System.Collections.Generic;System.Linq;System.Text;Kursovoy

{class Card : Cards

{

// valuesconst int VALUE_NUMBER = 14;const int FAKE_ACE = 0;const int TWO = 1;const int THREE = 2;const int FOUR = 3;const int FIVE = 4;const int SIX = 5;const int SEVEN = 6;const int EIGHT = 7;const int NINE = 8;const int TEN = 9;const int JACK =10;const int QUEEN = 11;const int KING = 12;const int ACE = 13;

// Suitsconst int SUIT_NUMBER = 4;const int SPADES = 1;const int CLUBS = 2;const int DIAMONDS = 3;const int HEARTS = 4;string suits;string values;int val, suit;Card(string suits, string values,int val,int suit)

{.suits = suits;.values = values;.val = val;.suit = suit;

}override string ToString()

{String.Format("{0}{1}", this.suits, this.values);

}string Masti()

{String.Format(this.suits);

}string Rangi()

{String.Format(this.values);

}int Val()

{this.val;

}int Suit()

{this.suit;

}

}

}

ПРИЛОЖЕНИЕ Б

Результаты тестирования.

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

Время тестирования

Начало тестирования:  14.04.2011  14.00

Окончание тестирования:      21.04.2011  19.00

Конфигурация Hardware

Процессор:          Intel Core 2 Duo 2.4 GHz

ОЗУ:           3Гб

ОС:             Windows ХР

Шаги тестирования

.        Установка продукта на ПК.

.        Чтение спецификации.

.        Проверка работы пунктов меню.

.        Выбор карт различных мастей и рангов на панели «Карты».

.        Проверка работы кнопок панели управления.

.        Проверка правильности расчётов для всех возможных комбинаций (от пары до Флеш Рояль)

.        Проверка работы программы при её длительной работе.

Пункты, которым уделялось особое внимание

Общая работоспособность программы. Выполнение основных функций. Правильность результатов расчёта.

Найдено

K - багов спецификации; К = 1

L - функциональных багов; L = 4

M - багов в результате стресс тестирования. М = 1

Из них 3 бага подлежит немедленному исправлению, т.к. их наличие мешает выполнению назначения программы. (BugIDs <1!!!><2><3>)

Итоги

При проведении тестирования проверялась спецификация в полном объеме. Возможно, некоторые ошибки были упущены.

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

Необходимо подключить справку. Исправить ошибки в расчёте вероятностей для комбинаций Флеш и Стрит Флеш. В интерфейсе следует изменить цвет шрифта, т.к. он сливается с фоном.

Похожие работы на - Создание информационной системы 'Poker Helper' с использованием современных средств и подходов проектирования программного обеспечения

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!