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

Требования проектирования одного из вариантов покерного калькулятора. Расчет вероятностей появления возможных комбинаций карт в игре при симуляции любого расклада. Модульная структура продукта. Документация по программному коду. Описание test-cases.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 03.12.2012
Размер файла 5,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

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

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

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

Кафедра 304

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

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

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

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

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

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

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

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

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

Проверил:

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

Харьков 2010

РЕФЕРАТ

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

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

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

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

СОДЕРЖАНИЕ

  • РЕФЕРАТ
  • ВВЕДЕНИЕ
  • 1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ
  • 1.1 Основание для разработки.
  • 1.2 Назначение разработки.
  • 1.3 Требование пользователя.
  • 1.4 Требование к программному продукту.
  • 1.4.1 Функциональные требования.
  • 1.4.2 Требование к интерфейсу.
  • 1.4.3 Требования к ресурсам.
  • 1.4.4 Требование к производительности.
  • 1.4.5 Требование к верификации.
  • 1.4.6 Требование к документации
  • 1.4.7 Требование к защите информации.
  • 1.4.8 Требование к условиям эксплуатации.
  • 1.5 Матрица трассируемости требований.
  • 1.6 Стадии и этапы разработки:
  • 2. ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ АНАЛИЗ И ПРОЕКТИРОВАНИЕ СИСТЕМЫ
  • 2.1 Моделирование системы
  • 2.1.1 Диаграмма прецедентов
  • 2.1.2 Диаграмма деятельности
  • 2.1.3 Диаграмма классов
  • 3. ОПИСАНИЕ ПРОГРАММНОГО ПРОДУКТА
  • 3.1 Формат входных/выходных данных
  • 3.2 Модульная структура продукта
  • 3.3 Документация по программному коду
  • 4. ИСПЫТАНИЯ ПРОГРАММНОГО ПРОДУКТА
  • 4.1 Тест-план
  • 4.1.1 Ресурсы
  • 4.1.2 Описание test-cases
  • 4.2 Протокол тестирования
  • 5. ОПИСАНИЕ ПРИМЕНЕНИЯ
  • Заключение
  • СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
  • ПРИЛОЖЕНИЕ А
  • ПРИЛОЖЕНИЕ Б
  • ПРИЛОЖЕНИЕ В

ВВЕДЕНИЕ

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

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

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

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

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

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

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

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

В данной работе будет произведено проектирование одного из вариантов покерного калькулятора. Основными требованиями являлось создание простого и удобного счетчика шансов для реальной игры и большинства существующих игр онлайн покера. Этот онлайн калькулятор поможет рассчитать шансы появления той или иной комбинации карт в игре покер Холдем. “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 Mb

CD-ROM

Операционная система: 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

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

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

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

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

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

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

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

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

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

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

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

Критерий

Коэфф.

Вес-ти

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

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

Название

Ед.

изм

Вар.

А

Вар.

В

Вар.

С

А

В

С

K

K

1

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

ресурсам

0.15

100

50

100

1

0.5

1

2

Дружест-венность

Пользова-телю

балл

0.20

5

4

3

1

0.8

0.6

3

цена

0.20

4

5

4

0.8

1

0.8

4

Затраты

на адапта-цию

балл

0.15

5

3

3

1

0.6

0.6

5

БД

балл

0.15

5

3

3

1

0.6

0.6

6

Соотв.

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

балл

0.15

5

4

5

1

0.8

1

Итого:

0.96

0.735

0.79

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

Вариант А - C#

Вариант B - Object Pascal

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2.1.2

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-е издание

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

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

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

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

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

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

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

10. http://thepropoker.com/articles/48.html

ПРИЛОЖЕНИЕ А

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

Класс Program

using System;

using System.Collections.Generic;

using System.Linq;

using System.Windows.Forms;

namespace Kursovoy

{

static class Program

{

public static Form1 Form1

{

get

{

throw new System.NotImplementedException();

}

set

{

}

}

internal static AboutBox1 AboutBox1

{

get

{

throw new System.NotImplementedException();

}

set

{

}

}

internal static Kursovoy.Properties.Settings Settings

{

get

{

throw new System.NotImplementedException();

}

set

{

}

}

/// <summary>

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

/// </summary>

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Form1());

}

}

}

