Поиграем в отладку этой воскресной ночью?

Вы когда-нибудь думали, что бывают игры, которые сами по себе являются языком программирования? Не обязательно Тюринг-полным, но всё же языком. У меня есть отличный пример. Игровой процесс Нейрошимы-6 чудовищно похож на дебаг. Снаружи, конечно, смотрится как стратегия, но внутри — она, отладка, родная.Посмотрите вот на эту картинку из жизни бойцов Пустошей.

dced0c55b2b94e628e7eb89c56096a4a.jpg

Фишки с 20/20 — это командные центры, оставшиеся две — это фишки бойцов с ближней атакой по направлению треугольников по краям. Пока всё просто — синий робот с ножами бьёт желтого ковбоя, а ковбой бьёт по синему комцентру. Давайте усложним стек и запустим компиляцию.

Предположим, ситуация такая:

d2ec99e71a094abaa08bc9c9437994af.jpg

Теперь нам важны приоритеты — эти вот числа на фишках. Это уровень инструкций в стеке. Если начать исполнение боя на картинке выше, то получится следующее:

== Слой 3Жёлтый панк с приоритетом 3 бьёт по мутанту и уничтожает его (если бы это не было сделано, мутант вломил бы на шаге 2 комцентру жёлтых). Больше никого с таким приоритетом нет. Идём ниже.

== Слой 2Жёлтый бегун и «ковбой» одновременно бьют по синему комцентру, а по «ковбою» бьёт робот с ножами. Комцентр теряет 2 единицы брони, «ковбой» уничтожен.

== Слой 1С приоритетом 1 никого нет. Эта часть стека просто пропускается.

== Слой 0Комцентры действуют с приоритетом 0 и бьют всех врагов рядом. Синий комцентр отстреливается и уничтожает бегуна и товарища с зазубренным ножиком. Он бы уничтожил и «ковбоя», да вот незадача — его уже два такта как нет.

Конец стека. Вводите новые данные.

Попробуете сами разобрать ситуацию вот с такими данными на входе? 5aeb83e51a8f40a7b85d96afbe911d63.jpg

Здесь модуль с плюсом забирает на себя атаку одного из бойцов, к которым подключен. То есть, грубо говоря, мутант около жёлтого комцентра получил вторую жизнь. Фишка взрыва — это жёлтые из текущего состояния запустили исполнение стека. Сетка у жёлтого парня с пушкой — это блокировка: вражеская фишка, на которую направлена сетка, не ложится в стек.

Проиграли ситуацию в голове? Сколько хитов у какого комцентра осталось? Какие фишки всё ещё на поле после полного разбора стека?

Вот что должно получиться: d4eae58121344e4ca573238cf5846354.jpg Суть игры в том, чтобы выкладывать 2 из 3 фишек каждый ход оптимальным образом. Каждый из игроков в голове проигрывает возможные варианты разбора стека и размещает свои войска-операторы так, как ему наиболее выгодно. Вот месиве настоящего боя даже простой ход становится настоящей отладкой:

ae24477e58704c43a3ea25798439a821.jpgОбратите внимание на красных стрелков — они бьют по ближайшей чужой фишке по направлению атаки, но не поражают свои войска.

Теперь вы сами 33603ddba8e141899317a9bd1a5da849.jpg

Вы играете за рыжих рейдеров — Гегемонию. У вашего командного центра 2 хита, у противника 6. Нужно взять и положить на поле 3 фишки из пяти доступных. После этого запустится компиляция, и в конце исполнения у противника должно быть меньше хитов, чем у вас. Фишки можно вращать.

Посмотрим, что есть: парень с ближним и дальним боем может вбить сразу два повреждения, и он быстрый. Прочный парень с двойной ближней атакой в три стороны, бронёй и защитой (у него 2 хита, в отличие от всех остальных однохитовых подразделений) тоже хорош, но чертовски медленный. Ещё один боец с двойной ближней атакой по верхнему сектору — компромисс между скоростью и мощью. И два рейдера — очень быстрые, не такие сильные.

