Стадии получения знаний
Не про меня, поэтому тэг "Моё" не ставлю
с9gagжено
Не про меня, поэтому тэг "Моё" не ставлю
с9gagжено
Комментарии к посту о двух студентах-программистах, которые ищут место для практики
Привет, Пикабу.
Лазая по просторам интернета наткнулся на одну занятную игрушку под названием Gladiabots. На данный момент игра находится на стадии открытого бесплатного альфа-тестирования и малоизвестна (поэтому я и захотел немного рассказать местному контингенту о ней), но вполне играбельна, весьма необычна и неплохо затягивает. Сейчас она доступна не только на PC, но также на Маках, линуксах и мобильных устройствах на Андроиде, а в будущем разработчики обещают поддержку ещё и iOS-устройств. Ссылки на игру в конце поста.
Итак, суть игры состоит в управлении небольшим отрядом из боевых роботов, но это предстоит делать не напрямую в процессе боя, а путём задания алгоритмов действия ботов до начала сражения, после старта же никакого влияния на ход событий оказать нельзя, можно лишь менять скорость течения времени и наблюдать; для изменения модели поведения роботов нужно прервать миссию, после чего придётся переигрывать её с начала. Слóва "алгоритмов" пугаться не надо, программирования в привычном понимании тут нет, алгоритмы представляются интуитивно понятными визуальными блок-схемами, созданием и редактированием которых и предстоит заниматься. Локализации нет (игра пилится "на коленке", вполне возможно, вообще одним человеком), но проблем с этим тоже не возникает, даже с моим убогим знанием английского, основанном на опыте компьютерных игр да на обрывках школьного курса в памяти. Теперь про правила: они очень просты. Посмотрим, например, на скриншот предбоевого экрана второй миссии:
Четверо слева снизу — наши бравые воины света, красные справа сверху — вороги поганые. Странная штука за спиной каждой команды — база. Жёлтые шароподобные многогранники в центре — "ресурсы". Задача — перетащить на свою базу более половины ресурсов и, возможно, перебить всех супостатов (у меня не выходило первого без второго, впрочем, я и не пытался). Роботы могут ходить, стрелять короткими очередями из автоматов (стоя на месте), подбирать близколежащий ресурс и взваливать его себе на закорки (а также скидывать, если надо). Доставленный на базу ресурс пропадает и засчитывается в виде очка команде, при этом скорость перемещения робота с ресурсом на горбу значительно ниже, чем налегке, а с ростом дистанции стрельбы сильно падает количество попаданий с очереди и, соответственно, наносимый урон. В дальнейшем открываются уровни с другими задачами (как минимум, есть простое рубилово без ресурсов) и боты с другим вооружением, но до них я, увы, пока не дошёл. Ещё у каждого робота есть две "полоски жизни":
Нижняя, собственно, показывет очки жизни, а верхняя — состояние щита. Прежде чем нанести повреждения роботу, необходимо разрушить его щит, при этом если бот какое-то время не получает повреждений, щит восстанавливается.
Перейдём к основному — к "программированию" робота. "Программа" представляется блок-схемой навроде такой (только вместо циферок пиктограммы условий и действий):
Овалы означают условия, а прямоугольники — действия. Проверки выполнения условий и возможности действий идут сверху вниз по самой левой ветке, при этом невыполнение условия или невозможность действия являтся условием перехода к более правой ветке: в этом примере робот сначала проверяет условие 1 как первый (ближний к "корню") пункт самой левой ветки. Если выражение 1 верно, он выполняет действие 1.1, если это возможно. Если сделать 1.1 нельзя, он проверяет условие 1.2 и в случае его истинности пытается выполнить 1.2.1. Если же 1.2 ложно или 1.2.1 сделать невозможно, бот переходит к проверке условия 1.3 и, если оно выполнено, пытается сделать 1.3.1. В случае невозможности выполнения 1.3.1 при этом, он пытается сделать 1.3.2. Если он так и не нашёл в ветке 1 выполнимого действия, к которому идёт цепь истинных условий, он переходит к попытке выполнить действие 2, если же и это невозможно, идёт в ветку 3 и т.д. Моё описание, конечно, может показаться сумбурным, но, поверьте, на деле всё просто и интуитивно понятно. К тому же, в игре есть туториал, который необходимо пройти перед выходом на миссии и в мультиплеер (под ним подразумевается сражение с ботами, действующими по алгоритму других игроков). Попробуем пройти первую миссию. Например, мы хотим сначала перебить всех противников плотным огнём всей дружной команды, а потом уже заниматься доставкой ресурсов в спокойной обстановке. Соответственно, приоритетным (самым левым) действием будет ведение огня по противнику. Но, как известно из туториала, огонь на дальних дистанциях малоэффективен, поэтому стрелять будем на средних и ближних. Также надо указать критерий выбора врага, по которому палить в случае наличия в секторе обстрела нескольких. Самый очевидный способ — бить ближайшего и не заморачиваться. Следующим по приоритету заданием будет продвижение в направлении вражеской базы при условии наличия на поле врагов (и автоматически при отсутствии врагов поблизости, т.к. в противном случае программа до этого не дойдёт, робот будет стоять и лупить по супостату). Затем — доставка ресурса на свою базу при наличии оного у робота, но изначально ресурса на спине робота нет, до него ещё необходимо добраться, поэтому также добавим в блок-схему команду движения к ближайшему ресурсу и его захват. В результате получим схему, подобную этой:
Как видим, ничего сложного. Теперь можно выбрать эту "программу" для каждого из ботов (игра позволяет задать кадждому роботу индивидуальную программу, выделяя им различные роли, но нам пока достаточно одинаковой для всех) и отправить нашу команду в бой.
Выходит, даже такого примитивного алгоритма достаточно для победы, хоть наши боты и совершенно по-глупому позволили противнику доставить один из трёх ресурсов на их базу. Что ж, есть над чем работать, тем более что при попытке пройти с таким алгоритмом вторую миссию, где у нас уже не будет численного преимущества, наших роботов просто перебьют. А напоследок можно разобраться с причиной столь глупого поведения наших ботов, которые отказывались стрелять по уходящему с ресурсом на спине противнику. В этом нам поможет инструмент, показывающий состояние логики бота (подсвечивает невыполняющиеся условия и невозможные действия на нашей блок-схеме красным, текущее действие и выполняющиеся условия — зелёным, а те пункты, до которых проверка не дошла — не подсвечивает) в окне справа снизу и радиусы его 90%-го, 50%-го, 10%-го и 0%-го поражения на поле (бот перед этим выделяется щелчком мыши). Как видно, несущий ресурс враг выходит из радиуса средней дистанции на дальнюю. В этот момент наши боты согласно "программе" прекращают стрельбу по нему и начинают движение вперёд, быстро сокращают дистанцию до рамок средней (порожний бот же бегает быстрее гружёного), останавливаются для изготовки к стрельбе, а пока они целятся, противник вновь выходит на дистанцию, считающуюся дальней, после чего эта ситуация повторяется до тех пор, пока робот противника не прекратит движение "от нас". Способов исправить это существует множество, но обозревать их не имеет смысла, это же не гайд и не прохождение одиночных миссий, тем более что они здесь служат скорее полем для тренировок перед выходом в мультиплеер. Пространство для творчества в игре велико, скачивайте, пробуйте, экспериментируйте...
Думаю, обзор основных элементов геймплея на этом можно завершить. Простите, если получилось криво, скучно и сумбурно, первый пост всё-таки. Если игра заинтересовала, скачать её "бесплатно, без регистрации и sms" можно тут: https://gfx47.itch.io/gladiabots
Но на сайте не всегда может быть свежая версия (ещё вчера висела 6.1.3 при наличии 7.8), поэтому за свежей версией можно зайти в соответствующую ветку на форуме игры: http://gfx47.com/games/Gladiabots/Forum/viewforum.php?f=4&am...
Ну и ссылка на Google Play:
https://play.google.com/store/apps/details?id=com.GFX47.Glad...
P.S. Пост несёт чисто ознакомительный характер и не является рекламой, я никак не связан с разработчиками игры, да и сама игра бесплатная (но можно сделать пожертвование). Баянометр почему-то выдавал абсолютно не связанные с этим постом вещи.
Всем привет, друзья!
Есть ли среди вас человек, который может помочь составить блок-схему по программе на ассемблере?
В долгу не останусь ;)
И устроили баттл. Четыре пикабушника каждую неделю снимают видео по заданию. Вы выбираете команду, голосуете за своего лидера комментами и лайками. Самых активных ждут награды!