Для того чтобы представить процесс «Проезд перекрестка» будем использовать диаграмму активности (рис.3.15).
После того как игрок запускает игру, СКДИ формирует игровую сцену и задает состояния для ее ресурсов, автомобиля и светофора. В начале игры сцена принимает первое состояние, автомобиль стоит, горит красный свет.
После этого подсистема визуализации отображает игровую сцену игроку. Если
игрок нажимает на кнопку «Вперед», СКДИ изменяет состояние ресурсов на сцене и
посылает сигнал в подсистему визуализации. Сцена принимает второе состояние,
при котором горит красный свет и автомобиль едет. После этого сеанс игры
завершается и игрок получает сообщение, что он нарушил правила. Если игрок не
совершает действий, то по истечению таймера СКДИ изменяет состояние сцены и
посылает сигнал в Unity. Сцена
принимает третье состояние. Если игрок нажимает кнопку «Ехать», то СКДИ
получает сигнал от Unity, после чего
изменяет состояние сцены на четвертое и посылает сигнал в подсистему
визуализации. После этого игрок получает сообщение, что он успешно справился с
заданием. Если игрок бездействовал, то по истечению таймера СКДИ снова изменяет
состояние сцены на первое и посылает сигнал в подсистему визуализации, после
чего последовательность повторяется до тех пор, пока не придет в конечную
точку.
Рисунок 3.15 Диаграмма активности
На рис.3.16 представлена диаграмма последовательности. Диаграмма позволит
определить сообщения, которые передаются между объектами и очередность событий.
Рисунок 3.16 Диаграмма последовательности
Для реализации деловой игры необходимо будет создать игровую сцену, на
которой будет происходить основное действие игры. Ключевыми элементами на ней
будут являться кнопки управления, автомобиль и светофор. Разработанный прототип
светофора представлен на рис. 3.17.
Рисунок 3.17 Прототип светофора
Игровой элемент светофор согласно выделенным нами ранее свойствам может принимать два состояния, когда горит красный свет и когда горит зеленый свет, для этого создали два состояния для каждого из цвета светофора, которые можно будет изменить согласно сценарию.
Как видно на рис.3.18 представлен прототип игрового уровня. На нем будет
один элемент управления кнопка. С ее помощью игрок сможет управлять
автомобилем.
Рисунок 3.18 Прототип игрового уровня
В игре игроку предстоит управлять автомобилем, который будет ехать по
дороге и сталкиваться с различными препятствиями. Для этого в сцене GameScene сформируем начальную игровую сцену и
создадим ключевые объекты.
Так как игрок будет управлять автомобилем, добавим в сцену пустой игровой
объект и назовем его Car. В
компонент Sprite Render добавим объекту спрайт автомобиля. Добавим объекту
компонент Box Collider и отметим галкой свойство Is Trigger. Также добавим компонент Rigidbody 2D и выставим свойство Body Type на Kinematic. Для того чтобы можно было реализовать движение объекта в пространстве
добавим скрипт CarScript
(рис.3.19).
Рисунок 3.19 Создание игрового объекта автомобиль
В игре автомобиль сможет ехать вперед по дороге и стоять на месте. За
движение машины будет отвечать метод Ride (рис.3.20).
Рисунок 3.20 Скрипт Ride
Этот метод будет вызываться в стандартном методе Update каждый кадр и в зависимости от того, какое состояние сейчас имеет ресурс автомобиль, машина будет либо стоять, либо ехать.
В то время пока игрок не встречает на пути препятствия, он будет ехать по
пустой дороге. Для того чтобы реализовать пустую дорогу создадим игровой объект
и назовем его emptyRoad. Он будет включать в себя два
элемента, фон и пустой игровой объект, который расположен на конце дороги (рис.3.21).
Рисунок 3.21 Создание объекта «Пустая дорога»
Пустой игровой объект назовем EndPoint и он понадобится для того, чтобы формировать бесконечную
дорогу. К самому объекту emptyRoad добавим элементы Rigidbody, BoxCollider2D и RoadScript (рис.3.22).
Рисунок 3.22 Настройка объекта «Пустая дорога»
Скрипт RoadScript нам нужен для того, чтобы, когда
игрок задевал область BoxCollider. перед игроком создавалась следующая часть дороги и таким образом не
обрывалась пустотой (рис.3.23).
Рисунок 3.23 Создание дороги
На рис.3.23 показан вызов метода SpawnRoad, который и будет отвечать за создание нового участка дороги перед игроком. Подробнее создание бесконечной трассы будет описано дальше в работе.
Одним из ключевых событий игры, с которым предстоит встретиться игроку,
будет проезд светофора. Для этого представим в виде схемы само событие. Как
видно на рис.3.24 проезд перекрестка состоит из двух возможных состояний
светофора: если горит красный светофор или если горит зеленый светофор.
Рисунок 3.24 Возможные состояния светофора
Игрок может подъехать к переезду в любой из двух состояний светофора. И в
каждой ситуации ему предстоит принять решение. На рис.3.25 представлено
событие, когда горит красный светофор. В таком случае в точке принятия решения
игрок может проехать светофор и тогда он совершит ошибку, а если остановится,
то сделает все правильно.
Рисунок 3.25 Горит красный свет
На рис.3.26 представлена схема события, когда горит зеленый светофор. На
ней видно, что если игрок будет стоять на перекрестке с включенным зеленым
светофором, то он совершит ошибку, а в случае если проедет перекресток,
совершит правильное действие.
Рисунок 3.26 Горит зеленый свет
Для того чтобы реализовать описанную выше схему возьмем за основу уже созданную
пустую дорогу и переименуем ее в tlRoad.
Немного изменим внешний вид и создадим еще один пустой объект, который назовем
TrafficLight. Он будет включать в себя два света, между которыми будет
переключаться. Для того чтобы реализовать переключения света светофора добавим
игровому объекту элемент скрипт и назовем его TrafficLight. В этом скрипте
будет выполняться переключение между красным и зеленым светом светофора. Для
того чтобы хранить информацию о состоянии светофора создадим переменную activeLight, которая будет принимать значение
«0», когда горит красный свет и «1», когда светофор горит зеленым светом.
Значение этой переменной
будем передавать в
качестве состояния ресурса «светофор». На
рис.3.27 представлен метод, который отвечает за переключение света. Метод ChangeColor будет вызван сначала при появлении
светофора в игре, для того чтобы установить тот или иной свет, а потом каждые
10 секунд, чтобы изменить свет на противоположный.
Рисунок 3.27 Скрипт изменения света светофора
Также добавим к игровому объекту элемент BoxCollider2D и пометим его на уровне со светофором. Он будет отслеживать
стоит игрок перед светофором или он проехал мимо (рис.3.28).
Рисунок 3.28 Область принятия решения
Область BoxCollider2D и будет выступать в качестве точки принятия решения. Для этого в скрипт TrafficLight добавим два контролера, которые будут реагировать, когда игрок подъедет к светофору и когда проедет мимо. После того как игрок подъедет к светофору будет запущен таймер, который отслеживает, стоит игрок перед светофором или нет. В случае если игрок будет стоять перед светофором дольше половины продолжительности действия сигнала светофора или игрок пересечет светофор, то будет вызван метод, который инициализирует метод tlController в классе GameManager, чтобы отследить принятое игроком решение (рис.3.29). В нем тип строки-взаимодействия приравнивают 1, а состояние ресурса «светофор» становится равно переданному в метод значению, после чего вызывается метод кодирования сообщения.
Рисунок 3.29 Реакция на проезд светофора
Для того чтобы формировать дорогу перед игроком будем в классе GameManager создадим массив игровых объектов roadPrefabs, в который добавим пустую дорогу и дорогу со светофором.
Также нам понадобятся два метода. При вызове метода CreateRoad, будет создано указанное количество
экземпляров объектов дороги всех видов. Следом, в зависимости от вида дороги эти
экземпляры будут добавлены в стек объектов. Такой способ инициализации игровых
объектов позволит нам в начале игры создать необходимое количество экземпляров
и хранить их внутри игры. Такой затрачивает меньше вычислительных мощностей
компьютера в сравнении с созданием каждый раз нового экземпляра игрового
объекта (рис.3.30).
Рисунок 3.30 Создание стека дорог
Второй метод SpawnRoad,
необходим для непосредственного расположения экземпляров дороги перед игроком
(рис.3.31).
Рисунок 3.31 Расположение дорог в игре
Когда игрок будет подъезжать к краю дороги, будет вызван этот метод. В случае если стеки, в которых находятся экземпляры дорог пустые, будет вызван метод, чтобы заполнить их. Если в стеках есть экземпляры дорог, то случайным образом из одного из стеков возьмем экземпляр дороги и расположим его перед игроком.
Для того чтобы было возможно использовать те экземпляры дорог, мимо
которых уже проехал игрок, тем самым экономя ресурсы компьютера, добавим в
скрипт RoadScript еще один метод, который назовем Recycle (рис.3.32). Этот метод позволит
возвращать уже «использованные» экземпляры дорог обратно в стек. Вместо того,
чтобы их просто уничтожать объект, сможем постоянно использовать уже созданные
ранее экземпляры дорог.
Рисунок 3.32 Повторное использование экземпляров
Так как одной из главных задач работы является возможность реализовать удаленное управление игрой и игровой логикой, то нам необходимо отслеживать действия, которые совершает игрок и реагировать на них не напрямую в игре, а через WCF сервис. Для этого будем использовать строку-взаимодействия с типом «событие».
Для того чтобы отслеживать нажатие игроком какой либо кнопки на
клавиатуре либо в игре, создадим метод ButtonDown в классе GameManager. В качестве свойства в него будут
передаваться ID нажатой кнопки, после чего будет
вызван метод шифрования (рис.3.33).
Рисунок 3.33 Реакция на нажатие клавиши
К примеру, если будет нажата клавиша «Пробел», то ID клавиши будет равно «01», что соответствует «Пробелу». В сервисе в ответ будет отправлено сообщение, которое вызовет метод изменения состояния ресурса «машина». В случае если до этого автомобиль стоял, он поедет или наоборот.
На примере, разработанной в рамках данной главы, деловой игры «Проезд
перекреста» демонстрируется работоспособность подсистемы взаимодействия.
Подсистема взаимодействия позволяет проводить деловые игры, в подсистеме
визуализации используя игровую логику, которая заложена в веб-сервисе.
Взаимодействия между двумя частями игры производится посредством
строки-взаимодейстия.
Подсистема взаимодействия является основным связующим элементом между игроком и разработанными в СКДИ сценариями. Данная система необходима для проведения деловых игр на основе сформированных в СКДИ сценариев. Это позволит вырабатывать у игрока компетенции и впоследствии их измерять.
В ходе работы проведен анализ уже существующих систем визуализации компьютерных и деловых игр, который послужил основой для разработки требований к игре и способу взаимодействия между ее элементами. Была спроектирована подсистема взаимодействия, которая позволяет взаимодействовать логической и визуальной части игры между собой.
В выпускной квалификационной работе была спроектирована и реализована
деловая игра «Проезд перекрестка». Она была создана при помощи выделенных
средств разработки и с использованием описанных в работе методов взаимодействия.
На примере данной деловой игры была проведена апробация подсистемы
взаимодействия. Описанные в работе средства взаимодействия СКДИ с визуальной
частью могут послужить основой для дальнейшего проектирования и реализации
других подсистем студии.
1. Карауылбаев С.К. Особенности применения учебно-деловых игр в обучении студентов / Мир науки, культуры, образования № 3 (34) 2012.
2. Лаврентьев С.Ю. Интерактивные методы обучения как средство активизации познавательной активности будущих учителей технологии и предпринимательства // Комелина В.А. Современные проблемы науки и образования. - 2011. - №6.; URL: https://www.science-education.ru/ru/article/ view?id=5218 (дата обращения: 10.12.2016).
. Панина Т.С. Современные способы активизации обучения: Учеб. пособие для студ. высш. учеб. заведений / Т.С. Панина, Л.Н. Вавилова; 4-е изд., Под ред. Т.С. Паниной. - М.: 2008. - 176 с.
4. Webservices In Unity [Электронный ресурс] // URL: http://wiki.unity3d.com/index.php?title=Webservices_In_Unity (дата обращения: 10.12.2016)
5. Maria Bielikova, Marko Divecy, Rudolf Kajan, Peter Jurnecka, L’ubos Omelina (2008) «Automatic generation of adaptive, educational and multimedia computer games» - Springer-Verlag London Limited 2008, pp. 371-384
. Ulrich Wechselberger «Teaching Me Softly: Experiences and Reflections on Informal Educational Game Design» - Springer-Verlag Berlin Heidelberg 2009, pp.90 - 104
. Gwo-Jen Hwang, Han-Yu Sung, Chun-Ming Hung, Li-Hsueh Yang and Iwen Huang «A knowledge engineering approach to developing educational computer games for improving students’ differentiating knowledge» - British Journal of Educational Technology Vol 44, No. 2, 2013, pp. 183-196.
. Richard Moss. The state of educational games in the Minecraft era [Электронныйресурс]//URL:http://www.gamasutra.com/view/news/283507/The_state_of_educational_games_in_the__Minecraft_era.php. (дата обращения: 05.12.2016)
9. Карауылбаев С.К. Особенности применения учебно-деловых игр в обучении студентов / Мир науки, культуры, образования № 3 (34) 2012.
. Занько C.Ф. Игра и учение: теория, практика и перспективы игрового обучения: В 2 ч. - М.: Логос, 1992.
. Геронимус Ю.В. Игра. Модель. Экономика. - М.: Знание, 1989. - 208 с.
12. Кавтарадзе Д.Н. Обучение и игра: введение в активные методы обучения / Моск. психолого-соц. ин-т. - М.: Флинта, 1998. - 91 с.
. Викентьева О.Л. Концепция Студии Компетентностных Деловых Игр / Викентьева О.Л., Дерябин А.И., Шестакова Л.В. //Современные проблемы науки и образования. - 2013. - № 2.; URL: https://www.science-education.ru/ru/article/view?id=8746 (дата обращения: 15.02.2017).