Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Реализация автомата для управления поведением танка
Сначала были реализованы два автомата с тремя состояниями: «Поиск игрока» или «Поиск базы», «Агрессия» и «Смерть», но играть против такого противника было слишком сложно из-за его численного превосходства. Поэтому для повышения играбельности было решено остановиться на автомате, представленном ниже. Математическое описание модели автомата можно представить в виде: , где A – сам конечный автомат, S – множество состояний автомата, X – условия переходов между состояниями автомата, Z – действия, выполняемые в текущем состоянии. Множество состояний , где: – – состояние «Хаотичное движение»; – – состояние «Поиск игрока»; – – состояние «Поиск базы»; – – состояние «Агрессия»; – – состояние «Смерть». Множество условий переходов , где: – – истекло время хаотичного движения; – – истекло время поиска игрока; – – расстояние до противника менее чем 10 игровых единиц; – –уничтожен танк. Множество алгоритмов в состояниях , где: – – произвольное движение танка; – –поиск игрока, по рисунку 5; – –поиск базы, по рисунку 5; – – стрельба в противника; – – отсутствие действий. Модель конечного автомата для управления передвижением и стрельбы танка представлена на рисунке 12.
Рисунок 12 – Граф переходов автомата
Данная модель является наиболее эффективной в качестве искусственного интеллекта для данной игры, так как в ней сочетаются и алгоритм по поиску игрока, и алгоритм по поиску базы, а также время бездействия (хаотичного движения), за которое игрок должен расправиться с большинством противников уровня. Программный раздел Описание программы Данная программа реализована на языке С/С++ и выполнена в среде разработки Visual Studio 2015. В ней используются библиотеки iostream, Windows.h, conio.h, locale.h, time.h, cmath, подключаемые в файле header.h. Так же подключаются в header.h подключаются определения всех классов программы: base. h, battleground. h, beton. h, block. h, bonus. h, brick. h, bulblock. h, bullet. h, enemyTank. h, iceblock. h, mask. h, mind. h, pTank.h, Tank. h, waterblock. h. Определения функций данных классов, находиться в соответствующих файлах, но с расширением «. cpp» вместо «. h». Данная программа является многофайловым проектом, функция main представлена в файле «MAIN. cpp». После компиляции, сначала происходит запуск игры из меню, после чего загружаются данные из текстовых файлов: карта «mapx. txt» (где x–номер карты), модель танка «tankx. txt» (где x–уровень танка) и файл «scoreboard. txt» с таблицей рекордов, после чего начинается игра. Во время обработки данных выводится графическое изображение игры. По завершению программы выводится сообщение о конце игры.
Описание структуры данных Данная программы была написана, используя объектно-ориентированный подход, с использованием классов, механизмов наследования, инкапсуляции и полиморфизма, механизмов управления памятью и сборкой мусора. Так же были использованы элементы псевдографики, улучшения графического качества игры и улучшения игрового процесса. Далее будут приведены основные классы игры, описанные ранее во втором разделе.
Главный класс, содержащий объявления остальных, а также управляющий главными процессами игры. class battleground { int **board;//игровая карты int mapsizex;//ширина карты int mapsizey;//высота карты int enemyleft;//кол-во оставшихся врагов int GameStatus;//состояние игры int level;//номер карты int sound;//вк/выкл звук int players;//кол-во игроков public: brick **Rwall;//кирпичные стены beton **Swall;//беттоные стены mask **green;//Маскировачные кусты iceblock **ice;//ледянные блоки waterblock **water;//водяные блоки bulblock **bullblock;//коллизион модель пуль base eagle;//создание базы Tank yellow;//вызов танка Tank green2;//2-ой игрок enemyTank enemy[3];//танк компьютера bonus Bonus;//спавн бонуса mind II;//ИИ battleground(int l,int pl,int sd); void starter();//отрисовка карты void refresh();//обновление текстовой информации void stopgame();//конец игры int getgame(); int getsound(){return sound;} int getplayers(){return players;} int getenemy(){return enemyleft;} void decenemy(); void setting1();//загрузка карт int getposboard(int y4,int x4); void scoring();//подсчет очков }; Базовый класс для классов танка игрока и танка противника. Часть его функций - виртуальные из-за различных методов управлений танков: class pTank { protected: int lifes;//оставшиеся жизни int bcount;//счетчик снарядов char **body[6];//внешность танка int dir;//направление движения int x;//координата x int y;//координата y int startx;//начальная координата x int starty;//начальная координата y int MapX;//границы карты по x и y int MapY; int shoottime;//блокировка стрельбы
int Rtime;//время до возрождения int freezetime;//время заморозки управления int tanklevel;//уровень танка public: bullet shoot[102];//снаряды танка virtual void die() {}//обработка смерти танка virtual void setti() {}//загрузка танка virtual int move(int button) { return 0; }//функция по передвижению и отрисовки танка int getlifes() { return lifes; } void clear();//взрыв танка virtual void getstart(int z, int z2, int z12, int z22) {}//возрождение танка int getpos(int x3, int y3);//запрос координат int getRtime() { return Rtime; } void decRtime() { Rtime--; } virtual void load(int number) {}//загрузка новой внешности танка void clear(int direc);//очищение пройденного пути void pluslife() { lifes++; } void freeze(int temp) { freezetime = temp; } int getdir() { return dir; } void getposition(int &r1, int &r2) { r1 = x + startx;r2 = y + starty; } }; И базовый класс для определения игровых препятствий: class block { protected: int status;//здоровье блока int X;//координатаx int Y;//координатаy int cfont;//цвет текста для отображения int ctext;//цвет фона для отображения char character;//символ для отображения public: block(void){status=0;} virtual void create();//создание блока void show(int x1, int y1);//вывод блока на экран void show();//вывод блока на экран int getstatus();//проверка состояние блока }; Остальные классы представлены в приложении листинга программы. Описание основных функций Ниже даны основные функции, показывающие логику и функционирование работы программы. Функции setting 1() и starter (), запускающиеся при начале игры для загрузки карты и ее вывода на экран, и функция scoring () подсчета заработанных очков после окончания каждого уровня. Функции находятся в классе battleground: void battleground:: setting1();//загрузка карт void battleground:: starter();//отрисовка карты void battleground:: scoring();//подсчет очков Функция move (), отображающая и передвигающая танки, являющаяся виртуальной, а в производных классах находятся ее определение, и перегруженная функция по очистке пройденного пути передвижения танка: int Tank:: move(int button); //передвижение и отрисовка танка void Tank:: clear();//полная очистка танка void Tank:: clear(int direc); //очистка пройденного танком блока Виртуальная функция create ()создающая блоки и функция по выводу блока на экран: virtual void create();//создание блока void show();//вывод блока на экран Функции moving ()и setting ()по передвижению и созданию пули соответственно, находящиеся в классе bullet: int moving();//передвижение и отрисовка пули void setting(int a,int x1, int y1,int mx, int my, int FF,int blv,char wh); Остальные функции представлены в приложении листинга программы.
Экспериментальный раздел
|
||||||
Последнее изменение этой страницы: 2021-05-27; просмотров: 105; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.107.161 (0.015 с.) |