image

Публикацию попросили убрать с кастрированного Хабра и перенести сюда, что я и делаю.


Кроме жанра, игры имеют форму. Это как искусство — есть поэмы и даже романы, а есть стихотворения. Пушкин, например, порой по десятку стихов за неделю в Appstore выкладывал. И мы пашем иной раз не хуже гения. Ай да мы с Пушкиным, ай да сукины сыны!

Одна из игр, написанная намедни, мне показалась достойной внимания широкой математической общественности, которая обожает геометрические головоломки, соревнования и самоиронию.


Постановка задачи


На плоскости задано случайное конечное число точек.
Два игрока ходят по очереди.
За один ход игрок может соединить любые две точки прямой линией.
Линия не должна пересекать другие фигуры.

Цель игры


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

Модификация игры


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

Особенности геометрической реализации



Для начального расположения точек я обрезаю экран iPhone до прямоугольника 300 на 400 и делаю по краям поля шириной по 10 пикселей.
Расстояние между точками ограничиваю числом не менее 16 пикселей (для удобного захвата пальцем).

Число точек задается случайно в диапазоне от 12 до 30 штук.

При построении запрещаю проходить линии ближе 5 пикселей до любых точек, находящихся на пути.

Особенности интеллекта



В качестве соперника выбран процессор фирмы Apple. Он играет в двух состояниях.
При рейтинге игрока менее 25 баллов, Apple думает на один ход вперед, случайно соединяя точки, если нет варианта с немедленным получением очка.
При рейтинге игрока 25 баллов и выше, соперник думает на 2 хода вперед, проверяя четность полученных после хода возможностей построения треугольников.

В процессе разработки я увеличивал глубину хода до 10, после чего программа уходила в глубокой транс и падала мордой в салат.

В процессе игры выработались стандартные трюки, с помощью которых иногда можно выигрывать. Надеюсь, Вы их найдете сами.

Математическую теорию игры не строил, но примитивные варианты раскладов для расположения 4-х точек рассматривал.

В зависимости от выпуклости 4-ех точечного шаблона, при оптимальной игре с обеих сторон игрок, ходящий первым играет либо выигрывает 2-0, либо проигрывает 1-2.

image
Выпуклый шаблон. Игрок, ходящий первым, побеждает 2-0.

image
Невыпуклый шаблон. Игрок, ходящий первым, терпит поражение 1-2.

Для 5-ти точечного шаблона, игрок, ходящий первым всегда проигрывает.
image
5-ти точечный выпуклый шаблон. Игрок, ходящий первым всегда проигрывает.

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

Всех с Новым Годом — он с бонусом! В 2016-ом — дополнительный день жизни…

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


  1. V1RuS
    10.01.2016 19:20
    +1

    > Выпуклый шаблон. Игрок, ходящий первым играет вничью 1-1
    > Невыпуклый шаблон. Игрок, ходящий первым играет выигрывает 2-1

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


    1. PapaBubaDiop
      10.01.2016 20:14

      Крейзи Линкс бесплатно без смс.

      А вы молодец, разоблачили меня. Но насчет 1:1 согласны?


      1. 3dtim
        12.01.2016 12:51

        а как же андроид?


        1. PapaBubaDiop
          12.01.2016 13:59

          Отдал без-воз-мез-дно project одному из местных хабра-жителей для разработки под Андроид.


  1. ttools
    10.01.2016 23:52

    Вот интересно, действительно есть какая-то рациональная необходимость ставить target версию iOS 8.0? На iPhone 4, например, насладиться не сумел


    1. PapaBubaDiop
      11.01.2016 00:54

      Скажите, а какая максимальная версия iOS на iPhone 4?


      1. makecode
        11.01.2016 01:48

        iOS 7.1.2


      1. ttools
        11.01.2016 01:50

        7.1.2.


        1. PapaBubaDiop
          11.01.2016 02:08
          +4

          Для 7.1 в самом деле ничего в проекте менять не надо, просто выбрать строку с этим номером. Я объясню, почему это не сделал. При создании проекта автоматически ставится номер 9.2.

          Я жму на него, чтобы выбрать версию поменьше — и передо мной выскакивает список версий от 9.2 до 8.0 БЕЗ ПОЛЗУНКА!

          Разумеется я выбираю 8.0 и думаю, что это минимально возможная версия для моего Xcode.

          Но я лошара, потому что если еще раз нажать (уже на 8.0) — то вывалится меню с ползунком, где есть и 6.0 и 9.2…

          Короче, я исправлюсь, простите меня, люди добрые…


  1. RoiS
    13.01.2016 10:47
    +1

    Эта игра мне напомнила другую из детства, в которой на листочке в клетку сначала ограничивается некая область, а затем игроки по очереди обводят стороны клеток внутри области. Тот, кто обводит последнюю сторону клетки, «захватывает» её. Цель — захватить больше клеток в области, чем противник.
    Так вот в ней, после «захвата» клетки ход не переходил. Соответственно, захват был каскадным, целыми сериями. Любопытно, если в этой игре сделать такую модификацию (то есть, не передавать ход после завершения треугольника), будет ли интересно?


    1. PapaBubaDiop
      13.01.2016 11:20

      Эта игра называется dots и в прошлом году срубила кучу бабок в Appstore. Мы в нее в детстве играли на уроках.

      Твое предложение распространить принцип dots на мою идею очень интересно, сегодня попробую.


      1. RoiS
        13.01.2016 12:01

        Ой, спасибо за название! Оказывается, в маркете реализаций уже достаточно, можно пробовать.


    1. PapaBubaDiop
      13.01.2016 11:44

      Игра стала другой, на мой взгляд интереснее — одно условие — надо гораздо больше точек, типа около 100. В конце игры образуются туннели, и ты можешь отыграть на длинном туннеле все, что проиграл до этого. Тем более, соперник пока не так интеллектуален, и не умеет считать длину туннелей))

      Инетерсно играть на десктопе мышкой, на айпаде сложно попасть пальцем, надо переделывать управление на два клика вместо move