Разработка и реализация игры человек-робот на базе антропоморфного робота NAO - Программирование, компьютеры и кибернетика дипломная работа

Разработка и реализация игры человек-робот на базе антропоморфного робота NAO - Программирование, компьютеры и кибернетика дипломная работа




































Главная

Программирование, компьютеры и кибернетика
Разработка и реализация игры человек-робот на базе антропоморфного робота NAO

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


посмотреть текст работы


скачать работу можно здесь


полная информация о работе


весь список подобных работ


Нужна помощь с учёбой? Наши эксперты готовы помочь!
Нажимая на кнопку, вы соглашаетесь с
политикой обработки персональных данных

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
1) нахождение алгоритма, по которому совершаются ходы в игре;
2) способ передачи данных об игровом состоянии между роботом и человеком.
Число возможных состояний в конце игр составит 362800 узлов. Но в действительности число возможных состояний игры будет приблизительно составлять 250000. Это связано с правилами игры. При победе одного из игроков продолжение ветки останавливается и текущее состояние является листом дерева.
Не смотря на уменьшение количества узлов, длительность обхода будет большой. Но даже данное значение не сравнится с объёмом дерева в шахматах. В результате выполнения пяти ходов в шахматах количество узлов будет более триллиона, при условии, что у каждого игрока есть шестнадцать допустимых вариантов ходов.
Поиск по дереву осуществляется за счёт определения позиции игрового поля. Приоритет ходов для первого игрока заключается в расположении трёх крестиков подряд. Такое расположение приведёт игрока к победе. Вероятность того, что игрок поставит нолик в эти позиции очень мала, так как это приведёт к его поражению или ничьей.
Каждый из игроков имеет определённое значение, которое соответствует одному из четырёх состояний:
Для исследования получившегося дерева воспользуемся методом минимакса. При использовании этой стратегии минимизируется значение, соответствующее ходу противника. Каждый из выполняемых роботом ходов буде направлен на уменьшение значение противника. Выбирается ход с минимальным значением.
Программа рассчитывает значение игрового поля для каждого из возможных ходов. Далее происходит рекурсивный вызов этой функции для дальнейшего анализа ветви. После обхода всего дерева выбирается ход, при котором оппонент получает минимальное значение. Рекурсию может прервать одно из трёх событий:
3) превышение допустимой глубины рекурсии.
В первом случае оппонент получает 1 балл, во второй ситуации 2 балла и в третьем случае игровому полю присваивается неопределенное значение, и противник получает 3 балла. Максимальный уровень глубины рекурсии устанавливается в целях сокращения вычислительных ресурсов. Необходимость возникает в шахматах, где количество узлов огромное.
Чем больше уровень глубины, тем выше мастерство программы. На рисунке 1.2 показано состояние дерева на момент окончания партии.
Рисунок 1.2 - Игровое дерево решений в конце партии
Подход минимакса является не единственной стратегий для нахождения оптимального хода, так как обход огромных деревьев занял бы большое время, что не желательно в процессе игры. Для сокращения времени обработки можно использовать первый ход, выбранный экспертами. В результате совершённого действия время обхода уменьшиться в девять раз. С учётом того, что после хода игрока, совершается ход противника, то количество обрабатываемых узлов будет равно
Память, используемая для хранения одного хода, уменьшить длительность выполнения хода игрока в 72 раза.
В игре шашки количество состояний или узлов равняется 10 20 . В 2007 все допустимые ходы были просчитаны суперкомпьютером. Отсюда следует, что человек никогда не выиграет у компьютера.
В игре шахматы данное число составляет 10 46 . Для обхода данного количества узлов требуется астрономическое время даже для суперкомпьютера.
При выполнении поиска хода методом пересчёта всех возможных вариантов развития игры можно воспользоваться двумя методами поиска. Поиск в глубину и поиск в ширину.
Возможные варианты развития игры можно представить в виде графа, где вершина графа - это состояние игры. Стратегия в глубину подразумевает поиск по направлению “вглубь” по графу. Стратегия в ширину рассматривает поиск по всем вершинам на одном уровне. Каждая из стратегий имеет своё преимущество. Если не ограничивать поиск, то алгоритмы затрачивают одинаковое количество ресурсов и можно выбрать любой. При ограничении по количеству уровней лучшим алгоритмом является поиск в ширину[3].
В поиске алгоритма принятия решения стоит рассмотреть теорию игр. Теория игр -- математический метод изучения оптимальных стратегий в играх. Под игрой понимается процесс, в котором участвуют две и более сторон, ведущих борьбу за реализацию своих интересов. Каждая из сторон имеет свою цель и использует некоторую стратегию, которая может вести к выигрышу или проигрышу -- в зависимости от поведения других игроков. Теория игр помогает выбрать лучшие стратегии с учётом представлений о других участниках, их ресурсах и их возможных поступках.
Вторым методом можно считать алгоритм, основанный на правилах. Человеческий мозг не способен на такие быстрые вычисления как суперкомпьютеры. Поэтому каждый человек регулярно играющий в такие игры имеет свои собственные стратегии.
Любая стратегия основана на анализе происходящих событий и состояний игры. И каждая из этих стратегий имеет одну цель - победа.
Рассмотрим несколько стратегий игры на примере интеллектуальной игры “Шашки”.
Является ловушкой для противника, осуществляемой в начале игры. Задача такого метода в подстановке своих шашек под взятие противником для выполнения в будущем выигрышных комбинаций.
Совершение ходов, при которых игрок хочет, как можно раньше пройти в дамки.
Блокировка противника - это ситуация, при которой игрок имеет возможность сходить, а его противник нет.
Робота можно запрограммировать на выполнение любого алгоритма. При этом не требуется глубокий расчёт, но правило, чем глубже расчёт, тем лучше, здесь также действует.
Рисунок 1.3 - Игра “Шашки” на ПК, передача данных “Человек-программа”
Робот анализирует положение пешек на доске, и исходя из своих алгоритмов совершает ход. Информация о ходе может передаваться в звуковом формате, а также физическим перемещением пешек.
Передача информации о ходе через физический контакт сложнее реализовать, чем передача через звуковые каналы, так как положение и размер шашек в таком случае имеет большое значение. Для такой реализации необходимо специально разработанные поле и шашки. Пример реализации второго метода представлен на рисунке 1.4
В примере, представленном на рисунке 1.4 продемонстрированы передача данных “Человек-робот” с физическим взаимодействие. Данный робот был представлен компанией ЧТПЗ на конференции «Иннопроме-2015». Для реализации данной игры потребовались специальные металлические шашки. Такая форма и размер шашек удобна для манипулятора.
Игровое поле статически закреплено и каждая клетка имеет постоянную во времени координату, что позволяет роботу выполнять ходы большой точностью. А позиция манипулятор, даёт возможность рассматривать шахматную доску как двумерный объект, что также даёт преимущество в процессе игры.
Рисунок 1.4 - Передача данных “Человек-робот”
Проведя исследование алгоритмов поиска хода в интеллектуальной игре, а также исследование методов взаимодействия робота и человека, был выбран алгоритм, основанный на правилах с передачей данных “человек-робот” без физического взаимодействия. После данного шага можно приступать к алгоритмизации и программированию.
2 . Разработка архитектуры программного комплекса
Для разработки интеллектуальной игры в системе “Человек-Робот” необходимо проанализировать и рассмотреть некоторые требования и ограничения. Разработка системы будет осуществляться на основе алгоритма стратегии выбора хода и передачи данных по типу “Человек-Робот”
В качестве интеллектуальной игры выбрана игра “Шашки”. Основная цель игры состоит в том, чтобы взять все шашки противника и не оставить ему вариантов для хода путём блокирования его шашек. Существует большое количество вариантов игры. 64 клеточные шашки можно разделить на русские, обратные русские, английские(чекерс), пул чекерс, бразильские, испанские, португальские, чешские и другие.
Также есть 80-ти клеточные и 100 клеточные шашки. Пример 100 клеточного поля представлен на рисунке 2.1
Для проектирования игры воспользуемся 64 клеточным русскими шашками.
В качестве робота выбран антропоморфный робот NAO Evolution V5 французской компании Aldebaran Technologies. NAO Evolution V5 робот-андроид идеально подходит для исследовательских миссий, а также учебных целей и разработок в области ИИ(искусственный интеллект). Робот построен на производительной аппаратной платформе. Разнообразные типы датчиков и их количество позволят в полной степени получить информацию об окружении робота. Полные характеристики представлены в таблице 2.1
Таблица 2.1 - Технические характеристики NAO V5
Процессор: Intel Atom 1.6 ГГц , ARM9
Время работы без подзарядки 1.5 часа?
Моторы и приводы, 25 степеней свободы
Установлены устройства поддерживания равновесия гироскоп и акселерометра.
На ступнях робота установлены сенсоры давления
2 камеры качеством 920p. Скорость записи 30 кадров в секунду, что даёт плавную картинку.
На голове, руках и ногах установлены тактильные датчики для отслеживания касаний.
Для определения расстояния до объекта установлены сонары.
Робот поддерживает Ethernet подключение и Wi-Fi. Также имеет инфракрасный порт для взаимодействия со сторонними устройствами
Внешней вид робота представлен на рисунке 2.2
Рисунок 2.2 - Антропоморфный робот Nao
Полную систему робота можно представить в виде структурной схемы, изображённой на рисунке 2.3
Рисунок 2.3 - Структурная схема системы робота
Каждый модуль в Hardware управляется соответствующим модулем из Software. Модуль NAOqi Motion отвечает за движения робота и управление приводами. Он реализует такие функции как, движение в выбранную сторону на указанное количество шагов, сесть, встать, задаваемое движение руками. Можно управлять каждым приводом. Отключение приводов используется для снятия нагрузки с моторов.
NAOqi Vision предназначен для управления верхней и нижней камерой робота. Vision включает в себя классы для работы с фото и видео потоком. Также в библиотеку встроены алгоритмы распознавания и обнаружения объектов.
Вместе с NAOqi Vision следует рассмотреть модуль NAOqi Trackers, имеющий функции распознавания и слежения за лицом человека.
NAOqi Core отвечает за память робота, за ресурсы, за связь через Wi-Fi, Ethernet или ИК-порт и за общие настройки системы.
NAOqi Audio используется для передачи звукового сигнала во внешнюю среду за счёт встроенных динамиков и распознавания слов и фраз.
Все классы, входящие в модули представлены в таблице 2.2
Таблица 2.2 - Классы, входящие в модули NAOqi
Рассмотренный робот идеально подходит для реализации системы[4].
Компания Aldebaran Technologies специально для NAO V5 разработала среду программирования Choreographe. Данная среда позволяет осуществлять разработки без использования языков программирования, что значительно увеличивает количество разработчиков. В блочном программировании в основном используются стандартные модули. В данных модулях описаны алгоритмы распознавания образов и объектов, перемещение объектов, команды встать, сесть, распознавание голоса и другое. Данная программа использована в качестве среды разработки программного комплекса[5].
Структурная схема проекта представлена на рисунке 2.5
Рисунок 2.5 - Структурная схема проекта
Разрабатываемый программный комплекс состоит из нескольких модулей. Каждый модуль отвечает за свои функции и представлен в виде класса или процедур.
Модуль выбора хода отвечает за выбор хода роботом. Реализован на основе стратегий игры и анализе состояния игрового поля. Входными данными модуля являются координаты расположения всех шашек. Выходными данными является массив, состоящий из начальной позиции и конечной позиции.
Основная цель модуля игры прослеживать выполнение правильности ходов игроками. Все текущие данные игры хранятся в рассматриваемом модуле. Программа выдаст исключение, если ход сделан неверно, если неожиданно с поля пропадёт несколько шашек и сообщит, если игрок не сделал ход для совершения хода по правилу “фука”.
Модуль распознавания предназначен для преобразования полученного изображения с камеры в координаты, по которым расположены шашки противника. В результате первого распознавания поля будут инициализированы координаты каждой ячейки поля. Также к задачам модуля относится получение координат только чёрных ячеек поля, так как они являются игровыми.
Модуль обработки данных преобразует координаты, полученные распознаванием в формат данных, используемый в игре и преобразует координаты в массиве в координатную систему шахматного поля.
Задача модуля вывода данных состоит в оповещении в сделанном ходе или нескольких ходов, а также о выполнении ходов по правилу “фука” и текущем статусе игры.
Диаграмма компонентов, изображённая на рисунке 2.6 демонстрирует какие классы входят модули и их основные функции. Диаграмма классов представлена на рисунке 2.7
Данная диаграмма показывает связь между классами в программе, доступные методы классов и атрибуты-члены. Каждый метод класса выполняет определённую функцию.
Рисунок 2.6 - Диаграмма компонентов
8) особые случаи не настолько особые, чтобы нарушать правила;
9) при этом практичность важнее безупречности;
10) ошибки никогда не должны замалчиваться;
12) встретив двусмысленность, отбрось искушение угадать;
13) должен существовать один -- и, желательно, только один -- очевидный способ сделать это;
14) хотя он поначалу может быть и не очевиден, если вы не голландец;
16) хотя никогда зачастую лучше, чем прямо сейчас;
17) если реализацию сложно объяснить -- идея плоха;
18) если реализацию легко объяснить -- идея, возможно, хороша.
Самая актуальная на данный момент версия Python это 3.6.1. Язык является строгим с динамической типизацией. Самой используемой в проекте типом данных является список.
Python умеет работать с исключениями. Он умеет выбрасывать и обрабатывать их при помощи конструкции try…catch. Выбрасывание исключения производится при помощи выражения raise. Данная особенность нужная нам для разработки программного комплекса.
Для удаления переменных из оперативной памяти и из программы используется конструкция del <имя переменной>[7].
Список или list является аналогом массива в таких языках программирования как Java, C++ и др. Отличием от этих типов данных является то, что список способен хранить в себе элементы любых типов.
Для добавления элемента используется метод append. Для получения элемента списка пользуются следующей синтаксической конструкцией list[i], где i это индекс элемента.
Индекс в списке начинается с нулевого элемента. Также есть такой тип данных как словарь, он подобен списку за единственным исключением, что он индексы могут быть любым неизменяемым типом данных.
3) 3 - выполнение правило “фука” и переход хода к противнику.
При значении первого элемента, равному единице, значение второго элемента равно пустому словарю. При значении два, значение второго элемента равно словарю с одним элементом по ключу(KEY) “last” и значением(VALUE) последней шашки, которой ходил игрок. При значении элемента равном трём, словарь имеет один элемент по ключу “shashka” со значением, равным объекту типа Shashka, который удаляется с поля.
Передачу данных структур информаций можно изобразить в виде семантической сети. Данная семантическая сеть представлена на рисунке 3.1
MPC - объект типа список, состоящий из двумерных списков, содержащих физические координаты ячеек(LPH). MCD, CC - список, объектами которого являются списки с двумя элементами, равными логическим координатам(LLOG) (MCD - текущее состояние поля, CC - последнее состояние поля). M - двумерный список, состоящий из двух списков LLOG. SH - двумерный список, который содержит две строки, несущую в себе логическую информацию о совершаемом ходе.
Для распознавания шашек использовался алгоритм распознавания поля по фотографии. Разработанный алгоритм основан на геометрических законах и манипуляции с изображением, такой как бинаризация.
Первый пунктом выполнения является нахождение границ ячеек полей первой и восьмой строки, путём повторения чередующихся чёрных и белых зон на одинаковом расстоянии с определённой погрешностью.
Вторым этапом является нахождение центра ячейки по оси X, путём деления расстояния между ячейками пополам с дальнейшим вычитанием из координаты X. После нахождения номера центральной точки на игральной доске перебираем пиксели по направлению вниз, или по увеличению индекса. При переходе на зону другого цвета, отмечаем данную величину как расстояние между ячейками. Делим пополам и снова вычитаем.
Для нахождения центральных позиций боковых ячеек высоту между ячейками умножаем на тангенс угла между линией, проведённой от верхней точки до нижней точки однозначного индекса и идеально вертикальной линией. Для выполнения данного алгоритма необходимы некоторые условия расположения доски. Доска должна располагаться по центру фотографии.
Для разработки модуля ИИ было необходимо реализовать игровую стратегию. Игровая стратегия имеет следующую логику.
Объект типа ИИ проверяет все шашки на возможность взять шашку противника. Если объект находит данную шашку, он проверяет шашку на статус удаления. Если шашку можно удалить, то она откладывается в буфер возможных ходов. Если шашки с отрицательным статусом удаления найдены выполняется ход именно ей. Если не найдено, то ход выполняется из буфера.
Если ход после предыдущего пункта не выполнен, модуль ИИ производит поиск на шашки, которые может удалить противник. При обнаружении шашки такого типа выполняется ход для ухода от нападения. Если ход выполнить невозможно, то производится поиск подстраховки. Если подстраховка не найдена, то поиск удаляемой шашки продолжается.
Если шашка данного типа не обнаружена, то выполняется простой ход с расчётом возможности удаления шашки противника в последующих ходах.
Последним действием, при отсутствии любого из предыдущих вариантов выполняется простой ход шашкой для продвижения в позицию дамка. Шашки, которые являются подстраховкой для других шашек рассматриваются в первую очередь.
Исходя из данного алгоритма модуль ИИ выполняет ход. Но также, данный алгоритм можно усовершенствовать для повышения вероятности победы ИИ над игроком.
Для выполнения любой проверки можно увеличить глубину хода, как это сделано в методе рассмотренном в первой части. Но у данного метода есть свой минус, это время на принятие решения.
Также при проверке на возможность взятия можно проверять количество шашек, которые будут взяты при дальнейшем выполнении хода.
1) onLoad - выполняется при загрузке программы;
2) onUnload - при выгрузке или завершении программы;
3) onInput_onStop - выполняется при подаче сигнала на вход onStop;
4) onInput_onStart - выполняется при подаче сигнала на вход onStart.
Входные параметры боксов могут быть четырёх типов Bang, Number, String и Dynamic. Тип Bang является особенным типом, разработанным для библиотеки NAOqi. Данный тип является типом передачи потока.
Данная среда даёт большие возможности как для программистов, предоставляя им хорошую документацию и библиотеку NAOqi, так и пользователей ПК, поставляя им среду визуального программирования Choreographe и огромное количество боксов. Пример программы представлен на рисунке 3.2.
Пример программы распознаёт лицо человека и передаёт сигнал на следующий бокс, функция которого заключается в произношении фразы. Если бокс трекер обнаруживает лицо человека он передаёт сигнал потока программы в бокс Say.
Анализ модулей проводится в порядке их использования.
2) бинаризации изображения и сохранение нового файла - функция binary_image;
3) поиск верхних ячеек доски - функция search_top_ugly;
4) поиск нижних ячеек доски - функция search_bottom_ugly;
5) нахождение центров верхних и нижних ячеек - функция avg;
6) нахождение всех ячеек доски - функция parsing_mest.
Робот Nao Evolution V5 имеет две камеры. Для управления камерой используется функция модуля ALPhotoCaptureProxy takePicture. Также для данного действия можно использовать стандартный бокс в программе Choreographe.
После выполнения предыдущего этапа полученный файл преобразуется в чёрно-белую копию. За этот процесс отвечает функция binary_image. Каждый пиксель изображения преобразуется в RGB(R - красный, G - зелёный, B - синий). Если сумма всех трёх значений больше числа высчитываемого по формуле
где factor - это любое число, от значения которого зависит порог выбора белого или чёрного цвета пикселя, то пиксель считается белым, в противном случае пиксель чёрный[9].
Данный массив пикселей преобразуется в файл и сохраняется. Функция search_top_ugly отвечает за поиск верхних границ ячеек игральной доски. Данный алгоритм описывался в предыдущей части, рассмотри его поподробней.
Указатель в виде номера строки и номера столбца пикселя на изображении перемещается от левого верхнего пикселя с указателем (0,0) в правый нижний пиксель с указателем (width, height). Основная задача алгоритма функции найти последовательное смену черных и белых областей. Для этого на каждой строке пикселей инициализируется переменная v1 и ей присваивается значение 0. После того как текущее значение пикселя меняется на противоположный цвет переменной v2 присваивается значение v3 - v1 где v3 - текущее значение номера столбца. При дальнейшем поиске значение v2 сравнивается с предыдущим v2. Если данное значение с погрешностью равной или меньшей p1 равно предыдущему значению v2, то счётчик count увеличивается на один, иначе count сбрасывается.
При count равному семи, поиск завершается, и данная строка считается верхней границей ячеек игральной шахматной доски. Блок-схема данной функции представлена на рисунке 4.1
Процедура search_bottom_ugly совершает такую же процедуру только с нижней границей.
Рисунок 4.1 - Блок-схема процедуры search_top_ugly
Чтобы получить данные о том, какая именно шашка стоит в ячейке необходимо получить цвет каждого пикселя в радиусе 10 от центра ячейки и в зависимости от большего количества выбрать цвет шашки. С учётом того, что чёрные шашки на чёрных клетках не опознать, вводится ограничение на игру человека только белыми шашками.
Для поиска центральных пикселей каждой клетки игрального поля используется функция avg класса RECOGNIZE.
Функция имеет следующий алгоритм. Каждая нулевая координата ячейки верхней и нижней границы приравнивается к значению разности нулевой координаты и среднего расстояния между ячейками пополам. Для вычисления координаты Y используется следующий этап.
Последним этапом выполнения является нахождение всех физических координат клеток поля. Для этой цели выполняется функция parsing_mest. Для верхней и нижней границы выбирается средний пиксель. Коэффициенты этих пикселей соответственно равны. Перебираются значения пикселей сверху вниз. При изменении текущего цвета пикселя координата точки равна:
где y1 - Y координата предыдущей ячейки;
Координаты Y нецентральных точек совпадают с координатами центральных точек. А координаты X находятся по следующей формуле:
где угол A - угол между вертикалью и прямой проведённой от верхней точки границы к нижней точки границы с соответствующим коэффициентом.
Также тангенс угла A найти по следующей формуле:
где x1 - координаты центрального пикселя;
y2 - координата y нецентрального пикселя;
y1 - координата верхнего центрального пикселя.
В результате выполнения модуля мы получим массив физических координат клеток на шахматной доске.
Для определения позиций чёрных тёмных клеток используется функция get_coords_black_fields. Для получения логических координат клеток, на которых расположены белые шашки необходимо выполнить процедуру get_white_shashki. Результат выполнения модуля представлен на рисунке 4.2
Рисунок 4.2 - Результат выполнения функции распознавания
Рисунок 4.3 - Блок-схема функции protect_move
Если при выполнении функции не было выброшено ни одного исключений ход считается правильным и информация передаётся дальше.
После выполнения проверки функция move получает шашку по начальной позиции. При длине хода большего чем две клетки получаем шашки расположенные между клетками хода и удаляем их из массива chess_circle.
Также в функции-члене move реализуется логика присвоения флага дамки. Если шашка не является дамкой, и она достигла позиции восьмой или первой строки в зависимости от типа, то ей флаг дамки принимает значение истина.
Функция move возвращает объект со статусом и дополнительной информацией. Информация о возможных статусах и описание дополнительной информации представлены в таблице 4.1
Таблица 4.1 - Статусы выполнения хода
Статус “зафука”, информирует о том, что игрок не выполнил ход за взятие шашки противника. Возвращается объект типа Shashka, которую необходимо удалить.
Игрок может продолжать ход. Данное событие возникает при удалении шашки игроком, с возможностью удалить следующую шашку из новой позиции. В качестве дополнительной информации возвращается объект класса Shashka, которой был выполнен предыдущий ход.
Также модуль игры реализует вспомогательные функции:
1) size_move - вычисляет размер хода;
2) i_can_del - проверка возможности удаления пешек противника.
3) is_game_end - статус завершения игры.
1) get_shashka - получение шашки по логических координатам;
2) get_sosed - получение шашки соседа по объекту типа Shashka и направлению поиска;
3) parallel_pos - возвращает обратное направление;
4) get_sosed_coords - получение логических координат соседа по шашке и направлению;
5) protect_del_diagonal - проверка на диагональную атаку;
6) protect_del_me - проверяет возможно ли взять шашку, принимаемую в качестве входного значения;
8) search_simple_move - поиск простого хода, выполняется после умной атаки;
9) protect_del_shashki - проверка всех пешек на возможность их взятия, возвращает простой ход или ход страховку;
10) move_shashka - поиск хода и выполнение определённой шашкой;
11) move - главная функция, объединяющая все выше перечисленные функции, возвращает ход;
12) change_data - используется для обновления информации о шашках на поле.
Для выполнения всех ходов используется словарь направлений. Объект имеет следующую структуру
Словарь POS_AND_COORDS является словарём направлений перемещений шашек по шахматной доске. Описание направлений представлены ниже:
Основной функцией класса является функция-член move. Если в функцию передан объект типа Shashka, то в первую очередь выполняется атака данной шашкой при помощи move_shashka. Программа проверяет по всем направлениям возможность взять шашку противника. Если шашка не является дамкой получаем соседа по определённому направлению. Если сосед обнаружен и его тип “player”, проверяется наличие шашки в финальной позиции. При обнаружении шашки переходим к следующему направлению. Если шашка не найдена, выполняется проверка на возможность удаления. При положительном статусе проверки ход сохраняется в буфере хода. Если статус отрицательный ход выполняется.
Логика функции smart_attack подобна логике предыдущей, но есть некоторые отличия. Происходит обход всех шашек робота, а не только определённой. Шашки сортируются таким образом, что все дамки идут вначале, а потом идут обычные шашки. Обычные шашки отсортированы по статусу подстраховки. Статус подстраховки переделяется переменной-членом podstrahovka класса II.
Если шашка является дамкой, то процесс поиска усложняется. Проверка соседей по направлению идёт до тех пор, пока не будет найдена шашка того же типа, шашка противника или не будет совершён выход за пределы поля.
Функция protect_del_shashki проверяет шашки на статус удаления. Если статус удаления положительный выполняется podstrahovka для защиты от ударов со стороны противника или выполняется функция search_simple_move атакуемой шашкой для ухода от удара.
Последним этапом выполняется функция search_simple_move. Блок-сема алгоритма функции представлена на рисунке 4.4. Если ходов для удара по противнику и ходов для защиты от ударов не обнаружено, то система выполняет обыкновенный ход по приближению к позициям дамки.
Модуль выбора хода принимает решения о ходе на основе данных алгоритмов. Для более интеллектуальной игры алгоритмы можно усовершенствовать.
Для функции smart_attack можно добавить проверку на цепочку удалений. Это означает, что более приоритетным ходом будет являться ход, при котором будет удалено наибольшее количество пешек противника в продолжении хода. Также одним из новшеств будет введение стратегии “поддавки”. Жертвой своей шашкой для достижения большего результата.
Для улучшения результативности алгоритма search_simple_move можно изменить порядок обработки пешек. Первыми будут анализироваться шашки, которые находятся как можно ближе к позициям дамки. Значительно усовершенствует алгоритм выбора хода добавление алгоритма жертвы шашкой для занятия позиции дамки, так как дамка имеет большое преимущество перед обычной шашкой.
Рисунок 4.4 - Блок-схема функции search_simple_move
Анализ методов реализации интеллектуальных игр в системе человек-робот. Разработка архитектуры программного комплекса, выбор языка программирования. Алгоритм преобразования данных. Тестирование программного комплекса, редактирование и исправление ошибок. дипломная работа [2,6 M], добавлен 27.10.2017
Структурная диаграмма программного модуля. Разработка схемы программного модуля и пользовательского интерфейса. Реализация программного модуля: код программы; описание использованных операторов и функций. Вид пользовательской формы с заполненной матрицей. курсовая работа [215,3 K], добавлен 01.09.2010
Анализ правил выбора хода на шахматной доске К. Шеннона. Характеристика программного модуля искусственного интеллекта для игры в шахматы. Контроль времени, поиск лучшего хода в шахматных алгоритмах. Разработка программы для игры с компьютерным оппонентом. дипломная работа [3,7 M], добавлен 07.07.2012
Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы. курсовая работа [81,7 K], добавлен 18.08.2014
Особенности разработки и реализации модулей двухмерной и трехмерной визуализации. Основные задачи трехмерного модуля управления. Анализ функций модуля управления Pa
Разработка и реализация игры человек-робот на базе антропоморфного робота NAO дипломная работа. Программирование, компьютеры и кибернетика.
Контрольная работа по теме Эволюция управленческой мысли в США
Курсовая Работа На Тему Стратегія Управління Як Основа Менеджменту
Реферат: Принципи роботи із засобами Web-сервісу
Реферат: История Ижевска в памятниках
Демократический Кризис В России Реферат
Каким Должен Быть Современный Человек Сочинение
Реферат Функция Государства
Анализ Основных Экономических Показателей Деятельности Предприятия Курсовая
Реферат На Тему Преемственность Развития Образования В Дореволюционной И Советской России
Реферат: Рабочая партия Шотландии
Отношения Базарова И Одинцовой Сочинение
Реферат по теме Экономико-географическое положение района
Маяковский Собрание Сочинений Купить
Курсовая работа по теме Нанесение полимерных покрытий. Классификация методов
Курсовая работа: Поэзия Андреаса Грифиуса
Реферат по теме Экономическая реформа Петра I
Сочинение О Чем Заставил Задуматься Роман Обломов
Реферат по теме Экологическое законодательство зарубежных стран
Какие Мы Современные Подростки Сочинение Небольшое
Курсовая Работа На Тему Кризис Нато
Политический портрет В. И. Ленина - История и исторические личности реферат
Организация лечебно-эвакуационного обеспечения населения при ликвидации последствий нападения противника - Военное дело и гражданская оборона реферат
Компьютерные сети - Программирование, компьютеры и кибернетика дипломная работа


Report Page