Класс Form1

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Diagnostics;

namespace Kursovoy

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void Form1_Load(object sender, EventArgs e)

{

Cards.init();

int hSpase = -30;

int vSpace = 0;

int i;

for (i = 0; i < Cards.getLength(); i++)

{

ExtendedPictureBox PictureBox1 = new ExtendedPictureBox();

// Set the location and size of the PictureBox control.

if ((i % 4) == 0)

{

vSpace = 10;

hSpase += 50;

} else

{

vSpace += 40;

}

PictureBox1.Location = new System.Drawing.Point(vSpace, hSpase);

PictureBox1.Size = new System.Drawing.Size(32, 42);

PictureBox1.TabStop = false;

PictureBox1.setResourseNameField(Cards.get(i).ToString());

PictureBox1.Image = (Image)Properties.Resources.ResourceManager.GetObject(Cards.get(i).ToString());

PictureBox1.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.

PictureBox1.SizeMode = PictureBoxSizeMode.Normal;

// Set the border style to a three-dimensional border.

PictureBox1.BorderStyle = BorderStyle.Fixed3D;

// Add the PictureBox to the form.

groupBox2.Controls.Add(PictureBox1);

}

}

[System.Runtime.InteropServices.DllImport("gdi32.dll")]

public static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest,

int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);

private Bitmap memoryImage;

private void CaptureScreen()

{

Graphics mygraphics = this.CreateGraphics();

Size s = this.Size;

memoryImage = new Bitmap(s.Width, s.Height, mygraphics);

Graphics memoryGraphics = Graphics.FromImage(memoryImage);

IntPtr dc1 = mygraphics.GetHdc();

IntPtr dc2 = memoryGraphics.GetHdc();

BitBlt(dc2, 0, 0, this.ClientRectangle.Width,

this.ClientRectangle.Height, dc1, 0, 0, 13369376);

mygraphics.ReleaseHdc(dc1);

memoryGraphics.ReleaseHdc(dc2);

}

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

{

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

}

private void cards_Click(object sender, EventArgs e)

{

ExtendedPictureBox pic = (ExtendedPictureBox)sender;

Card card = Cards.get(pic.getResourseNameField());

pic.setBlocked(true);

switch (Desk.addCard(card))

{

case 1:

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

karta1igroka.Image = pic.Image;

break;

case 2:

karta2igroka.Image = pic.Image;

break;

case 3:

kartastol1.Image = pic.Image;

break;

case 4:

kartastol2.Image = pic.Image;

break;

case 5:

kartastol3.Image = pic.Image;

break;

case 6:

kartastol4.Image = pic.Image;

break;

case 7:

kartastol5.Image = pic.Image;

groupBox2.Visible = false;

break;

default:

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

break;

}

}

private void button1_Click(object sender, EventArgs e)

{

CombinationMaker.SetCard();

float[] ver = new float[9];

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

float i=1;

switch (Desk.Count)

{

case 5:

i = 1081;

break;

case 6:

i = 46;

break;

case 7:

i = 1;

break;

default:

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

break;

}

ver[0] = (CombinationMaker.PAIR / i)*100;

ver[1] = (CombinationMaker.TWO_PAIR / i)*100;

ver[2] = (CombinationMaker.SET / i)*100;

ver[3] = (CombinationMaker.STRAIGHT / i)*100;

ver[4] = (CombinationMaker.FLUSH / i)*100;

ver[5] = (CombinationMaker.FULL_HOUSE / i)*100;

ver[6] = (CombinationMaker.KARE / i)*100;

ver[7] = (CombinationMaker.STRAIGHT_FLUSH / i)*100;

ver[8] = (CombinationMaker.ROYAL_FLUSH / i)*100;

PAIR.Text = Convert.ToString(ver[0]) + '%';

TWO_PAIR.Text = Convert.ToString(ver[1]) + '%';

SET.Text = Convert.ToString(ver[2]) + '%';

STRAIGHT.Text = Convert.ToString(ver[3]) + '%';

FLUSH.Text = Convert.ToString(ver[4]) + '%';

FULL_HOUSE.Text = Convert.ToString(ver[5]) + '%';

KARE.Text = Convert.ToString(ver[6]) + '%';

STRAIGHT_FLUSH.Text = Convert.ToString(ver[7]) + '%';

ROYAL_Flash.Text = Convert.ToString(ver[8]) + '%';

}

