В любой мобильной игре используются регулярные сетки, они же матрицы. Одна сетка всегда на виду — это экран телефона размера 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 и еще через час — готова к продаже. Специально для местных яблофилов она объявлена бесплатной и ждет ваших рекордов. Все результаты я собираю в облаке, в том числе тайно храню последовательности лучших решений.

Спасибо за внимание.
Поделиться с друзьями
-->

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


  1. PapaBubaDiop
    26.01.2017 18:16

    Если кто-то захочет сделать такую же игрушку под Андроид с серьезными намерениями — подарю набор картинок
    типа этого.


    1. engune
      26.01.2017 19:03

      Мне вот интересно следующее. Когда то Вы писали, что научились рисовать графику в стиле Cut My Rope. А называется это стиль? Как его рисовать и в каком софте — можете просветить данный вопрос? Может есть примеры, ссылки или уроки. А на счет графики готов взять — будет как тест моего движка. Он еще в разработке, но как раз и игра и движок будут дописаны.


      1. PapaBubaDiop
        26.01.2017 20:39
        +1

        Нет, я просто распаковал одну из версий Cut My Rope и стащил картинки. Затем фотошоп, базовых знаний достаточно, чтобы скопировать/отредактировать изображения в подобном стиле. Но подобным я более не занимаюсь. Не потому, что не пират, а потому что большинство шлягеров пишется на Юнити, а там картинки шифруются, а расшифровывать мне лень…


  1. impetus
    26.01.2017 18:29
    +1

    Идея — класс.
    А варианта «двигаем квадраты по одному» (в стиле 15-шек) не рассматривали? Возможно у такого вариант тоже будет «играбельность».


    1. PapaBubaDiop
      26.01.2017 18:52
      +1

      Хороший совет. Я почему-то думал, что будет похоже на пятнашки и скучно — теперь гляжу, нет, совсем по-другому играется.


      1. impetus
        27.01.2017 14:02

        (я уж не говорю про простейший тетрис, набранный из таких вот квадратиков, ибо на «тетрис»-ы — копирайт)


  1. Arxitektor
    27.01.2017 09:44

    И, да, зеленые — самые опасные.

    А почему именно зеленые?


    1. PapaBubaDiop
      27.01.2017 10:43

      Тут без бутылки не разобраться.(с) ДМБ
      С одной стороны человеческий глаз различает неимоверное количество оттенков зеленого, с другой стороны — зеленых звезд никто не видит, лишь красные и голубые. Парадокс.


      1. LoadRunner
        27.01.2017 10:55

        А почему Вы к своим играм не выпускаете генераторы\решатели уровней?
        Я имею в виду алгоритм для ИИ, решающего эти головоломки.

        P. S. Мой любимый цвет зелёный, а зелёные матрицы опасны, потому что отсылка на Матрицу?


        1. PapaBubaDiop
          27.01.2017 11:46

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

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


          1. LoadRunner
            27.01.2017 11:56

            Футбол тоже женский и, наверное, пляжный?


            1. knagaev
              27.01.2017 15:28

              Женский пляжный флорентийский :)


            1. PapaBubaDiop
              27.01.2017 17:25

              Такого спорта нет, к сожалению)