Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Реализация автомата для управления поведением танкаСодержание книги
Поиск на нашем сайте Сначала были реализованы два автомата с тремя состояниями: «Поиск игрока» или «Поиск базы», «Агрессия» и «Смерть», но играть против такого противника было слишком сложно из-за его численного превосходства. Поэтому для повышения играбельности было решено остановиться на автомате, представленном ниже. Математическое описание модели автомата можно представить в виде:
где A – сам конечный автомат, S – множество состояний автомата, X – условия переходов между состояниями автомата, Z – действия, выполняемые в текущем состоянии. Множество состояний – – – – – Множество условий переходов – – – – Множество алгоритмов в состояниях – – – – – Модель конечного автомата для управления передвижением и стрельбы танка представлена на рисунке 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; просмотров: 203; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.236 (0.01 с.) |