Загрузил Евгений Мухин

Разработка компьютерной игры "Морской бой"

реклама
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ
ДОНЕЦКОЙ НАРОДНОЙ РЕСПУБЛИКИ
Государственное образовательное учреждение
высшего профессионального образования
«ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ»
Факультет математики и информационных технологий
Кафедра прикладной математики и
теории систем управления
Направление подготовки
02.03.02 Фундаментальная информатика и
информационные технологии
Образовательная программа – бакалавриат
Курсовая работа
Разработка компьютерной игры «Морской бой»
Выполнил студент
3 курса гр. «З»
Мухин Евгений Евгеньевич
Научный руководитель
С. В. Блохин
Донецк 2021
Содержание
1. Математическая постановка задачи.
2. Метод решения задачи.
3. Структура программного обеспечения и описание назначения
компонент.
4. Схемы алгоритмов решения задачи.
5. Результаты тестирования.
6. Методика работы пользователя с программным обеспечением.
Математическая постановка задачи
Для начала необходимо определить вероятность обнаружения кораблей
при различном их расположении и различных системах поиска.
На поле n клеток расположен одноклеточный корабль. Определим
вероятность попадания в корабль k-ым выстрелом, то есть его уничтожения.
Как пространства элементарных исходов выбора игрока В рассмотрим
множество стратегий обстрела игрового поля, каждая стратегия состоит из n
выстрелов:
Ω = {𝑤: 𝑤 = (𝑎1 , 𝑎2 , … , 𝑎𝑛 ), 𝑎𝑖 = 1, … , 𝑛},
где 𝑎𝑖 – номер выбранной клетки. Рассмотрим множество выборок с n по n
клеток. Очевидно, что данное пространство содержит 𝑁0 = 𝑛! элементов, а
так же все эти стратегии являются равновозможными.
Количество стратегий с успешным результатом, то есть количество
выборок, содержащих на k-ом месте искомую клетку:
𝑁𝑏 = (𝑛 − 1)! , а вероятность попадания: 𝑃𝑘 =
𝑁𝑏
𝑁0
1
= .
𝑛
Определим вероятность уничтожения корабля с k выстрелов: корабль
может быть уничтожен или первым выстрелом, или вторым и т.д., то есть
благоприятная выборка из k клеток содержит искомую клетку с кораблем.
Количество благоприятных стратегий определится как число
неупорядоченных выборок из множества n - 1 клеток по k - 1 (одна клетка,
занятая кораблем не учитывается при выборке), умноженное на число
перестановок в самой выборке k! и число перестановок клеток остались по
выборке (n - k)!
Вероятность попадания в одноклеточный корабль за k выстрелов:
𝑘−1 (𝑛
𝑘−1
𝑘! ∗ 𝐶𝑛−1
∗ − 𝑘)! 𝐶𝑛−1
𝑘
𝑃𝑘 =
= 𝑘 =
𝑛!
𝑛
𝐶𝑛
Усложним задачу. На поле с n клеток расположен двухклеточный
корабль. Определим вероятность первого попадания в корабль (в одну из его
клеток) выстрелом с номером k.
Полное число всевозможных стратегий, как и в предыдущем случае, так
же 𝑁𝑏 = 2(𝑛 − 1)!, а число благоприятных стратегий определяется как сумма
благоприятных стратегий попадания в одну клетку и попадания во вторую
клетку: 𝑁𝑏 = 𝑛! .
2
Вероятность попадания k-м выстрелом равна: 𝑃𝑘 = . Очевидно, что
𝑛
при обстреле m-клеточного корабля или m одноклеточных кораблей,
𝑚
вероятность попадания k-м выстрелом равна: 𝑃𝑘 = .
𝑛
Определение вероятности попадания в двухклеточного корабль за k
выстрелов, сведется к определению количества стратегий, содержащих
искомые клетки в первых k выстрелах. Число таких стратегий будет
исчисляться как следующая сумма: 𝑁𝑏 = (𝑁1 + 𝑁2 − 𝑁12 ) ∗ (𝑛 − 𝑘)! , где
𝑘−1
𝑁1 = 𝑁2 = 𝑘! ∗ 𝐶𝑛−1
, – выборки, где указана первая или вторая клетка,
𝑘−1
𝑁12 = 𝑘! ∗ 𝐶𝑛−1
– выборка, содержащая одновременно две клетки.
Заметим, что аналогичным образом можно определить вероятность
попадания по k выстрелов в корабль с m клеток. Задача попадания по k
выстрелов в многоклеточный корабль хотя бы один раз является задачей
поиска корабля. Очевидно, что если учесть геометрию корабля, то можно
предложить систему его поиска, при которой вероятность обнаружения
становится выше. Действительно, при поиске двухклеточного корабля можно
рассмотреть подмножество всех стратегий, содержащих обстрел, например,
клеток только с четными или нечетными номерами. Поиск двухклеточного
корабля сведется к поиску одноклеточного корабля на этом подмножестве.
Считая n парных, для оптимальной вероятности попадания по k
выстрелов получим: 𝑃𝑘0 =
𝑘!∗𝐶𝑛𝑘−1
2
𝐶𝑛𝑘
2
−1
𝐶𝑛𝑘−1
=
2
−1
𝐶𝑛𝑘
2
=
2𝑘
𝑛
. Найденное значение
вероятности больше вероятности, которую мы получили ранее:
𝑘(2𝑛−𝑘−1)
𝑛(𝑛−1)
<
2𝑘
𝑛
, при всех значенияхk > 1.
Оптимальная стратегия поиска трехклеточного и четырехклеточного
корабля может быть получена аналогичным образом. Вероятность попадания
в игре из 100 клеток:
1. Вероятность попадание в какой-нибудь корабль: 20/100 = 1/5 = 0.2.
2. Вероятность попадания в четырехпалубный: 4/100 = 1/25 = 0.04.
3. Вероятность попадания в однопалубный: 4/100 = 1/25 = 0.04.
Метод решения задачи
Для решения поставленной задачи необходимо осуществить алгоритм
искусственного интеллекта, который будет выполнять задачи второго игрока,
причем характерной особенностью должна являться непредсказуемость
соперника. Если реализовать поиск цели компьютером в виде отдельной
процедуры, то надо как-то научить его запоминать результаты прошлых
выстрелов, чтобы адекватно сделать следующий. Гораздо более простым и
рациональным решением станет реализация в форме конечного автомата, из
которого можно выделить три состояния:
1. Прострел игрового поля по случайным координатам к попаданию по
кораблю, после чего идет переход в другое состояние.
2. Обстрел вокруг подбитыми ячейками поля для определения направления
расположения корабля, после – переход в третье состояние.
3. Расстрел корабля до полного уничтожение, после чего переход в первое
состояние.
Для корректной работы пользователя необходимо также разработать
интуитивно понятный интерфейс и осуществить предварительную проверку
вводимых данных с целью избежания конфликтных ситуаций.
Структура программного обеспечения и описание
назначения компонент
Unit 1 – главный модуль, объединяющий все модули и представляющий
собой внешнюю структуру программного обеспечения, то есть ее интерфейс
– форма seabattle, а также определяющий ход выполнения функций других
модулей, в зависимости от выбранного пользователем действия.
Содержание модуля:
 Procedure IntitMass – создание двух массивов для реализации полей.
 Function Check1 – стрельба по случайным координатам.
 Function Check2 – обстрел для определения направления.
 Function Check3 – полное уничтожение корабля.
 Function Kri – простановка координат после уничтожения.
 Function TfmBattle – прорисовка поля.
 Function FindDead – отображение уничтоженных кораблей.
 Function Lost – использование иной стратегии.
 Function Enab – инициализация переменных и обнуление полей.
 Function Fire1 – алгоритм стрельбы компьютера.
