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

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

    Решение:
    Мосигра
    248.28
    Настольные игры и здравый смысл
    Share post

    Comments 58

      +1
      Думал, лет 12 назад, когда впервые попробовал написать скрипт для игры Ultima Online.
        0
        Есть ещё игры-детективы, они тоже могут быть очень похожи на отладку. Но там язык не фиксирован чаще всего.
          0
          SphereServer? :)
          +1

          Если правильно рассчитал, то у синих 2(может 3, смотря как поступит наш 2 1 с дальней атакой на 1ом слое ) у наших 4
            0
            Да, верно. Толстого уничтожает стрелок справа в слое 4 стека. А пушка в центре стерляет на 3, 2 и 1.
            Напишите мне в личку, пожалуйста, ФИО, адрес и телефон для доставки коробки.
              0
              Написал. Интересные задачи, заставляет хорошенько подумать.
                +2
                Спасибо за игру, качество на высоте.
                P.S. сори за качество фото.
              0
              Фотошопа нету, прийдётся словами
              Координаты начинаются с единицы, слева направо, сверху вниз

              Поворачиваем снайпера в столбце 4 стока 3 в сторону берсерка столбец 2 строка 4
              Убийство кидаем на пулемётчика столбец 3 строка 5
              Выставляем мечника с 2мя пунктами ближнего боя в столбец 4 строка 1
              Выставляем гашение инициативы -1 — между базами столбец 2 строка 2
                0
                Нижний парень с двумя ближними ударами испортил вам картину.
                  0
                  Его убивает повёрнутый снайпер 4-3 в 3м слое стека
                  Финальный счёт 4-2
                +2
                Интересная игра, но ужасно много правил. :)
                Как я и говорил в прошлый раз, ИМХО, можно получить более интересный результат имея на поле больше фишек с более простыми правилами.
                Впрочем, вопрос вкуса и целевой аудитории.
                  0
                  После обучалки на той же iOS всё достаточно просто и логично. Но на столе считать много, да.
                  0
                  Во второй призовой задаче нужно убить гибрида сверху в центре, бойца с сетью слева-снизу и бойца с сетью справа-сверху
                    0
                    Эмм… А во второй задаче (этюд №50) мы за кого играем?
                      +1
                      за желтых. у красных 3 хп, у остальных по 1
                        0
                        Мда, туплю я что-то. Приказы ведь на карточке желтые — Гегемонские:)
                      0
                      Есть хороший порт этой игры на iOS.
                        0
                        Там три версии игры. Бесплатная обучалка с очень тупым AI и двумя фракциями, платная полная игра с не менее тупым AI даже на высокой сложности — и отличный набор тактических этюдов, отличный от настольных.
                        0
                        image
                          0
                          Так у красных остается 1 хп и у нас (желтых) остается 1 хп. Ничья
                            0
                            Хотя нет, есть же еще стрелок в самом низу
                              +2
                              Зато, судя по правилам, фишка снайпера не может быть применена на свой юнит
                                0
                                Да, в правилах четко написано, что
                                Фишка снайпера наносит одно повреждение одной
                                выбранной ВРАЖЕСКОЙ фишке на поле

                                Так что я думаю, твое решение пока единственное.
                                  0
                                  Да, не учел слово «вражеской».
                            0
                            grasshoppergn ты вот такой вариант имел ввиду?
                            image
                              0
                              да
                                0
                                А в этом варианте у командного центра Молоха (красные) разве не остается 1 ХП? Солдата с сетью и Убийцу Борго (синие внизу) блокируют сети. Т.о. по кц Молоха урон наносит только наш Универсальный солдат. Или я что-то неправильно просчитал?
                                  0
                                  Сам себе и отвечу. Не учел бонус атаки от нашего командного центра.
                                    0
                                    именно:)
                                      0
                                      Друзья, кто отвечал ниже, простите меня. grasshoppergn выиграл, поскольку в третьей ревизии правил есть важное замечание в разделе «игра втроём, каждый сам за себя» о том, что фишки армии, у которой уничтожен комцентр, уничтожаются (удаляются с поля) после боя, а не сразу в той фазе, когда был уничтожен комцентр игрока. Иначе на фазе три один из сетевых комплексов перестал бы блокировать угрозу нашему комцентру. Этюд, видимо, писался ранее. Итого — к вечеру я получил возможность проверить все детали, простите ещё раз за ожидание.
                              0
                              Ещё два этюда попроще. Внимание, они не призовые, а просто подумать. Поэтому не такие зубодробительные, как выше.



                                0
                                Эмм. А можно вопрос по второй призовой? Решение grasshoppergn верное ил нет? А то не озвучили правильный ответ… Стоит дальше ломать голову?
                                  0
                                  Пока верного ответа на второй нет.
                                    0
                                    эмм… а в чем ошибка моего решения?
                                      0
                                      У этой задачи много решений, в ответах наверное дано другое.
                                      Вот пример моего решения: Гегемония — 1, Молох — -1, Борго — 0.
                                      image
                              • UFO just landed and posted this here
                                  0
                                  Голова уже не варит, но может так:
                                  image
                                  Если конечно я все правильно рассчитал.
                                    0
                                    Не понимаю, кто будет убивать КЦ красных. Желтый сеткой поймал снайпера синих внизу, красный робот поймал синего бойца рядом с КЦ, а желтый снайпер отвернулся от КЦ.
                                      0
                                      Желтый снайпер в 3 фазе атакует ближним боем скованного сеткой синего бойца, а дальним выстрелом выносит красного робота. Соответственно уже со следующей фазы синий боец рядом с красным КЦ будет свободен. А он начинает работать только в 1 фазе, и соответственно тремя ближними ударами кончает красный КЦ.
                                        0
                                        Верно, уже голова не варит))
                                          0
                                          Будем ждать ответа Milfgard.
                                          На мой взгляд уже как минимум три правильных ответа опубликовано. Видимо он с коллегами после работы проиграет все ситуации:)
                                            0
                                            Простите, я тут закрутился. Рано утром проверю все альтернативные ситуации и отвечу.
                                              0
                                              *получилось раньше
                                          0
                                          Нет, он одновременно делает ближний удар и дальний удар в ближайшего бойца, это не последовательные шаги.
                                      0
                                      Еще вопрос появился. Если к примеру КЦ уничтожен в стадии инициативы 3, то его стрелки могут действовать в нижних фазах в течении этого хода или нет?
                                        0
                                        В зависимости от ревизии правил ответы такие:
                                        1. Вместе с уничтожением комцентра уничтожается и армия.
                                        2. Не может.
                                        0
                                        1. Убить красного стрелка сверху
                                        2. Убить красного бойца с сетью в левом нижнем углу
                                        3. Отвернуть нашего бойца с сетью во втором столбце, например вниз, чтобы не блокировал синего стрелка.
                                          +2
                                          В дремучие девяностые были MUD-ы, текстовые онлайн РПГ игры, предки того, что сейчас выглядит как Lineage, WOW…

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

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

                                          Когда-то такой сервер админил я, и вот, 15 лет спустя, многих продвинутых игроков знаю как хороших админов/девелоперов.
                                            0
                                            Решение с использованием 2 фишек.
                                            image
                                            Тут изображение с отмеченными заблокированными юнитами
                                            image


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

                                                2. Если я правильно понимаю, то данные этюды из компьютерной версии. Можно ссылку на нее?
                                                  0
                                                  1. Желтый командный центр на 1 увеличивает силу ближнего боя все соседним союзным фишкам. Поэтому синий центр получет 2 единицы от верхнего левого юнита, 2 от левого нижнего и 1 от правого нижнего.
                                                    +1
                                                    В таком случае не сходится самый первый пример с разбором:
                                                    Жёлтый бегун и «ковбой» одновременно бьют по синему комцентру, а по «ковбою» бьёт робот с ножами. Комцентр теряет 2 единицы брони, «ковбой» уничтожен.

                                                    Разве комцентр должен был потерять не 3 хп? Одну от ковбоя и 2 от бегуна (сам бегун + бонус от соседнего союзного кц).
                                                      0
                                                      Да, должен терять 3 хп, ошибка в разборе. Думаю, вам стоит написать про эту ошибку Милфгарду в личку.
                                                        0
                                                        Да, я до этого не упоминал про способности комцентров, поэтому возникла такая путаница.
                                                        0
                                                        Небольшое дополнение: по той же причине желтый панк наносит мутанту также 2 единицы урона. Для обычных юнитов типа этого мутанта разницы нет, — все равно погибнет. Но есть довольно много юнитов с двумя «HP», обычная атака с одного раза таких не убивает.
                                                      0
                                                      omican опередил. Чуть подробнее:
                                                      == Слой 3:
                                                      КЦ синих получает 2 урона от бойца с ближней и дальней атакой. Убивается медик синих от второго бойца желтых.
                                                      == Слой 2:
                                                      КЦ синих получает 2 урона от бойца желтых, расположенного рядом с КЦ желтых (+1 урон добавляет КЦ желтых). КЦ синих получает 1 урон от бойца с сетями. КЦ желтых получает 2 урона. Боец 3-ка желтых, боец 2-ка с сетями погибают.
                                                      == Слой 0:
                                                      КЦ обеих команд убивают стоящих вокруг бойцов.
                                                      == Итого:
                                                      КЦ желтых 18, КЦ синих 15. На поле оба КЦ и два одинаковых бойца синих.

                                                    Only users with full accounts can post comments. Log in, please.