Обстрел одного одноклеточного корабля 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Обстрел одного одноклеточного корабля



На поле из п клеток расположен один одноклеточный корабль. Определим веро­ятность попадания в корабль k ым выст­релом, то есть ею уничтожение.

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

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

Количество благоприятных стратегий определится как число неупорядоченных выборок из множества n- 1 клеток по k- 1, умноженное на число перестановок в самой выборке и число перестановок клеток оставшихся за выборкой. Вероятность попадания в одноклеточный корабль за k выстрелов:

Обстрел одного двухклеточного корабля

Усложним задачу. На поле из n кле­ток расположен двухклеточный корабль. Определим вероятность первого попада­ния в корабль (в одну из его клеток) выс­трелом с номером k. Полное число все­возможных стратегий, равно .А число бла­гоприятных стратегий определяется как сумма благоприятных стратегий попада­ния в одну клетку и попадания во вторую клетку, то есть . Вероятность попадания к -ым выстрелом равна Очевидно, что при обстреле m-клеточного корабля или m одноклеточных кораблей, вероятность попадания равна

Определение вероятности попадания в двухклеточный корабль за k выстрелов:

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

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

Найденное значение вероятности больше вероятности, полученной выше при всех

Оптимальная стратегия поиска трехклеточного и четырехклеточного корабля может быть получена аналогичным об­разом.

2.5. Выбор графического и пользовательского интерфейса

Графический и пользовательский интерфейс представляет собой важную часть любой программы. От его оптимизации зависит скорость и удобство работы с программой. Рассмотрев несколько вариантов пользовательского интерфейса представленных на рис. 5, 6, был выбран наиболее оптимальный для простого пользователя (рис. 6).

Рис. 5. Неоптимальный интерфейс программы

Интерфейс, представленный на рис. 5 имеет неудобную компоновку кнопок, а также резкую цветовую гамму. Все это будет негативно сказываться на удобстве работы с программой.

Рис. 6. Оптимальный интерфейс программы

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

3. Технологический раздел

3.1. Определение структуры и состава программной системы

Данная программа состоит из:

· mainprogram – главный модуль программы, отвечает за процесс игры;

· about – модуль окна «О программе».

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

Таблица 1

Используемые компоненты

Label Метка Размещает в форме объекты, предназначенные для создания текстовой информации, надписей и примечаний.
Edit Текстовое поле Размещает в форме текстовое поле, предназначенное для ввода текстовой информации, чисел и дат.
Button Кнопка управления Размещает в форме кнопки управления для инициации действий, выполнения команд, запуска программ.
Panel Панель Используется в декоративных целях.
Image Изображение Отображает графическое изображение на форме

 

В данной программе используются следующие процедуры.

Процедура FormCreate

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

Процедура nash

Выполняется в том случае, если выбрана ручная расстановка кораблей. Позволяет игроку расставить корабли на поле боя с помощью мыши.

Процедура shoot

Выполняется во время обмена выстрелами между игроком и компьютерным интеллектом.

Процедура Button5Click

Выполняется в том случае, если выбрана автоматическая расстановка кораблей игрока.

3.2. Разработка алгоритмов отдельных подзадач

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

Процедура FormCreate

Игра, начинается сразу после запуска, так же при запуске начинается случайная расстановка кораблей компьютера

Каждое из полей (игрока и компьютера) представляет собой матрицу 10 на 10 в самом начале заполненную нолями. К тому же поля, как игрока, так и компьютера представляют собой картинку, которая изменяется при том или ином действии.

Расстановка кораблей противника происходит от четырехклеточного к одноклеточному. К тому же расстановка кораблей происходит в цикле.

Координаты четырехпалубного корабль выбираются случайно (переменная m и переменная n) лишь с условием того чтобы он не выходил за границы поля при этом выбирается случайное горизонтальное или вертикальное положение (переменная z). При этом корабль помечается цифрами «2» в матрице.

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

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

Представим основной алгоритм работы процедуры в виде блок-схемы (рис. 7):

Рис. 7. Представление алгоритма процедуры FormCreate

Процедура nash

Процедура ручной расстановки кораблей.

Расстановка происходит лишь в том случае если расстанавливаемый корабль не выходит за рамки поля, не пересекается и не соприкасается не с одним из расстанавливаемых кораблей.

Также каждый из кораблей расстанавливается в зависимости от количества его клеток, т.е. четырехклеточный – один, трехклеточных – два, двухклеточных – три, одноклеточных – четыре.

При этом ячейке матрицы поля игрока присваивается значение «2». После каждого нажатия происходит прорисовка поля игрока, для этого каждая ячейка со значением «2» закрашивается голубым

Представим основной алгоритм работы процедуры в виде блок-схемы (рис. 8):

Рис. 8. Представление алгоритма процедуры nash

Процедура shoot

После того как все корабли расставлены начинается обмен выстрелами.

Выстрел производится при нажатии на одну из клеток поля компьютера. Если ячейка имеет значение «0» (пустая клетка) то ячейке присваивается значение «3», если ячейка имеет значение «2» то ячейке присваивается значение «4».

Затем происходит прорисовка поля противника. Клетка, которой соответствует ячейка со значением «3» означает промах, в ней рисуется круг, клетка, которой соответствует ячейка со значением «4» проверяется подбит или потоплен корабль, если потоплен то рисуется красный квадрат, если подбит то рисуется голубой квадрат перечеркнутый красным крестом.

После происходит проверка выиграл ли игрок или нет, для этого матрица противника сканируется и если не находится ни одной ячейки со значением «2» то выводится сообщение о победе.

Если не находится то проверяется, куда попал игрок, если игрок попал в ячейку со значением «2» то ему предоставляется ещё один выстрел, а ячейке присваивается значение «4», если игрок попал в ячейку со значением «0» то ячейке присваивается значение «3» и затем наступает очередь хода компьютера.

Компьютерный интеллект выбирает произвольную клетку из поля игрока и если он попал в ячейку со значением «2» то ему предоставляется ещё один выстрел, а ячейке присваивается значение «4», если попал в ячейку со значением «0» то ячейке присваивается значение «3».

Затем происходит прорисовка поля компьютера. В клетке, которой соответствует ячейка со значением «3» рисуется круг, в клетке, которой соответствует ячейка со значением «4» проверяется, подбит или потоплен корабль, если потоплен, то рисуется красный квадрат, если подбит, то рисуется голубой квадрат перечеркнутый красным крестом.

Компьютерный интеллект стреляет до тех пор, пока не попадет в клетку со значением «0».

После происходит проверка проиграл ли игрок или нет, для этого матрица игрока сканируется и если не находится ни одной ячейки со значением «2» то выводится сообщение о поражении.

Представим основной алгоритм работы процедуры в виде блок-схемы (рис. 9):

Рис. 9. Представление алгоритма процедуры shoot

Процедура Button5Click

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

3.3. Руководство пользователя

Запускаем приложение Морской бой.exe (рис.10):

Рис. 10. Морской бой.exe

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

 

Рис. 11. Пример ручной расстановки кораблей

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

Рис. 12. Подготовленные поля боя в случае с ручным вариантом расстановки

Если же выбран вариант автоматической расстановки кораблей, то сразу появляется поле боя игрока с уже расставленными кораблями, а также поле боя компьютера, и можно начинать игру (рис. 13):

Рис. 13. Подготовленные поля боя в случае с авто-вариантом расстановки

Затем начинается игра. Выстрел производится с помощью мыши. У игрока имеется право первого выстрела. Если он попал, у него имеется возможность произвести еще один выстрел.

В случае промаха ход переходит к компьютеру, который действует аналогично. В процессе игры убитые корабли обозначаются красными квадратами, раненые корабли перечеркиваются красным крестом, а промах обозначается маленьким кругом (рис. 14):

Рис. 14. Процесс игры

Также у игрока имеется возможность выбора: выделять убитые корабли (рис. 15) или не выделять (рис. 16):

Рис. 15. Выделение убитых кораблей

Рис. 16. Без выделения убитых кораблей

Игра продолжается до тех пор, пока не будут уничтожены корабли одного из игроков. В случае если игрок потопил все корабли компьютера, то выводится сообщение о победе (рис. 17):

Рис. 17. Вывод сообщения о победе