private void button2_Click(object sender, EventArgs e)

{

Application.Restart();

}

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

{

Application.Exit();

}

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

{

CaptureScreen();

printDocument1.Print();

}

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

{

Application.Restart();

}

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

{

AboutBox1 a=new AboutBox1();

a.Show();

}

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

{

panel3.Visible = true;

panel1.Visible = true;

richTextBox1.Visible = false;

groupBox1.Visible = true;

groupBox2.Visible = true;

groupBox3.Visible = true;

}

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

{

try

{

Process SysInfo = new Process();

SysInfo.StartInfo.ErrorDialog = true;

SysInfo.StartInfo.FileName = "PokerStudio.chm";

SysInfo.Start();

}

catch (Exception ex)

{

MessageBox.Show(ex.Message);

}

}

internal AboutBox1 AboutBox1

{

get

{

throw new System.NotImplementedException();

}

set

{

}

}

internal Kursovoy.Properties.Resources Resources

{

get

{

throw new System.NotImplementedException();

}

set

{

}

}

internal Kursovoy.Properties.Settings Settings

{

get

{

throw new System.NotImplementedException();

}

set

{

}

}

}

}

Класс Desk

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Text;

using System.Windows.Forms;

namespace Kursovoy

{

public static class Desk

{

public static ExtendedPictureBox[] playerCards = new ExtendedPictureBox[7];

public static Card[] playerCardsDesk = new Card[7];

public static int Count = 0;

public static ExtendedPictureBox ExtendedPictureBox

{

get

{

throw new System.NotImplementedException();

}

set

{

}

}

public static CombinationMaker CombinationMaker

{

get

{

throw new System.NotImplementedException();

}

set

{

}

}

internal static Combination Combination

{

get

{

throw new System.NotImplementedException();

}

set

{

}

}

public static Card Card

{

get

{

throw new System.NotImplementedException();

}

set

{

}

}

public static int addCard(Card card)

{

if (Count < playerCards.Length)

{

playerCards[Count] = new ExtendedPictureBox();

playerCardsDesk[Count] = card;

return ++Count;

}

else

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

return -1;

}

}

}

Класс CombinationMaker

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Kursovoy

{

public class CombinationMaker

{

public static int NONE = 0;

public static int HIGH_CARD = 0;

public static int PAIR = 0;

public static int TWO_PAIR = 0;

public static int SET = 0;

public static int STRAIGHT = 0;

public static int FLUSH = 0;

public static int FULL_HOUSE = 0;

public static int KARE = 0;

public static int STRAIGHT_FLUSH = 0;

public static int ROYAL_FLUSH = 0;

public static Card[] playerCards=new Card[7];

internal Combination Combination

{

get

{

throw new System.NotImplementedException();

}

set

{

}

}

public Cards Cards

{

get

{

throw new System.NotImplementedException();

}

set

{

}

}

public static void SetCard()

{

playerCards = Desk.playerCardsDesk;

switch (Desk.Count)

{

case 5:

{

Card[] card=new Card[2];

int pr,i = 1;

for (int p = 0; p < 52; p++)

{

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

{

card=TwoCard(p, pr);

if (card[0] != null && card[1]!=null)

{

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

{

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

}

Combination.Calculate();

Kolichestvo(Combination.val);

}

}

i++;

}

break;

}

case 6:

for (int i = 0; i < 52; i++)

{

Card card1=OneCard(i);

if (card1 != null)

{

playerCards[Desk.Count] = card1;

Combination.Calculate();

Kolichestvo(Combination.val);

playerCards[Desk.Count] = null;

}

}

break;

case 7:

playerCards = Desk.playerCardsDesk;

Combination.Calculate();

Kolichestvo(Combination.val);

break;

}

}

private static Card OneCard(int j)

{

int ch=0;

Card a=null;

for(int h=0;h<Desk.Count;h++)

{

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

{

ch++;

}

}

if (ch == Desk.Count)

a = Cards.get(j);

return a;

}

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

{

int ch = 0;

Card[] a=new Card[2];

for (int k = 0; k < Desk.Count; k++)

{

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

{

ch++;

}

}

if(ch==Desk.Count)

{

a[0] = Cards.get(j);

a[1] = Cards.get(h);

}

return a;

}

private static void Kolichestvo(int val)

{

switch (val)

{

case 0:

NONE++;

break;

case 1:

HIGH_CARD++;

break;

case 2:

PAIR++;

break;

case 3:

TWO_PAIR++;

break;

case 4:

SET++;

break;

case 5:

STRAIGHT++;

break;

case 6:

FLUSH++;

break;

case 7:

FULL_HOUSE++;

break;

case 8:

KARE++;

break;

case 9:

STRAIGHT_FLUSH++;

break;

case 10:

ROYAL_FLUSH++;

break;

default:

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

break;

}

}

}

}

Класс Combination: using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Kursovoy

{

class Combination

{

private static int[] rangCard = new int[14];

private static int[] mastCard = new int[5];

private static bool Bolle(int secMax)

{

if (secMax >= 1)

{

return true;

}

else return false;

}

// constants

private const int COMBINATION_NUMBER = 11;

private const int NONE = 0;

private const int HIGH_CARD = 1;

private const int PAIR = 2;

private const int TWO_PAIR = 3;

private const int SET = 4;

private const int STRAIGHT = 5;

private const int FLUSH = 6;

private const int FULL_HOUSE = 7;

private const int KARE = 8;

private const int STRAIGHT_FLUSH = 9;

private const int ROYAL_FLUSH = 10;

private const int CARD_NUMBER = 7;

public static int val;

public static void zeroArray(Array ar)

{

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

}

public static void Calculate()

{

zeroArray(rangCard);

zeroArray(mastCard);

for (int i = 0; i < CombinationMaker.playerCards.Length; i++)

{

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

{

case "2":

rangCard[Card.TWO] = rangCard[Card.TWO] + 1;

break;

case "3":

rangCard[Card.THREE] = rangCard[Card.THREE] + 1;

break;

case "4":

rangCard[Card.FOUR] = rangCard[Card.FOUR] + 1;

break;

case "5":

rangCard[Card.FIVE] = rangCard[Card.FIVE] + 1;

break;

case "6":

rangCard[Card.SIX] = rangCard[Card.SIX] + 1;

break;

case "7":

rangCard[Card.SEVEN] = rangCard[Card.SEVEN] + 1;

break;

case "8":

rangCard[Card.EIGHT] = rangCard[Card.EIGHT] + 1;

break;

case "9":

rangCard[Card.NINE] = rangCard[Card.NINE] + 1;

break;

case "10":

rangCard[Card.TEN] = rangCard[Card.TEN] + 1;

break;

case "J":

rangCard[Card.JACK] = rangCard[Card.JACK] + 1;

break;

case "Q":

rangCard[Card.QUEEN] = rangCard[Card.QUEEN] + 1;

break;

case "K":

rangCard[Card.KING] = rangCard[Card.KING] + 1;

break;

case "T":

rangCard[Card.ACE] = rangCard[Card.ACE] + 1;

break;

}

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

{

case "P":

mastCard[Card.SPADES] = mastCard[Card.SPADES] + 1;

break;

case "CH":

mastCard[Card.HEARTS] = mastCard[Card.HEARTS] + 1;

break;

case "K":

mastCard[Card.CLUBS] = mastCard[Card.CLUBS] + 1;

break;

case "B":

mastCard[Card.DIAMONDS] = mastCard[Card.DIAMONDS] + 1;

break;

}

}

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

{

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

}

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

{

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

}*/

int isFl = isFlush(mastCard);

int isST = isStraight(rangCard);

if (Bolle(isFl) && Bolle(isST) && checkStraightFlush(isFl))

{

if (isST == Card.ACE)

{

val = ROYAL_FLUSH;

}

else val = STRAIGHT_FLUSH;

}

else

{

int maxNum = maxNumberOfSimilarCards(rangCard);

if (maxNum == 4) { val = KARE; }

else

{

bool secMax = secMaxNumberOfSimilarCards(rangCard, maxNum);

if (secMax && (maxNum == 3))

val = FULL_HOUSE;

else if (Bolle(isFl))

val = FLUSH;

else if (Bolle(isST))

val = STRAIGHT;

else if (maxNum == 3)

val = SET;

else if ((maxNum == 2) && secMax)

val = TWO_PAIR;

else if (maxNum == 2)

val = PAIR;

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

else

val = NONE;

}

}

}

private static bool checkStraightFlush(int suit)

{

int[] I_values = new int[Card.VALUE_NUMBER];

for (int i = 0; i < CARD_NUMBER; i++)

{

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

{

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

{

case "2":

I_values[Card.TWO] = I_values[Card.TWO] + 1;

break;

case "3":

I_values[Card.THREE] = I_values[Card.THREE] + 1;

break;

case "4":

I_values[Card.FOUR] = I_values[Card.FOUR] + 1;

break;

case "5":

I_values[Card.FIVE] = I_values[Card.FIVE] + 1;

break;

case "6":

I_values[Card.SIX] = I_values[Card.SIX] + 1;

break;

case "7":

I_values[Card.SEVEN] = I_values[Card.SEVEN] + 1;

break;

case "8":

I_values[Card.EIGHT] = I_values[Card.EIGHT] + 1;

break;

case "9":

I_values[Card.NINE] = I_values[Card.NINE] + 1;

break;

case "10":

I_values[Card.TEN] = I_values[Card.TEN] + 1;

break;

case "J":

I_values[Card.JACK] = I_values[Card.JACK] + 1;

break;

case "Q":

I_values[Card.QUEEN] = I_values[Card.QUEEN] + 1;

break;

case "K":

I_values[Card.KING] = I_values[Card.KING] + 1;

break;

case "T":

I_values[Card.ACE] = I_values[Card.ACE] + 1;

break;

}

}

}

I_values[Card.FAKE_ACE] = I_values[Card.ACE];

return Bolle(isStraight(I_values));

}

private static int isFlush(int[] mastCard)

{

if (mastCard[Card.SPADES] >= 5)

return Card.SPADES;

else if (mastCard[Card.CLUBS] >= 5)

return Card.CLUBS;

else if (mastCard[Card.DIAMONDS] >= 5)

return Card.DIAMONDS;

else if (mastCard[Card.HEARTS] >= 5)

return Card.HEARTS;

else

return 0;

}

private static int isStraight(int[] values)

{

int i = 0;

int str_num = 0;

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

{

if (values[i] > 0)

str_num++;

else

str_num = 0;

}

if (str_num == 5)

return i + 5;

else

return 0;

}

public static int maxNumberOfSimilarCards(int[] values)

{

int maxValue = 0; ;

for (var i = Card.TWO; i < Card.VALUE_NUMBER; i++)

{

if (maxValue < values[i])

maxValue = values[i];

}

return maxValue;

}

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

{

int secMaxValue = 0;

bool isMaxUsed = false;

for (var i = Card.TWO; i < Card.VALUE_NUMBER; i++)

{

if (!isMaxUsed && (values[i] == max))

isMaxUsed = true;

else if (secMaxValue < values[i])

secMaxValue = values[i];

}

return (secMaxValue>1);

}

public static string getTextValue()

{

switch (val)

{

case NONE:

return "Нет комбинации";

case HIGH_CARD:

return "Кикер (пока не работает)";

case PAIR:

return "Пара";

case TWO_PAIR:

return "Две пары";

case SET:

return "Сет";

case STRAIGHT:

return "Стрит";

case FLUSH:

return "Флеш";

case FULL_HOUSE:

return "Фул хаус";

case KARE:

return "Каре";

case STRAIGHT_FLUSH:

return "Стрит-флеш";

case ROYAL_FLUSH:

return "Флеш-рояль";

default:

return "Если вы видите это сообщение, то это ошибка";

}

}

}

}

Класс Cards

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Kursovoy

{

public class Cards

{

static private long length;

public static int[] valu = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 ,13};

public static int[] sui = new int[] { 1, 2, 3,4 };

public static string[] mast = new string[] { "P", "CH", "K", "B" };

public static string[] rang = new string[] { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "T" };

static private Card[] cards = new Card[52];

internal Combination Combination

{

get

{

throw new System.NotImplementedException();

}

set

{

}

}

internal Kursovoy.Properties.Resources Resources

{

get

{

throw new System.NotImplementedException();

}

set

{

}

}

public static void init()

{

int counter = 0;

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

{

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

{

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

}

}

length = counter;

}

public static long getLength()

{

return length;

}

public static Card get(int index)

{

return cards[index];

}

public static Card get(string escapedObject)

{

foreach (Card card in cards)

{

if (card.ToString().Equals(escapedObject))

{

return card;

}

}

return null;

}

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

{

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

}

}

}

Класс Card

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Kursovoy

{

public class Card : Cards

{

// values

public const int VALUE_NUMBER = 14;

public const int FAKE_ACE = 0;

public const int TWO = 1;

public const int THREE = 2;

public const int FOUR = 3;

public const int FIVE = 4;

public const int SIX = 5;

public const int SEVEN = 6;

public const int EIGHT = 7;

public const int NINE = 8;

public const int TEN = 9;

public const int JACK =10;

public const int QUEEN = 11;

public const int KING = 12;

public const int ACE = 13;

// Suits

public const int SUIT_NUMBER = 4;

public const int SPADES = 1;

public const int CLUBS = 2;

public const int DIAMONDS = 3;

public const int HEARTS = 4;

private string suits;

private string values;

private int val, suit;

public Card(string suits, string values,int val,int suit)

{

this.suits = suits;

this.values = values;

this.val = val;

this.suit = suit;

}

public override string ToString()

{

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

}

public string Masti()

{

return String.Format(this.suits);

}

public string Rangi()

{

return String.Format(this.values);

}

public int Val()

{

return this.val;

}

public int Suit()

{

return this.suit;

}

}

}