Unit 2 – модуль, содержащий реализацию системы шифрования Цезаря с
ключевым словом:
 Name – ввод имени пользователя.
 Bot – выбор стратегии, используемой компьютером.
Схемы алгоритмов решения задачи
Для начала пользователю необходимо выбрать сложность, после чего
он должен ввести имя, а далее ему будет предложена автоматическая
расстановка сооружений или по его усмотрению. Далее будет запущена
инициализация входных данных, а затем произойдет формирования
заполнения поля компьютера:
Рисунок 1.0 - Диаграмма дамки для алгоритма функции Draw,
отвечающей за рисование кораблей
Рисунок 1.1 - Диаграмма для алгоритма
функции ShootPlayer, отвечающей за стрельбу игрока
Рисунок 1.2 – Диаграмма для алгоритма функции Shoot, отвечающий за попадания
в корабли противника по методу дамки
Результаты тестирования
Тестирование разработанного программного средства проводится с
целью выявления каких-либо ошибок (синтаксических, алгоритмических и
других). Иными словами, тестирование позволяет установить то, насколько
корректно разработанное программное средство работает.
Кроме этого, проводится функциональное тестирование программного
средства, проверяет, насколько правильно работают алгоритмы.
В нашем случае ошибки были допущены и тут же исправлены путем
пересмотра логики алгоритма. Исправив все ошибки, можно перейти к
тестированию программного обеспечения.
Методика работы пользователя с программным обеспечением
 Для запуска ПО необходим запустить exe-файл (рисунок 1.3):
