Вы когда-нибудь думали, что бывают игры, которые сами по себе являются языком программирования? Не обязательно Тьюринг-полным, но всё же языком. У меня есть отличный пример. Игровой процесс Нейрошимы-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 тоже получит коробку.

Решение:

Комментарии (58)


  1. dcc0
    24.05.2015 22:10
    +1

    Думал, лет 12 назад, когда впервые попробовал написать скрипт для игры Ultima Online.


    1. Milfgard Автор
      24.05.2015 22:12

      Есть ещё игры-детективы, они тоже могут быть очень похожи на отладку. Но там язык не фиксирован чаще всего.


    1. kurokikaze
      25.05.2015 16:33

      SphereServer? :)


  1. winKING
    25.05.2015 00:03
    +1


    Если правильно рассчитал, то у синих 2(может 3, смотря как поступит наш 2 1 с дальней атакой на 1ом слое ) у наших 4


    1. Milfgard Автор
      25.05.2015 02:27

      Да, верно. Толстого уничтожает стрелок справа в слое 4 стека. А пушка в центре стерляет на 3, 2 и 1.
      Напишите мне в личку, пожалуйста, ФИО, адрес и телефон для доставки коробки.


      1. winKING
        25.05.2015 05:53

        Написал. Интересные задачи, заставляет хорошенько подумать.


      1. winKING
        01.06.2015 20:30
        +2

        Спасибо за игру, качество на высоте.
        P.S. сори за качество фото.


  1. tzlom
    25.05.2015 00:15

    Фотошопа нету, прийдётся словами
    Координаты начинаются с единицы, слева направо, сверху вниз

    Поворачиваем снайпера в столбце 4 стока 3 в сторону берсерка столбец 2 строка 4
    Убийство кидаем на пулемётчика столбец 3 строка 5
    Выставляем мечника с 2мя пунктами ближнего боя в столбец 4 строка 1
    Выставляем гашение инициативы -1 — между базами столбец 2 строка 2


    1. Milfgard Автор
      25.05.2015 02:30

      Нижний парень с двумя ближними ударами испортил вам картину.


      1. tzlom
        25.05.2015 10:37

        Его убивает повёрнутый снайпер 4-3 в 3м слое стека
        Финальный счёт 4-2


  1. kraidiky
    25.05.2015 08:32
    +2

    Интересная игра, но ужасно много правил. :)
    Как я и говорил в прошлый раз, ИМХО, можно получить более интересный результат имея на поле больше фишек с более простыми правилами.
    Впрочем, вопрос вкуса и целевой аудитории.


    1. Milfgard Автор
      25.05.2015 11:05

      После обучалки на той же iOS всё достаточно просто и логично. Но на столе считать много, да.


  1. grasshoppergn
    25.05.2015 09:05

    Во второй призовой задаче нужно убить гибрида сверху в центре, бойца с сетью слева-снизу и бойца с сетью справа-сверху


  1. AdmAlexus
    25.05.2015 09:18

    Эмм… А во второй задаче (этюд №50) мы за кого играем?


    1. grasshoppergn
      25.05.2015 09:29
      +1

      за желтых. у красных 3 хп, у остальных по 1


      1. AdmAlexus
        25.05.2015 09:55

        Мда, туплю я что-то. Приказы ведь на карточке желтые — Гегемонские:)


  1. bsboris
    25.05.2015 10:03

    Есть хороший порт этой игры на iOS.


    1. Milfgard Автор
      25.05.2015 11:04

      Там три версии игры. Бесплатная обучалка с очень тупым AI и двумя фракциями, платная полная игра с не менее тупым AI даже на высокой сложности — и отличный набор тактических этюдов, отличный от настольных.


  1. Ramires
    25.05.2015 10:29

    image


    1. grasshoppergn
      25.05.2015 10:37

      Так у красных остается 1 хп и у нас (желтых) остается 1 хп. Ничья


      1. grasshoppergn
        25.05.2015 10:39

        Хотя нет, есть же еще стрелок в самом низу


        1. grasshoppergn
          25.05.2015 10:43
          +2

          Зато, судя по правилам, фишка снайпера не может быть применена на свой юнит


          1. AdmAlexus
            25.05.2015 10:47

            Да, в правилах четко написано, что

            Фишка снайпера наносит одно повреждение одной
            выбранной ВРАЖЕСКОЙ фишке на поле

            Так что я думаю, твое решение пока единственное.


          1. Ramires
            25.05.2015 10:51

            Да, не учел слово «вражеской».


  1. AdmAlexus
    25.05.2015 10:42

    grasshoppergn ты вот такой вариант имел ввиду?
    image


    1. grasshoppergn
      25.05.2015 10:43

      да


      1. AdmAlexus
        25.05.2015 10:51

        А в этом варианте у командного центра Молоха (красные) разве не остается 1 ХП? Солдата с сетью и Убийцу Борго (синие внизу) блокируют сети. Т.о. по кц Молоха урон наносит только наш Универсальный солдат. Или я что-то неправильно просчитал?


        1. AdmAlexus
          25.05.2015 10:54

          Сам себе и отвечу. Не учел бонус атаки от нашего командного центра.


          1. grasshoppergn
            25.05.2015 10:56

            именно:)


            1. Milfgard Автор
              25.05.2015 21:41

              Друзья, кто отвечал ниже, простите меня. grasshoppergn выиграл, поскольку в третьей ревизии правил есть важное замечание в разделе «игра втроём, каждый сам за себя» о том, что фишки армии, у которой уничтожен комцентр, уничтожаются (удаляются с поля) после боя, а не сразу в той фазе, когда был уничтожен комцентр игрока. Иначе на фазе три один из сетевых комплексов перестал бы блокировать угрозу нашему комцентру. Этюд, видимо, писался ранее. Итого — к вечеру я получил возможность проверить все детали, простите ещё раз за ожидание.


  1. Milfgard Автор
    25.05.2015 11:12

    Ещё два этюда попроще. Внимание, они не призовые, а просто подумать. Поэтому не такие зубодробительные, как выше.




    1. AdmAlexus
      25.05.2015 12:13

      Эмм. А можно вопрос по второй призовой? Решение grasshoppergn верное ил нет? А то не озвучили правильный ответ… Стоит дальше ломать голову?


      1. Milfgard Автор
        25.05.2015 12:25

        Пока верного ответа на второй нет.


        1. grasshoppergn
          25.05.2015 12:37

          эмм… а в чем ошибка моего решения?


          1. Ramires
            25.05.2015 13:52

            У этой задачи много решений, в ответах наверное дано другое.
            Вот пример моего решения: Гегемония — 1, Молох — -1, Борго — 0.
            image


  1. mifki
    25.05.2015 13:57

    Хорошая, должно быть, игра, пару раз пытался пробовать, но очень неприятна графика и сеттинг, не идёт вообще.


  1. AdmAlexus
    25.05.2015 14:16

    Голова уже не варит, но может так:
    image
    Если конечно я все правильно рассчитал.


    1. Ramires
      25.05.2015 14:43

      Не понимаю, кто будет убивать КЦ красных. Желтый сеткой поймал снайпера синих внизу, красный робот поймал синего бойца рядом с КЦ, а желтый снайпер отвернулся от КЦ.


      1. AdmAlexus
        25.05.2015 14:48

        Желтый снайпер в 3 фазе атакует ближним боем скованного сеткой синего бойца, а дальним выстрелом выносит красного робота. Соответственно уже со следующей фазы синий боец рядом с красным КЦ будет свободен. А он начинает работать только в 1 фазе, и соответственно тремя ближними ударами кончает красный КЦ.


        1. Ramires
          25.05.2015 14:49

          Верно, уже голова не варит))


          1. AdmAlexus
            25.05.2015 14:51

            Будем ждать ответа Milfgard.
            На мой взгляд уже как минимум три правильных ответа опубликовано. Видимо он с коллегами после работы проиграет все ситуации:)


            1. Milfgard Автор
              25.05.2015 21:25

              Простите, я тут закрутился. Рано утром проверю все альтернативные ситуации и отвечу.


              1. Milfgard Автор
                25.05.2015 21:47

                *получилось раньше


        1. Milfgard Автор
          25.05.2015 21:43

          Нет, он одновременно делает ближний удар и дальний удар в ближайшего бойца, это не последовательные шаги.


  1. AdmAlexus
    25.05.2015 14:39

    Еще вопрос появился. Если к примеру КЦ уничтожен в стадии инициативы 3, то его стрелки могут действовать в нижних фазах в течении этого хода или нет?


    1. Milfgard Автор
      25.05.2015 21:25

      В зависимости от ревизии правил ответы такие:
      1. Вместе с уничтожением комцентра уничтожается и армия.
      2. Не может.


  1. alcr
    25.05.2015 15:29

    1. Убить красного стрелка сверху
    2. Убить красного бойца с сетью в левом нижнем углу
    3. Отвернуть нашего бойца с сетью во втором столбце, например вниз, чтобы не блокировал синего стрелка.


  1. saboteur_kiev
    25.05.2015 18:44
    +2

    В дремучие девяностые были MUD-ы, текстовые онлайн РПГ игры, предки того, что сейчас выглядит как Lineage, WOW…

    Протокол был обычный telnet, поэтому знание практически любого скриптового языка позволяло написать простенького бота. Многие клиенты прямо предлагали свой встроенный скриптовый язык триггеров для автоматизации процесса.

    Для многих отдельно взятых игроков, игра в MUD была некой негласной битвой между ботописателями и ботодетекторами.

    Когда-то такой сервер админил я, и вот, 15 лет спустя, многих продвинутых игроков знаю как хороших админов/девелоперов.


  1. FError
    25.05.2015 21:14

    Решение с использованием 2 фишек.
    image

    Тут изображение с отмеченными заблокированными юнитами
    image


    1. Milfgard Автор
      25.05.2015 21:45

      Красиво. У меня нет третьей коробки Нейрошимы-6, но я пришлю вам Сопротивление, если вы не против. Пожалуйста, в личку ФИО, адрес и телефон.


  1. omican
    26.05.2015 13:29
    +2

    Открыл Нейрошиму пару недель назад на игротеке Мосигры. Игра настолько хороша, что ради возможности написать этот комментарий я проапгрейдился до полноценного хабровского аккаунта :-)
    Успел сыграть всего 4 партии, но уже чувствуется, что игра весьма глубока, и learning curve в ней соответствующая. В частности, для успешной игры нужно знать сильные и слабые стороны каждой армии, помнить, какие вообще есть фишки (сколько фишек движений у зеленых, например) и считать уже вышедшие в сброс.


  1. dougrinch
    26.05.2015 16:01

    1. Так и не смог понять (а в исходном посте не нашел), как считается урон? Даже в самом («Попробуете сами разобрать ситуацию вот с такими данными на входе?») у синего комцентра никак не получается 15 хп. Было больше, было меньше, а ровно 15 — никак.

    2. Если я правильно понимаю, то данные этюды из компьютерной версии. Можно ссылку на нее?


    1. omican
      26.05.2015 16:14

      1. Желтый командный центр на 1 увеличивает силу ближнего боя все соседним союзным фишкам. Поэтому синий центр получет 2 единицы от верхнего левого юнита, 2 от левого нижнего и 1 от правого нижнего.


      1. dougrinch
        26.05.2015 19:13
        +1

        В таком случае не сходится самый первый пример с разбором:

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

        Разве комцентр должен был потерять не 3 хп? Одну от ковбоя и 2 от бегуна (сам бегун + бонус от соседнего союзного кц).


        1. omican
          26.05.2015 21:15

          Да, должен терять 3 хп, ошибка в разборе. Думаю, вам стоит написать про эту ошибку Милфгарду в личку.


          1. Milfgard Автор
            26.05.2015 22:53

            Да, я до этого не упоминал про способности комцентров, поэтому возникла такая путаница.


        1. omican
          26.05.2015 21:26

          Небольшое дополнение: по той же причине желтый панк наносит мутанту также 2 единицы урона. Для обычных юнитов типа этого мутанта разницы нет, — все равно погибнет. Но есть довольно много юнитов с двумя «HP», обычная атака с одного раза таких не убивает.


    1. winKING
      26.05.2015 16:24

      omican опередил. Чуть подробнее:
      == Слой 3:
      КЦ синих получает 2 урона от бойца с ближней и дальней атакой. Убивается медик синих от второго бойца желтых.
      == Слой 2:
      КЦ синих получает 2 урона от бойца желтых, расположенного рядом с КЦ желтых (+1 урон добавляет КЦ желтых). КЦ синих получает 1 урон от бойца с сетями. КЦ желтых получает 2 урона. Боец 3-ка желтых, боец 2-ка с сетями погибают.
      == Слой 0:
      КЦ обеих команд убивают стоящих вокруг бойцов.
      == Итого:
      КЦ желтых 18, КЦ синих 15. На поле оба КЦ и два одинаковых бойца синих.