ПРИЛОЖЕНИЕ Б

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

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

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

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

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

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

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

ОЗУ: 3Гб

ОС: Windows ХР

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

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

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

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

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

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

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

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

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

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

Найдено

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

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

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

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

Итоги

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

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

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

Размещено на Allbest.ru


Подобные документы

  • Общая характеристика, цели и функции создания, модульная структура и взаимосвязь элементов необходимого программного продукта, предъявляемые к нему требования. Комплект поставки и порядок инсталляции, запуск разработанного программного продукта.

    курсовая работа [32,0 K], добавлен 11.11.2013

  • Методика проектирования информационной системы "Учебные планы. Вычитка часов", ее структура и основные элементы, назначение и сферы использования. Основные требования к данному программному обеспечению, выбор средств его реализации и обоснование выбора.

    курсовая работа [1,3 M], добавлен 13.08.2009

  • Среда проектирования программного обеспечения Rational Rose. Унифицированный язык моделирования UML. Требования к функциональности, к безопасности, интерфейсу, настраиваемости, информационной и программной совместимости, программная документация.

    курсовая работа [582,0 K], добавлен 20.07.2011

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

    контрольная работа [1,4 M], добавлен 04.02.2017

  • Разработка Базы Данных для информационной системы архива. Обоснование выбора Entity-Attribute-Value в качестве метода проектирования БД. Модификация ROT с учетом наследования, модели Тенцера. Процесс генерации таблиц. Тестовые примеры (test cases).

    дипломная работа [5,3 M], добавлен 19.01.2014

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

    курсовая работа [3,3 M], добавлен 12.01.2015

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

    дипломная работа [2,4 M], добавлен 12.01.2011

  • Информационное, структурно-функциональное и объектно-ориентированное проектирования. Разработка и реализация информационной системы для авиазаводов. Разработка прототипа программного продукта – Borland Delphi 7.0. Автоматизирование документооборота.

    курсовая работа [4,4 M], добавлен 26.02.2014

  • Краткая характеристика предприятия и его организационная структура, описание технического и программного обеспечения. Требования к составу и содержанию работ по подготовке объекта автоматизации к вводу системы в действие. Расчет трудоемкости внедрения.

    отчет по практике [167,4 K], добавлен 11.12.2013

  • Основание для разработки автоматизированной информационной системы "Будущий абитуриент". Технические требования к программному изделию. Порядок контроля и приемки продукта. Рассмотрение исходной базы данных. Описание интерфейса программного обеспечения.

    дипломная работа [3,3 M], добавлен 08.02.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.