- •Содержание
- •Введение
- •Техническое задание
- •Аналитический раздел
- •Обзор и анализ существующих программных решений
- •Определение функциональных требований к разрабатываемой программной системе
- •Конструкторский раздел
- •Выбор языка и среды программирования
- •Функциональная схема работы программы
- •Организация данных и проектирование интерфейсов обмена данными в программной системе
- •Анализ существующих методов и алгоритмов Обстрел одного одноклеточного корабля
- •Обстрел одного двухклеточного корабля
- •Выбор графического и пользовательского интерфейса
- •Технологический раздел
- •Определение структуры и состава программной системы
- •Используемые компоненты
- •Разработка алгоритмов отдельных подзадач
- •Руководство пользователя
- •Подготовка программы к работе и условия ее использования
- •Экспериментальный раздел
- •Виды контроля качества разрабатываемого по
- •Методика проведения и результаты тестирования
- •Методы и способы устранения ошибок
- •Отладка выявленных ошибок, обнаруженных при тестировании
- •Заключение
- •Список использованной литературы
- •Приложения Приложение 1 Листинг программы
- •Приложение 2 Графический интерфейс программы
Функциональная схема работы программы
При создании алгоритма игры "Морской бой" на начальном этапе была разработана его блок-схема. В ней описана последовательность работы алгоритма игры (рис. 3):
Рис.
3. Представление алгоритма работы
программы
При запуске приложения «Морской бой» у игрока есть возможность выбора вариантов расстановки кораблей: авто или ручная расстановка. Если выбрана ручная расстановка, то игра не начинается до тех пор пока не будут расставлены все корабли. Далее рисуется поле боя компьютера и у игрока появляется возможность произвести выстрел по вражескому полю боя.
Если игрок попал по кораблю противника, то у него имеется возможность осуществить еще один выстрел. Иначе происходит проверка на наличие не потопленных кораблей у компьютера. Если не потопленные корабли отсутствуют, то выводится сообщение о победе и затем происходит выход из игры, иначе, ход переходит к компьютеру, который производит выстрел по полю боя игрока.
Если компьютерный интеллект попал по кораблю противника, то у него имеется возможность осуществить еще один выстрел. Иначе происходит проверка на наличие не потопленных кораблей у игрока. Если не потопленные корабли отсутствуют, то выводится сообщение о проигрыше. Затем происходит выход из игры.
Организация данных и проектирование интерфейсов обмена данными в программной системе
Одной из самых важных функций любой программы является ввод и вывод данных
Выводимые данные это то, что сообщается пользователю. Входные данные это то, что пользователь сообщает программе.
Выводимые данные в программе представлены в виде графического отображения окна игры (рис. 4):
Рис. 4. Окно программы
Входные данные представлены в виде программного кода, который необходимо выполнить при определенных действиях пользователя, а именно:
нажатие клавиш мыши;
работа пользователя с кнопками на форме.
Анализ существующих методов и алгоритмов Обстрел одного одноклеточного корабля
На поле из п клеток расположен один одноклеточный корабль. Определим вероятность попадания в корабль k ым выстрелом, то есть ею уничтожение.
В качестве пространства элементарных исходов выбора игрока В рассмотрим множество стратегий обстрела игровою поля, каждая стратегия состоит из п выстрелов, где аi номер выбранной клетки, то есть рассмотрим множество всех выборок из п по n клеток. Очевидно, что это пространство содержит элементов и все эти стратегии равновозможные. Количество стратегий с благоприятным исходом, то есть количество выборок, содержащих на k-ом месте искомую клетку . Вероятность попадания:
Определим вероятность уничтожения корабля за k выстрелов. Это событие состоит в том, что корабль может быть уничтожен либо первым выстрелом либо вторым и т. д., то есть благоприятная выборка из k клеток содержит исходную клетку с кораблем.
Количество благоприятных стратегий определится как число неупорядоченных выборок из множества n-1 клеток по k-1, умноженное на число перестановок в самой выборке и число перестановок клеток оставшихся за выборкой . Вероятность попадания в одноклеточный корабль за k выстрелов:
Обстрел одного двухклеточного корабля
Усложним задачу. На поле из n клеток расположен двухклеточный корабль. Определим вероятность первого попадания в корабль (в одну из его клеток) выстрелом с номером k. Полное число всевозможных стратегий, равно . А число благоприятных стратегий определяется как сумма благоприятных стратегий попадания в одну клетку и попадания во вторую клетку, то есть . Вероятность попадания к-ым выстрелом равна Очевидно, что при обстреле m-клеточного корабля или m одноклеточных кораблей, вероятность попадания равна
Определение вероятности попадания в двухклеточный корабль за k выстрелов:
Заметим, что аналогичным образом можно определить вероятность попадания за k выстрелов в корабль из т клеток.
Задача попадания за k выстрелов в многоклеточный корабль хотя бы один раз является задачей поиска корабля. Очевидно, что если учесть геометрию корабля, то можно предложить систему его поиска, при которой вероятность обнаружения становится выше. Действительно, при поиске двухклеточного корабля можно рассмотреть подмножество всех стратегий, содержащих обстрел, например, клеток только с четными или с нечетными номерами. Поиск двухклеточного корабля сведется к поиску одноклеточного корабля на этом подмножестве. Полагая п четным, для оптимальной вероятности попадания за k выстрелов получим:
Найденное значение вероятности больше вероятности, полученной выше при всех
Оптимальная стратегия поиска трехклеточного и четырехклеточного корабля может быть получена аналогичным образом.