Ответ прост: 12bef22c6926459c84c9aa0aa9c57d99.jpg Ещё одна сущность — приказы Перемещение (кривая стрелка) позволяет сдвинуть любую свою фишку на соседнюю свободную и повернуть, если хочется. Можно только сдвинуть, можно только повернуть, можно и то, и то. С помощью толчка (стрелка вверх) до компиляции вы можете сдвинуть чужую фишку. Ваша выталкивает её в направлении от себя на клетку. Если есть свободная клетка около толкаемой фишки, и в этой клетке толкаемая фишка будет дальше от вашей толкающей, чем раньше, можно использовать этот приказ. Снайперский выстрел снимает один хит с любого вражеского подразделения, то есть уничтожает всё, что не бронировано.

725bcf8ddd6e4d1a8e3850872d2ae905.jpgУ вас хит, у зелёного врага — два. Да, ещё одно. Комцентры могут давать бонусы соседним своим фишкам: треугольник означает усиление атаки (здесь мужик с кривым ножиком получает вторую ближнюю атаку), звёзды у зелёных — возможность уйти в стек дважды (в свою инициативу и ниже, то есть стрелок над зелёным комцентром будет атаковать дважды на 3 и на 2).

Вот решение: d7679c5e63ed46deb67e1b9c6ba32aff.jpg И последняя языковая конструкция — модули Это подразделения, которые меняют свойства соседей, к которым подключены палочками. Треугольник и плюс — это усиление соответствующей атаки. +1 — это увеличение скорости, то есть приоритета обработки в стеке. Плюс — это защита от одной атаки (вместо атакуемого войска модуль с плюсом принимает атаку на себя). Задача: 599cd719527044acb61eddfce9548fc8.jpgУ вас хит, а у жёлтых и синих врагов — по три хита. Можете использовать три любых модуля из пяти, у нас демократия. Вражеский комцентр даёт плюс к инициативе (стрелок за синим комцентром стерляет на фазе 4 в самом верху стека), ваш — усиливает на 1 дальний бой.

Вот решение, попробуйте разобраться. Медленно, но верно мы подходим к циклам и рекурсии, чувствуете?

615de6342381499ca1bd9c953cd604b0.jpg

У одной из армий есть возможность построить бесконечный цикл, нанося бесконечные же повреждения до конца разбора стека.

Посложнее Вот этюд, сможете быстро растолкать врагов? Вы играете за красных, у вас 1 хит. У жёлтых 6 хитов, у зелёных 3, у синих — 2.8ec7766e857245169966668fe740c8c8.jpg

Выбирайте любые три фишки из пяти.

Вот ответ: ac2a356a4ff3424d8dc3f0cafb4652f0.jpg Видите, как здорово? Теперь представьте, что в настоящей игре такая отладка каждый ход. Вот почему я говорю про тактический симулятор дебага, да-да-да.

Вот настольная игра-оригинал, на странице которой есть детальные правила.

Призовой этюд 203c32be7db0463f9051d9f1e15b4042.jpgВы — Аванпост.

Если вы решите эту задачу Нужно приложить в комментарии картинку с ситуацией до «компиляции», которая приведёт к вашей победе — хоть зафотошопленную с фишками из вариантов выбора, хоть на салфетке, хоть словами, но однозначно. Первому решившему коробка Нейрошимы с доставкой по РФ. Если вам понравится эта воскресная игра, я продолжу с задачами.

Эта задача решена.

Скрытый текст В комментариях одно решение, вот классическое: e94c731def854c8b9535900e99f013d8.jpg Собственно, к чему я это. Если вы разработчик, то игра вам точно понравится. Мы же нашли ей ещё применение — советовали родителям как обучающую по логике-программированию.

P.S. Вторая призовая задача, этюд «блокировка на мьютексах»:

2009fd28cae84f64a57d22b004ed9675.jpgЗдесь надо будет залезть в правила за точной формулировкой действия сетей и сетевым парадоксом. Первый решивший кроме winKING тоже получит коробку.

© Habrahabr.ru