Половинки квадрата



    В любой мобильной игре используются регулярные сетки, они же матрицы. Одна сетка всегда на виду — это экран телефона размера MxN. Кроме того, в Тетрисах и Лайнсах явно видны и другие, игровые сетки. В ААА играх матрицы спрятаны, но мы знаем, что они существуют. И, да, зеленые — самые опасные.

    При работе с сетками возникает столько сладких задач, что от вожделения поскорее их решить, пот капает с пальцев на клавиатуру. Одна из таких задач — заполнить матрицу случайными значениями. Например, есть сетка 5x5, которую надо заполнить 24 шариками 4 цветов. Должно быть 6 шариков каждого цвета и одна дырка. Псевдо-код примерно такой:

    var items = [Int]()
    let nItems = 25
    let nColors = 4
    


    // init array items
         items.append(0)
         for j in 1...nColors {
              for _ in 1...6 {
                   items.append(j)
              }
         }
    // shuffle
         for _ in 1...1000 {
             let k = microsoft_rand(nItems)    
             let j = microsoft_rand(nItems)
             let m = items[k]
             items[k] = items[j]
             items[j] = m
          }
    

    Сделаем код и алгоритм краше. Слово краше звучит устрашающе, согласитесь. Порой, чем краше код, тем ближе crash.

    let nItems = 25
    let nColors = 4
    var items = [Int]()
    // init array items
         for j in 0..<nItems {
             let k = 1 + j % nColors 
             items.append(j==0 ? j : k)
         }
    // shuffle
         for j in 0..<nItems-1 {
              let k = j + microsoft_rand(nItems-j)
              items.swap(k,j)
         }
    

    На последних 4-ех строчках Фил усмехнется, в php есть метод

    items.shuffle()

    Тем не менее, текст стал короче в 2 раза. Код — быстрее в 40 раз. Наверное, можно переделывать алгоритм для шариков еще долго. Но, скажу честно, шарики здесь не при чем. Основная тема — квадратики, которые делятся по диагонали на две равные половинки двумя способами. Получившимися половинками надо заполнить матрицу и получить на выходе неплохую игру.

    Встречайте Halves 2048.


    В игре нужно просто собрать обратно квадраты из половинок и очистить все поле. Управление игрой — абсолютно такое же, как в приложениях типа 2048 — проводим пальцем по экрану либо вверх-вниз, либо вправо-влево.

    При создании игры я стал другим человеком, внезапно осознав, что художники тоже люди и нуждаются в материальной оценке их труда. Потому купил у девушки-художника картинки и бекграунд за 15 долларов. Музыканты же — другое дело. Они могут заработать и в подземных переходах.

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

    В купленных картинках было меню, рассчитанное на 15 уровней. Пришлось мне соответствовать дизайну и сделать 15 разных геймплеев. Плейбоев и Геймплеев. Смешные могли бы быть фамилии. В результате измышлений на разных уровнях игры стали меняться размер матрицы 3x3, 5x5, 7x7, 9x9 и тип геймплея. Первый вариант — классический паззл — очистить доску за минимальное количество движений. Второй вариант — динамический — после каждого движения на доску падает 2, 4 или 6 половинок, старающихся завалить игровое поле. Надо продержаться как можно дольше. На первый вариант уходит 1 минута жизни игрока. Второй вариант занимает порой до 1 часа полета между Белградом и Любляной.

    Быстро слепив код, я взялся за тестирование. Необходимо было настроить уровни — получить примерное число ходов, за которое можно сложить головоломки и расставить рейтинги. Например, доску 5 на 5 я смог решить за 8 ходов, что вначале казалось невероятным.

    Осмелюсь предложить задачу тем, кто без iPhone



    Решение для юниксоидов
    4,3,5,2,4,3,5,2,5,2,
    2-left
    3-right
    4-up
    5-down

    Видео решение


    Для бесконечной игры надо было подобрать число падающих половинок — удивительно, но для доски 9 на 9 необходимо 7-8 выпадающих предметов после каждого хода игрока, иначе игра в самом деле становится бесконечной и скучной через полчаса.

    С публикацией проблем не было. 22 января я выложил игру на проверку. 24 вечером она была in review и еще через час — готова к продаже. Специально для местных яблофилов она объявлена бесплатной и ждет ваших рекордов. Все результаты я собираю в облаке, в том числе тайно храню последовательности лучших решений.

    Спасибо за внимание.
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 13

      0
      Если кто-то захочет сделать такую же игрушку под Андроид с серьезными намерениями — подарю набор картинок
      типа этого.
        0
        Мне вот интересно следующее. Когда то Вы писали, что научились рисовать графику в стиле Cut My Rope. А называется это стиль? Как его рисовать и в каком софте — можете просветить данный вопрос? Может есть примеры, ссылки или уроки. А на счет графики готов взять — будет как тест моего движка. Он еще в разработке, но как раз и игра и движок будут дописаны.
          +1
          Нет, я просто распаковал одну из версий Cut My Rope и стащил картинки. Затем фотошоп, базовых знаний достаточно, чтобы скопировать/отредактировать изображения в подобном стиле. Но подобным я более не занимаюсь. Не потому, что не пират, а потому что большинство шлягеров пишется на Юнити, а там картинки шифруются, а расшифровывать мне лень…
        +1
        Идея — класс.
        А варианта «двигаем квадраты по одному» (в стиле 15-шек) не рассматривали? Возможно у такого вариант тоже будет «играбельность».
          +1
          Хороший совет. Я почему-то думал, что будет похоже на пятнашки и скучно — теперь гляжу, нет, совсем по-другому играется.
            0
            (я уж не говорю про простейший тетрис, набранный из таких вот квадратиков, ибо на «тетрис»-ы — копирайт)
          0
          И, да, зеленые — самые опасные.

          А почему именно зеленые?
            0
            Тут без бутылки не разобраться.(с) ДМБ
            С одной стороны человеческий глаз различает неимоверное количество оттенков зеленого, с другой стороны — зеленых звезд никто не видит, лишь красные и голубые. Парадокс.
              0
              А почему Вы к своим играм не выпускаете генераторы\решатели уровней?
              Я имею в виду алгоритм для ИИ, решающего эти головоломки.

              P. S. Мой любимый цвет зелёный, а зелёные матрицы опасны, потому что отсылка на Матрицу?
                0
                Мои подходы к ИИ алгоритмам слишком простые — типа перебора/рекурсии. Мне не хватает времени Вселенной, чтобы дождаться решения.

                ПС. Не смотрел я Матрицу, Звездные войны и пр. Я только футбол смотрю и фигурное катание. Женское.
                  0
                  Футбол тоже женский и, наверное, пляжный?
                    0
                    Женский пляжный флорентийский :)
                      0
                      Такого спорта нет, к сожалению)

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