Файл: Российской федерации федеральное государственное автономное образовательное учреждение высшего образования.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.12.2023
Просмотров: 372
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
50
В МТА всѐ взаимодействие происходит между элементами, которые структурированы в виде дерева. Корневой элемент дерева – это сам гейммод, а его потомки – это персонажи игроков, транспорт, маркеры и прочее. Функции могут применяться к корневому элементу и влиять на весь гейммод или на его отдельных потомков [1].
Подключение сервера к базе данных происходит при помощи функ- ции dbConnect с параметрами тип, имя, хост, порт, логин, пароль базы.
Функция вернѐт элемент подключения к БД. Ниже представлена функция, которая при старте гейммода создаѐт объект с подключением к базе дан- ных: function Connection() connectToPlayers = dbConnect("mysql",
"dbname=server_mta;host=127.0.0.1;port=3306",
"root", "password") if connectToPlayers then outputChatBox("Подключение к базе данных") else outputChatBox("Не удалось подключиться") end end addEven- en- tHandler("onResourceStart",getResourceRootElement(getThisResource()),Conn ection)
Данный элемент можно использовать при запросах к базе данных.
Функция dbQuery отправляет запрос. После вопросительного знака указаны переменные, которые передаются через запятую после запроса. select_id = dbQuery(connectToPlayers, "SELECT id FROM players WHERE log- in=?", login)
Результат запроса сохраняет функция dbPoll
, в которую передаѐтся элемент запроса и время в миллисекундах для ожидания запроса.
0
исполь- зуется для запроса без ожидания,
-1
– для ожидания без ограничения по времени. id = dbPoll(select_id, -1)
Запрос без результата выполняется функцией dbExec
: newplayer = dbExec(connectToPlayers,"INSERT INTO players(login, password)
VALUES (?,?)",login, password)
При помощи описанных функций игроки регистрируют свой аккаунт в базе данных, куда сохраняется весь полученный прогресс. Собственные события можно создавать при помощи функции addEvent
: addEvent("GiveMoney", true)
51
Сохранение игрового процесса очень важно, поэтому эффективнее всего делать это в момент его получения. Однако это сильно затрудняет работу сервера. Для оптимизации данного процесса следует сохранять сра- зу только критичную при потере данных для игрока информацию (напри- мер, деньги на балансе, заработанный уровень и т. д.). Информация, при обнулении которой не потеряется прогресс, может сохраняться с некото- рой периодичностью или при выходе из игры по событию onPlayerQuit
Также несостоявшиеся запросы очищаются функцией dbFree
Интерфейс игры создаѐтся в клиентской части. Рассмотрим пример создания простого приветственного окна, где можно размещать любую текстовую информацию для вошедших игроков. Для этого в функцию пе- редаѐтся координата самого верхнего левого пикселя, ширина и высота ок- на, строка с заголовком, а также булевое значение относительности разме- ров. Если этот аргумент равен true
, то все значения указываются от 0 до 1 и относительно родительского элемента (для внешнего окна — относительно экрана), в противном случае значения абсолютны.
GreetWindow = guiCreateWindow(40,80,100, 270, "Добро пожаловать!", false)
Элемент с текстом создаѐтся схожим образом. Укажем для него со- зданное окно родительским элементом в последнем аргументе:
Text = "Уважительно относитесь к другим игрокам, соблюдайте вежливость при общении. Приятной игры!"
Greeting = guiCreateLabel(0.1, 0.1, 0.7, 0.2, Text, true, GreetWindow)
Добавим к окну кнопку:
Button = guiCreatButton(0.4, 0.9, 0.3, 0.1, "Начать игру!", true, GreetWindow)
Для созданной кнопки добавим обработчик и функцию, скрывающую окно, передав в guiSetVisible элемент окна и значение видимости (
false
, если скрыто, true
– наоборот). Это скроет и все дочерние элементы интерфейса. function CloseWindow() guiSetVisible(GreetWindow, false) end addEventHandler("onClientGUIClick", Button, CloseWindow)
На клиенте можно менять визуальную часть игры. Пользовательскими моделями окружения (транспорт, оружие, здания, деревья и т. д.), создан- ными в 3D редакторах, можно заменять существующие модели.
У каждой модели есть три составляющие:
текстура модели определяется в файлах. txd;
габариты модели определяется в файлах. dff;
коллизия модели определяется в файлах. col;
Загружаем нужные файлы: txd = engineLoadTXD ("model.txd") dff = engineLoadDFF ("model.dff") col = engineLoadCOL ("model.col")
52
Теперь импортируем созданные элементы модели (необходимо знать существующий ID модели в игре): engineImportTXD(txd, 587) engineImportDFF(dff, 587) engineImportCOL(col, 587)
Таким образом, можно менять весь окружающий мир игры на клиент- ской части для создания интересного игрового опыта.
Программируя серверные и клиентские скрипты, можно написать оп- тимальный гейммод для нескольких сотен игроков онлайн.
Для оптимизации скриптов Lua при создании переменных использу- ется ключевое слово local
. Такие переменные существуют только внутри объявленной функции или скрипта [2]. При вызове переменной сначала смотрятся локальные переменные, что ускоряет работу скрипта.
Если создавать эффективные скрипты, которые хорошо работают как на клиенте, так и на сервере, то техническую часть этого процесса допол- няет творческая составляющая. В итоге может получиться достаточно увлекательный процесс создания игры, правила которой по большей части ограничиваются фантазией еѐ автора.
Литература
1. Иерузалимски Р. Программирование на языке Lua. – М.: ДМК-Пресс,
2016. – 382 с.
2. Руководство
MTA
[Электронный ресурс]
URL: https://wiki. multitheftauto.com/wiki/Main_Page.
53
1 2 3 4 5 6 7 8 9 ... 28
ОПЫТ ОРГАНИЗАЦИИ РОБОТОТЕХНИЧЕСКИХ КОНКУРСОВ
В ОНЛАЙН-ФОРМАТЕ
Бильченко А. К.
ФГАОУ ВО «Южный федеральный университет»
E-mail: bilchenko@sfedu.ru
Проведение крупных конкурсов и соревнований в традиционном – очном – формате в последние пару лет затруднено. К сожалению, целый ряд соревнований в 2020 и 2021 годах были перенесены или отменены, за- частую в последний момент, когда участники уже купили билеты и забро- нировали места в гостиницах. Всѐ чаще при планировании мероприятий приходится держать в уме вероятность их переноса в онлайн-формат. Фо- тотехнический клуб – структурное подразделение Станции юных техников г. Волгодонска – накопил определѐнный опыт проведения конкурсов в та- ком формате и готов им поделиться.
Для начала следует определиться с терминами. Есть дистанционные конкурсы, а есть конкурсы в онлайн-формате. В дистанционных конкурсах участники отправляют свои работы, а судьи их оценивают, при этом между отправкой и оценкой может пройти какое-то время, и участникам не нужно подключаться к каким-либо активностям по расписанию: им достаточно отправить работу в установленный срок и ждать результатов. Такие кон- курсы проходили и раньше, а сейчас их стало больше; среди тех, что про- водили мы – Олимпиада робототехников Волгодонска на изоляции
(2020 год), конкурсы по лего-конструированию «Звѐздные ковчеги» и
«Андроидные роботы» (2021 год) и некоторые другие.
Более интересный, но и более сложный в организации формат – он- лайн-конкурсы. Они подразумевают живое общение в прямом эфире орга- низаторов и участников. Участники выполняют задание одновременно, все вместе, под наблюдением судей, как на настоящих очных конкурсах, но при этом находятся дома. Наш первый опыт проведения конкурса по робо- тотехнике в таком формате относится к осени 2020 года, и это был сразу конкурс всероссийского уровня – квалификационный этап международно- го онлайн-марафона «РобоФинист-2020». Международный фестиваль «Ро- боФинист» проходил в Санкт-Петербурге ежегодно с 2014 по 2018 год, но из-за эпидемии в 2020 году его было решено провести в онлайн-формате, и в некоторых категориях организаторы делегировали проведение отбороч- ных (квалификационных) этапов региональным представителям, среди ко- торых были и мы. Волгодонску было доверено право провести квалифика- ционный этап по категории «Большое путешествие» в младшей возрастной группе. В других категориях квалификационные этапы проводили органи-
54 заторы из Санкт-Петербурга, Сарова, Пензы, Уфы, Самары, Саранска,
Минска и республики Крым. С помощью коллег из Санкт-Петербурга нам удалось всѐ подготовить, и квалификационный этап прошѐл успешно: в нѐм поучаствовали 39 юных робототехников из 7 городов России и около
200 зрителей (соревнования транслировались в прямом эфире на Ютубе, запись доступна на канале «РобоФиниста»). Опыт проведения был признан успешным, и в апреле 2022 года мы будем проводить отборочный этап фе- стиваля «РобоФинист-2022» в десяти категориях, одна из которых будет проходить в онлайн-формате, остальные – в очном.
В 2021 году наш проект «Энергия мечты» победил в конкурсе меро- приятий проекта «Школа Росатома», и Волгодонск получил право принять у себя финал инженерного форума для городов-участников проекта «Шко- ла Росатома». В концепции форума изначально была заложена смешанная форма проведения: одну из категорий (научно-практическую конферен- цию) планировалось провести в онлайн-формате, остальные – очно. Отбо- рочный этап конференции мы провели онлайн, по остальным направлени- ям в городах присутствия в сентябре прошли очные муниципальные этапы, были отобраны победители для участия в финале, но очередная волна эпи- демии привела сначала к переносу финала на декабрь, а затем и к необхо- димости проводить его онлайн. Было непросто за пару недель переделать все задания и подготовить технику, но, по оценкам представителей «Шко- лы Росатома», финал прошѐл успешно. В нѐм поучаствовали около 60 ре- бят из более чем 10 городов присутствия Росатома. В качестве экспертов мы привлекли специалистов из Новосибирска, Уфы, Пскова. Церемонии открытия и закрытия, а также образовательная часть форума транслирова- лись в прямом эфире на Ютубе, записи эфиров доступны в группе форума
ВКонтакте.
Таким образом, за время эпидемии мы организовали два крупных он- лайн-конкурса и поучаствовали примерно в полутора десятках конкурсов, проводимых другими организациями («РобоФинист», открытые петер- бургские соревнования по робототехнике, олимпиада НТИ, Всероссийская робототехническая олимпиада и многие другие). Кроме того, прошлым ле- том я проходил стажировку в Корпоративной академии Росатома на инже- нерной онлайн-смене «Юниоры Росатома», что позволило нам впослед- ствии провести инженерную смену в Волгодонске совместно с
ВИТИ НИЯУ МИФИ и Ростовской АЭС (она прошла осенью 2021 года в очном формате). Также на конференции Академии юных исследователей –
2022 часть секций прошла в онлайн-формате (мы проводили в этом форма- те конкурс «Скоростной набор текста» и одно из направлений секции «Ро- бототехника»).
При проведении большинства конкурсов использовалась платформа
Discord, по функциям подобная Зуму и Яндекс.Телемосту. В робототехни-
55 ческих соревнованиях в России это де-факто стандарт: на этой платформе проходит всероссийский этап Всемирной робототехнической олимпиады, соревнования в рамках «РобоФиниста», на ней же мы проводили и наш форум «Энергия мечты». Существенным ограничением этой платформы является невозможность организации видеочата более чем на 25 участни- ков (аудиочат поддерживает до 1000 участников, но без видео). Поэтому при проведении массовых эфиров приходится использовать несколько ка- налов и переключать участников между ними, а для зрителей организовы- вать трансляцию на Ютуб с использованием свободно распространяемой программы OBS Studio. Статья, рассматривающая технические аспекты проведения онлайн-соревнований с применением OBS Studio, доступна на портале «РобоФинист» (автор Кирилл Горев), мы использовали еѐ при проведении квалификационного этапа «РобоФиниста-2020», она нам очень помогла.
При проведении онлайн-соревнований важно распределить обязанно- сти между организаторами: как правило, выделяются такие роли, как глав- ный организатор, главный судья, ведущий трансляции, режиссѐр трансля- ции, модераторы и технические специалисты (а также судьи и эксперты).
Режиссѐр трансляции ведѐт эфир на Ютуб и управляет различными эффек- тами, модераторы организуют подключение участников в Дискорде, тех- нические специалисты поддерживают связь и ведут запись эфира, главный судья организует работу судей и отвечает за протоколы, ведущий трансля- ции общается с участниками и зрителями. На практике некоторые роли можно совмещать, но лучше, если каждую работу будет выполнять от- дельный специалист. При этом важно организовать их слаженное взаимо- действие, обязательно надо провести несколько репетиций и технических прогонов с участием всех организаторов.
Важно организовать работу с участниками: заблаговременно разо- слать им регламент работы и инструкцию по подключению, проверить связь (заранее!), выделить человека для оперативного созвона с участни- ками, испытывающими технические проблемы с подключением. Очень важна стабильная интернет-связь во время проведения конкурса. Помимо прямых эфиров на Ютубе и чата в Дискорде, желательно использовать и другие информационные каналы, в том числе социальные сети.
Литература
1. Горев К. В. Как запустить роботов в онлайн (Электронный ресурс). URL: https://robofinist.ru/article/18.
2. Квалификационный этап онлайн-марафона «РобоФинист-2020» в номи- нации
«Большое путешествие: младшая категория».
URL: https://youtu.be/0OUSuzajeko.