Рисунок 1.3 - Exe-файл для запуска ПО 1
 После запуска ПО пред пользователем отображается главное окно
(рисунок 1.4):
Рисунок 1.4 - Главное окно 1
 Меню включает в себя четыре пункта:
o «Игра» – позволяет начать игру заново, сохранить или загрузить ее.
o «Справка» – содержит сведения о программе, а также осуществляет
вызов справочной системы.
o Запустим игру, для этого входим в меню и нажимаем на кнопку
«Начать игру», после этого вы увидите форму для заполнения
настроек (рисунок 1.5):
Рисунок 1.5 - Окно для настройки 1
 После заполнения всех необходимых настроек будет сформировано
корабельное поле. Расстановка может проводиться как вручную (рисунок
1.6), так и автоматически. Для того, чтобы изменить расстановку флота по
вертикали или горизонтали необходимо выбрать это в пункте меню.
Рисунок 1.6 - Расстановка кораблей вручную
 После всей расстановки необходимо нажать на кнопку «Начать морской
бой» для того, чтобы запустить игру. После этого вы можете осуществить
прострел противника по правой зоне клеток (рисунок 1.7)
Рисунок 1.7 - Прострел кораблей противника
 После уничтожения всего флота выводится соответствующая форма с
оповещением о победе или поражении (рисунок 1.8):
Рисунок 1.8 - Сообщение о победе
 Для того, чтобы завершить игру в главном меню программы выбираем
пункт «Игра» и операцию «Выход» (рисунок 1.9):
Рисунок 1.9 - Завершение игры
Заключение
В ходе выполнения работы более углубленно изучил алгоритмы
шифрования и выборок, закрепив фундаментальные знания теории
вероятностей и дискретной математики. Изучил формирование диаграмм
Насси – Шнайдермана для описания процессов алгоритмов.
Перечень ссылок
1. Архангельский А.Я. Delphi 7. Справочное пособие. - М: ООО «БиномПресс», 2003 -1024 с.: Ил.
2. Бобровский С. Delphi и Kylix библиотека программиста. - СПб.: Питер,
2002. - 560с.
3. Фаронов В. В. Delphi. Программирование на языке высокого уровня.- М.:
Питер, 2004. - 640 с
4. Фленов М.Е. Библия Delphi. - 3-е изд., Перераб. и доп. - СПб .: БХВПетербург, 2011. -688с.
5. Фленов М.Е. Библия Delphi. - 3-е изд., Перераб. и доп. - СПб .: БХВПетербург, 2011. -688с.
Скачать