Содержание
Содержание
Введение3
1Теплообмен человека и условия комфортности4
2Нормативные требования к микроклимату помещений различного назначения7
3Системы для создания и обеспечения заданного микроклимата11
4Расчетные наружные климатические условия для проектирования систем обеспечения микроклимата13
Заключение15
Список литературы17
Введение
В комплексе условий обеспечения безопасности жизнедеятельности человека бытовой среде принадлежит важная роль.
Сегодня городской человек большую часть жизни находится в искусственной среде. Несоответствие организма человека и жилой среды ощущается как психологический дискомфорт. Отдаление от природной среды усиливает напряжение функций организма, а использование все более разнообразных материалов, бытовой химии бытовой техники сопровождается увеличением количества источников негативных факторов в бытовой среде и ростом их энергетического уровня .
Под метеорологическими условиями на рабочих местах понимают температуру, влажность, скорость движения воздуха, барометрическое давление, интенсивность теплового излучения от нагретых поверхностей. Совокупность этих параметров, характерная для конкретного производственного участка, называется микроклиматом.
Цель работы определить требования к микроклимату помещений и условия комфортности для человека.
1Теплообмен человека и условия комфортности
Говоря о биосфере в целом, необходимо отме¬тить, что человек обитает в самом нижнем, прилегающем к Земле слое атмосферы, который на¬зывается тропосферой.
Атмосфера является непосредственно окружа¬ющей человека средой и этим определяется ее пер¬востепенное значение для осуществления процес¬сов жизнедеятельности.
Тесно соприкасаясь с воздушной средой, орга¬низм человека подвергается воздействию ее фи¬зических и химических факторов: состава возду¬ха, температуры, влажности, скорости движения воздуха, барометрического давления и др. Особое внимание следует уделить параметрам микрокли¬мата помещений аудиторий, производственных и жилых зданий. Микроклимат, оказывая непос¬редственное воздействие на один из важнейших физиологических процессов терморегуляцию, имеет огромное значение для поддержания ком¬фортного состояния организма.
Терморегуляция это совокупность процессов в организме, обеспечивающих равновесие между теплопродукцией и теплоотдачей, благодаря ко¬торому температура тела человека остается посто¬янной.
Теплопродукция организма (производимое теп¬ло) в состоянии покоя составляет для «стандарт¬ного человека» (масса 70 кг, рост 170 см, поверх¬ность тема 1,8 м2) до 283 кДж в час. При легкой физической работе более 283 кДж в час, при работе средней тяжести до 1256 кДж в час и при тяжелой 1256 и более кДж в час. Метабо¬лическое, лишнее тепло должно удаляться из орга¬низма.
Нормальная жизнедеятельность осуществляет¬ся в том случае, если тепловое равновесие, т. е. соответствие между теплопродукцией вместе с теп¬лотой, получаемой из окружающей среды, и теп¬лоотдачей достигается без напряжения процессов терморегуляции. Отдача тепла организмом зави¬сит от условий микроклимата, который опреде¬ляется комплексом факторов, влияющих на теп¬лообмен: температурой, влажностью, скоростью движения воздуха и радиационной температурой окружающих человека предметов.
Чтобы понять влияние того или иного показате¬ля микроклимата на теплообмен, нужно знать ос¬новные пути отдачи тепла организмом. При нор¬мальных условиях организм человека теряет примерно 85% тепла через кожу и 15% тепла рас¬ходуется на нагревание пищи, вдыхаемого возду¬ха и испарение воды из легких. 85% тепла, отда¬ваемого через кожу, распределяется следующим образом: 45% приходится на излучение, 30% на проведение и 10% на испарение. Эти соотноше¬ния могут изменяться в зависимости от условий микроклимата.
Потеря тепла телом человека путем излучения может ориентировочно оцениваться по закону Стефана-Больцмана и рассчитывается по формуле:
Е = к(Т14 — Т24)
где Е энергия электромагнитного излучения с единицы поверхности тела в единицу времени;
К коэффициент;
Т1 абсолютная температура кожи челове¬ка;
Т2 абсолютная температура окружающих поверхностей.
Из уравнения следует, что при T1 > T2 радиаци¬онный баланс отрицательный, человек теряет теп¬ла больше, чем получает;
при Т1
На потерю тепла излуче¬нием не влияют температура воздуха, его подвиж¬ность, относительная влажность, а только темпе¬ратура окружающих предметов
Потеря тепла проведением осуществляется в ре¬зультате соприкосновения тела человека с окру¬жающим воздухом (конвекция) или с окружающи¬ми предметами (кондукция). Основное количество тепла теряется конвекцией. Эта потеря прямо про¬порциональна разности между температурой тела и температурой окружающего воздуха чем боль¬ше разница, тем больше теплоотдача .
Комфорт — условия жизни, пребывания, обстановка, обеспечивающие удобство, спокойствие, уют.
В отечественной литературе существует понятие условий комфортности.
Первое условие комфортности температурной обстановки определяет такую область сочетаний температуры внутреннего воздуха и радиационной температуры помещения, при которых человек, находясь в центре рабочей зоны, не испытывает ни перегрева, ни переохлаждения.
Остальные параметры внутреннего воздуха и индивидуальные характеристики человека не учитываются. По своему логическому содержанию первое условие комфортности является уравнением энергетического баланса организма человека и окружающей среды, и определяет такие сочетания параметров окружающей среды, при которых количество тепловой энергии, вырабатываемой организмом, равно количеству теплоты отдаваемой в окружающую среду.
Второе условие комфортности определяет допустимые температуры нагретых и охлажденных поверхностей при нахождении человека в непосредственной близости от них.
На комфортную для организма температуру внутреннего воздуха влияют тип одежды и величина метаболизма.
Величина метаболизма человека зависит от многих факторов: активности, массы, роста, питания, возраста и так далее.
Третье условие комфортности: Параметры внутреннего микроклимата должны иметь возможность индивидуального регулирования с целью соответствия субъективным ощущением комфорта потребителя .
Выдержка из текста работы
Пояснительная записка состоит из 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 Основание для разработки
Основанием для разработки программного продукта «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.1. — Сравнительный анализ средств разработки
Критерий |
Коэфф. Вес-ти |
Абсолютное значение показателей |
Относительное значение показателей |
||||||||||
№ |
Название |
Ед. изм |
Вар. А |
Вар. В |
Вар. С |
А |
В |
С |
|||||
K |
K |
||||||||||||
1 |
Требова-ния к ресурсам |
Mб |
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.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.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.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
throw new System.NotImplementedException();
internal static AboutBox1 AboutBox1
throw new System.NotImplementedException();
internal static Kursovoy.Properties.Settings Settings
throw new System.NotImplementedException();
/// <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)
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
throw new System.NotImplementedException();
internal Kursovoy.Properties.Resources Resources
throw new System.NotImplementedException();
internal Kursovoy.Properties.Settings Settings
throw new System.NotImplementedException();
Класс 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
throw new System.NotImplementedException();
public static CombinationMaker CombinationMaker
throw new System.NotImplementedException();
internal static Combination Combination
throw new System.NotImplementedException();
public static Card Card
throw new System.NotImplementedException();
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
throw new System.NotImplementedException();
public Cards Cards
throw new System.NotImplementedException();
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
throw new System.NotImplementedException();
internal Kursovoy.Properties.Resources Resources
throw new System.NotImplementedException();
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>)
Итоги
При проведении тестирования проверялась спецификация в полном объеме. Возможно, некоторые ошибки были упущены.
Продукт практически готов к использованию. Требуется исправить функциональные ошибки, т.к. их наличие приводит к нестабильной работе приложения и неверным результатам.
Необходимо подключить справку. Исправить ошибки в расчёте вероятностей для комбинаций Флеш и Стрит Флеш. В интерфейсе следует изменить цвет шрифта, т.к. он сливается с фоном.
Размещено на