Если же компьютер потопил все корабли игрока, то выводится сообщение о проигрыше (рис. 18):

 

Рис. 18. Вывод сообщения о проигрыше

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

Рис. 19. Главное окно игры после проигрыша или победы

Так же можно посмотреть сведения о программном продукте. Для этого необходимо нажать клавишу «О программе» (рис. 20):

Рис. 20. Окно «О программе»

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

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

Программно-аппаратные требования

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

Необходимый объем ОЗУ 64 Мб и графическим адаптером, поддерживающим режим 800х600 и выше, глубина цвета 32 бит. Необходимое место на жестком диске 1500 Кб. Клавиатура, мышь.

Программные требования:

Операционная система семейства Windows: 2000/XP/Vista/7.

 

 

4. Экспериментальный раздел

4.1. Виды контроля качества разрабатываемого ПО

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

Основные принципы организации тестирования:

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

2) следует по возможности избегать тестирования программы ее автором, т.к. кроме уже указанной объективной сложности тестирования для программистов здесь присутствует и тот фактор, что обнаружение недостатков в своей деятельности противоречит человеческой психологии (однако отладка программы эффективнее всего выполняется именно автором программы);

3) по тем же соображениям организация - разработчик программного обеспечения не должна “единолично ” его тестировать (должны существовать организации, специализирующиеся на тестировании программных средств);

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

5) необходимо тщательно подбирать тест не только для правильных (предусмотренных) входных данных, но и для неправильных (непредусмотренных);

6) следует сохранять использованные тесты (для повышения эффективности повторного тестирования программы после ее модификации или установки у заказчика);

7) тестирования не должно планироваться исходя из предположения, что в программе не будут обнаружены ошибки (в частности, следует выделять для тестирования достаточные временные и материальные ресурсы);

8) следует учитывать так называемый “принцип скопления ошибок”: вероятность наличия не обнаруженных ошибок в некоторой части программы прямо пропорциональна числу ошибок, уже обнаруженных в этой части;

9) следует всегда помнить, что тестирование – творческий процесс, а не относиться к нему как к рутинному занятию.

4.2. Методика проведения и результаты тестирования

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

· необходимо тщательно подбирать тест не только для правильных (предусмотренных) входных данных, но и для неправильных (непредусмотренных);

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

· следует всегда помнить, что тестирование - творческий процесс, а не относиться к нему как к рутинному занятию;

· следует по возможности избегать тестирования программы ее автором.

Тестирование выявило ряд ошибок в алгоритме, синтаксисе кода программы и ее интерфейсе.

4.3. Методы и способы устранения ошибок

Отладка – это комплексный процесс по выявлению и исправлению дефектов в программном обеспечении. Сами же дефекты, обычно, обнаруживается в процессе тестирования ПО.

Отладка состоит из следующих этапов:

1) воспроизведение дефекта (любым из доступных способов);

2) анализ дефекта (поиск причины возникновения дефекта);

3) дизайн исправления дефекта;

4) кодирование исправления дефекта;

5) валидация исправления;

6) интеграция исправления в кодовую базу или целевую систему;

7) дополнительные валидации после интеграции.

Отладка – это рекурсивный процесс. На любом этапе отладки могут возникнуть новые дефекты, которые придётся отлаживать. Например, какая-то часть исправления в коде работает не так как ожидается и соответственно придётся отлаживать эту часть в изоляции и снова основное время уходит на пункты 1 и 2 и т.д.

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

Некоторые методы отладки ПО используемые на данный момент в индустрии:

· запуск программы из под отладчика;

· анализ поведения системы;

· unit тестирование;

· анализ кода без исполнения программы;

· выполнения программы (или её части) в другой среде;

· отладка трансляцией кода.

4.4. Отладка выявленных ошибок, обнаруженных при тестировании

Во время выполнения отладки, были использованы следующие методы:

· unit тестирование;

· анализ кода без исполнения программы;

· запуск программы из под отладчика.

Отладка ряда ошибок прошла успешно, были внесены изменения в интерфейс программы.

Также были предусмотрены некоторые исключительные ситуации.



Поделиться:


Последнее изменение этой страницы: 2016-04-19; просмотров: 412; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.221.146.223 (0.1 с.)