Вы когда-нибудь думали, что бывают игры, которые сами по себе являются языком программирования? Не обязательно Тьюринг-полным, но всё же языком. У меня есть отличный пример. Игровой процесс Нейрошимы-6 чудовищно похож на дебаг. Снаружи, конечно, смотрится как стратегия, но внутри – она, отладка, родная.
Посмотрите вот на эту картинку из жизни бойцов Пустошей.
Фишки с 20/20 – это командные центры, оставшиеся две — это фишки бойцов с ближней атакой по направлению треугольников по краям. Пока всё просто – синий робот с ножами бьёт желтого ковбоя, а ковбой бьёт по синему комцентру. Давайте усложним стек и запустим компиляцию.
Предположим, ситуация такая:
Теперь нам важны приоритеты – эти вот числа на фишках. Это уровень инструкций в стеке. Если начать исполнение боя на картинке выше, то получится следующее:
== Слой 3
Жёлтый панк с приоритетом 3 бьёт по мутанту и уничтожает его (если бы это не было сделано, мутант вломил бы на шаге 2 комцентру жёлтых). Больше никого с таким приоритетом нет. Идём ниже.
== Слой 2
Жёлтый бегун и «ковбой» одновременно бьют по синему комцентру, а по «ковбою» бьёт робот с ножами. Комцентр теряет 2 единицы брони, «ковбой» уничтожен.
== Слой 1
С приоритетом 1 никого нет. Эта часть стека просто пропускается.
== Слой 0
Комцентры действуют с приоритетом 0 и бьют всех врагов рядом. Синий комцентр отстреливается и уничтожает бегуна и товарища с зазубренным ножиком. Он бы уничтожил и «ковбоя», да вот незадача – его уже два такта как нет.
Конец стека. Вводите новые данные.
Здесь модуль с плюсом забирает на себя атаку одного из бойцов, к которым подключен. То есть, грубо говоря, мутант около жёлтого комцентра получил вторую жизнь. Фишка взрыва – это жёлтые из текущего состояния запустили исполнение стека. Сетка у жёлтого парня с пушкой – это блокировка: вражеская фишка, на которую направлена сетка, не ложится в стек.
Проиграли ситуацию в голове? Сколько хитов у какого комцентра осталось? Какие фишки всё ещё на поле после полного разбора стека?
Суть игры в том, чтобы выкладывать 2 из 3 фишек каждый ход оптимальным образом. Каждый из игроков в голове проигрывает возможные варианты разбора стека и размещает свои войска-операторы так, как ему наиболее выгодно. В месиве настоящего боя даже простой ход становится настоящей отладкой:
Обратите внимание на красных стрелков – они бьют по ближайшей чужой фишке по направлению атаки, но не поражают свои войска.
Вы играете за рыжих рейдеров – Гегемонию. У вашего командного центра 2 хита, у противника 6. Нужно взять и положить на поле 3 фишки из пяти доступных. После этого запустится компиляция, и в конце исполнения у противника должно быть меньше хитов, чем у вас. Фишки можно вращать.
Посмотрим, что есть: парень с ближним и дальним боем может вбить сразу два повреждения, и он быстрый. Прочный парень с двойной ближней атакой в три стороны, бронёй и защитой (у него 2 хита, в отличие от всех остальных однохитовых подразделений) тоже хорош, но чертовски медленный. Ещё один боец с двойной ближней атакой по верхнему сектору – компромисс между скоростью и мощью. И два рейдера – очень быстрые, не такие сильные.
Перемещение (кривая стрелка) позволяет сдвинуть любую свою фишку на соседнюю свободную и повернуть, если хочется. Можно только сдвинуть, можно только повернуть, можно и то, и то. С помощью толчка (стрелка вверх) до компиляции вы можете сдвинуть чужую фишку. Ваша выталкивает её в направлении от себя на клетку. Если есть свободная клетка около толкаемой фишки, и в этой клетке толкаемая фишка будет дальше от вашей толкающей, чем раньше, можно использовать этот приказ. Снайперский выстрел снимает один хит с любого вражеского подразделения, то есть уничтожает всё, что не бронировано.
У вас хит, у зелёного врага – два. Да, ещё одно. Комцентры могут давать бонусы соседним своим фишкам: треугольник означает усиление атаки (здесь мужик с кривым ножиком получает вторую ближнюю атаку), звёзды у зелёных – возможность уйти в стек дважды (в свою инициативу и ниже, то есть стрелок над зелёным комцентром будет атаковать дважды на 3 и на 2).
Это подразделения, которые меняют свойства соседей, к которым подключены палочками. Треугольник и плюс – это усиление соответствующей атаки. +1 – это увеличение скорости, то есть приоритета обработки в стеке. Плюс – это защита от одной атаки (вместо атакуемого войска модуль с плюсом принимает атаку на себя). Задача:
У вас хит, а у жёлтых и синих врагов – по три хита. Можете использовать три любых модуля из пяти, у нас демократия. Вражеский комцентр даёт плюс к инициативе (стрелок за синим комцентром стреляет на фазе 4 в самом верху стека), ваш – усиливает на 1 дальний бой.
Вот решение, попробуйте разобраться. Медленно, но верно мы подходим к циклам и рекурсии, чувствуете?
У одной из армий есть возможность построить бесконечный цикл, нанося бесконечные же повреждения до конца разбора стека.
Вот этюд, сможете быстро растолкать врагов? Вы играете за красных, у вас 1 хит. У жёлтых 6 хитов, у зелёных 3, у синих – 2.
Выбирайте любые три фишки из пяти.
Видите, как здорово? Теперь представьте, что в настоящей игре такая отладка каждый ход. Вот почему я говорю про тактический симулятор дебага, да-да-да.
Вот настольная игра-оригинал, на странице которой есть детальные правила.
Вы – Аванпост.
Эта задача решена.
Собственно, к чему я это. Если вы разработчик, то игра вам точно понравится. Мы же нашли ей ещё применение — советовали родителям как обучающую по логике-программированию.
P.S. Вторая призовая задача, этюд «блокировка на мьютексах»:
Здесь надо будет залезть в правила за точной формулировкой действия сетей и сетевым парадоксом. Первый решивший кроме winKING тоже получит коробку.
Решение:
Посмотрите вот на эту картинку из жизни бойцов Пустошей.
Фишки с 20/20 – это командные центры, оставшиеся две — это фишки бойцов с ближней атакой по направлению треугольников по краям. Пока всё просто – синий робот с ножами бьёт желтого ковбоя, а ковбой бьёт по синему комцентру. Давайте усложним стек и запустим компиляцию.
Предположим, ситуация такая:
Теперь нам важны приоритеты – эти вот числа на фишках. Это уровень инструкций в стеке. Если начать исполнение боя на картинке выше, то получится следующее:
== Слой 3
Жёлтый панк с приоритетом 3 бьёт по мутанту и уничтожает его (если бы это не было сделано, мутант вломил бы на шаге 2 комцентру жёлтых). Больше никого с таким приоритетом нет. Идём ниже.
== Слой 2
Жёлтый бегун и «ковбой» одновременно бьют по синему комцентру, а по «ковбою» бьёт робот с ножами. Комцентр теряет 2 единицы брони, «ковбой» уничтожен.
== Слой 1
С приоритетом 1 никого нет. Эта часть стека просто пропускается.
== Слой 0
Комцентры действуют с приоритетом 0 и бьют всех врагов рядом. Синий комцентр отстреливается и уничтожает бегуна и товарища с зазубренным ножиком. Он бы уничтожил и «ковбоя», да вот незадача – его уже два такта как нет.
Конец стека. Вводите новые данные.
Попробуете сами разобрать ситуацию вот с такими данными на входе?
Здесь модуль с плюсом забирает на себя атаку одного из бойцов, к которым подключен. То есть, грубо говоря, мутант около жёлтого комцентра получил вторую жизнь. Фишка взрыва – это жёлтые из текущего состояния запустили исполнение стека. Сетка у жёлтого парня с пушкой – это блокировка: вражеская фишка, на которую направлена сетка, не ложится в стек.
Проиграли ситуацию в голове? Сколько хитов у какого комцентра осталось? Какие фишки всё ещё на поле после полного разбора стека?
Вот что должно получиться:
Суть игры в том, чтобы выкладывать 2 из 3 фишек каждый ход оптимальным образом. Каждый из игроков в голове проигрывает возможные варианты разбора стека и размещает свои войска-операторы так, как ему наиболее выгодно. В месиве настоящего боя даже простой ход становится настоящей отладкой:
Обратите внимание на красных стрелков – они бьют по ближайшей чужой фишке по направлению атаки, но не поражают свои войска.
Теперь вы сами
Вы играете за рыжих рейдеров – Гегемонию. У вашего командного центра 2 хита, у противника 6. Нужно взять и положить на поле 3 фишки из пяти доступных. После этого запустится компиляция, и в конце исполнения у противника должно быть меньше хитов, чем у вас. Фишки можно вращать.
Посмотрим, что есть: парень с ближним и дальним боем может вбить сразу два повреждения, и он быстрый. Прочный парень с двойной ближней атакой в три стороны, бронёй и защитой (у него 2 хита, в отличие от всех остальных однохитовых подразделений) тоже хорош, но чертовски медленный. Ещё один боец с двойной ближней атакой по верхнему сектору – компромисс между скоростью и мощью. И два рейдера – очень быстрые, не такие сильные.
Ответ прост:
Ещё одна сущность – приказы
Перемещение (кривая стрелка) позволяет сдвинуть любую свою фишку на соседнюю свободную и повернуть, если хочется. Можно только сдвинуть, можно только повернуть, можно и то, и то. С помощью толчка (стрелка вверх) до компиляции вы можете сдвинуть чужую фишку. Ваша выталкивает её в направлении от себя на клетку. Если есть свободная клетка около толкаемой фишки, и в этой клетке толкаемая фишка будет дальше от вашей толкающей, чем раньше, можно использовать этот приказ. Снайперский выстрел снимает один хит с любого вражеского подразделения, то есть уничтожает всё, что не бронировано.
У вас хит, у зелёного врага – два. Да, ещё одно. Комцентры могут давать бонусы соседним своим фишкам: треугольник означает усиление атаки (здесь мужик с кривым ножиком получает вторую ближнюю атаку), звёзды у зелёных – возможность уйти в стек дважды (в свою инициативу и ниже, то есть стрелок над зелёным комцентром будет атаковать дважды на 3 и на 2).
Вот решение:
И последняя языковая конструкция – модули
Это подразделения, которые меняют свойства соседей, к которым подключены палочками. Треугольник и плюс – это усиление соответствующей атаки. +1 – это увеличение скорости, то есть приоритета обработки в стеке. Плюс – это защита от одной атаки (вместо атакуемого войска модуль с плюсом принимает атаку на себя). Задача:
У вас хит, а у жёлтых и синих врагов – по три хита. Можете использовать три любых модуля из пяти, у нас демократия. Вражеский комцентр даёт плюс к инициативе (стрелок за синим комцентром стреляет на фазе 4 в самом верху стека), ваш – усиливает на 1 дальний бой.
Вот решение, попробуйте разобраться. Медленно, но верно мы подходим к циклам и рекурсии, чувствуете?
У одной из армий есть возможность построить бесконечный цикл, нанося бесконечные же повреждения до конца разбора стека.
Посложнее
Вот этюд, сможете быстро растолкать врагов? Вы играете за красных, у вас 1 хит. У жёлтых 6 хитов, у зелёных 3, у синих – 2.
Выбирайте любые три фишки из пяти.
Вот ответ:
Видите, как здорово? Теперь представьте, что в настоящей игре такая отладка каждый ход. Вот почему я говорю про тактический симулятор дебага, да-да-да.
Вот настольная игра-оригинал, на странице которой есть детальные правила.
Призовой этюд
Вы – Аванпост.
Если вы решите эту задачу
Нужно приложить в комментарии картинку с ситуацией до «компиляции», которая приведёт к вашей победе — хоть зафотошопленную с фишками из вариантов выбора, хоть на салфетке, хоть словами, но однозначно. Первому решившему коробка Нейрошимы с доставкой по РФ. Если вам понравится эта воскресная игра, я продолжу с задачами.
Эта задача решена.
Скрытый текст
В комментариях одно решение, вот классическое:
Собственно, к чему я это. Если вы разработчик, то игра вам точно понравится. Мы же нашли ей ещё применение — советовали родителям как обучающую по логике-программированию.
P.S. Вторая призовая задача, этюд «блокировка на мьютексах»:
Здесь надо будет залезть в правила за точной формулировкой действия сетей и сетевым парадоксом. Первый решивший кроме winKING тоже получит коробку.
Решение: