Современная вариация крестиков-ноликов в реальном времени

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

Что же нового, в такой простой и старой игре?

Мы привыкли, что крестики-нолики, как и другие не сложные игры на бумаге пошаговые. Вначале один рисует крестик, затем второй рисует нолик. И так пока не соберётся линия из трёх подряд (или пяти для игры Гомоку).

Всё логично, ведь на бумаге рисовать одновременно на одном поле затруднительно.

Когда же элементы рисуются на виртуальной бумаге, то рисовать одновременно не проблема. И именно в этом и отличие новой вариации игры.

Игроки могут одновременно делать ходы на поле 10×10 клеток. За каждые 3 своих элемента подряд игрок получает 1 очко, а за 5 подряд — 3 очка. Игрок у которого больше очков побеждает.

Игровое поле X набрал 2 очка O набрал 3 очка за линию из 5Игровое поле X набрал 2 очка O набрал 3 очка за линию из 5

Для того, чтобы игра не превращалась в «Кто быстрее натыкает крестиков» в игре добавлена энергия в виде трёх батареек.

43728cabb5d495f539526e14e75a239d.png

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

3 месяца назад я переехал в Израиль. И одно из первых слов о которых здесь узнают эмигранты — סבלנות (совланут). Что в переводе значит «терпение».

И залог успеха в моей игре это совланут.

Всё дело в том, что скорость зарядки каждой батарейки разная.

  • Первая батарейка заряжается очень быстро,

  • вторая батарейка будет заряжаться в 1.5 раза медленнее.

  • Третья батарейка будет заряжаться в 2 раза медленнее первой.

Поэтому если вы нарисовали подряд 3 крестика, вы получили сразу 1 очко, но на средней скорости игры вам придётся ждать:

  • 20 секунд когда зарядится третья батарея;

  • 15 секунд вторая батарея;

  • 10 секунд первая;

    Итого 45 секунд на полную зарядку.

В это же время, игрок играющий за нолики, мог рисовать по одному кружку каждые 10 секунд. За 45 секунд игрок нарисует 4 круга и будет иметь 2 полностью заряженные батарейки, и половинку «быстрой» батареи.

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

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

В целом хотел создать атмосферу игры за столом, на листке бумаги. Много внимание уделял деталям. Осуществил анимацию рисования элементов, добавил курсор в виде карандаша, сделал кнопки меню стилизованные под надписи в тетради. Я ещё не «художник», я только учусь. Оценить геймплей игры можно на видео:

Игра написана на чистом С, с использованием WinAPI.

В игре есть возможность играть против компьютера. Также реализован локальный мультиплеер.

Ещё неделю назад, код был очень ужасен, но мудрые преподаватели сказали что надо отрефакторить. На днях завершил рефакторинг, и теперь не так стыдно показать «внутрянку». Поэтому кому интересно посмотреть что внутри — добро пожаловать на gitHub. Обучаться программированию я начал этим летом, так что опытные товарищи, сильно не пугайтесь.

Очень прошу всех владельцев ПК с windows заходить на dimaq21.itch.io/tik-tak-toe пробовать и комментировать!

© Habrahabr.ru