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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


  1. germanov_dev
    06.12.2022 10:21
    +1

    Отличный интерфейс! Жаль что не могу попробовать, я линуксоид и у меня нет Windows года с 2000-го.

    Будет классно если сделаете версию на JavaScript и выложите куда-нибудь.

    Я когда-то тоже крестики-нолики написал: https://games.germanov.dev/tictactoe/


    1. jaiprakash
      06.12.2022 10:27

      Wine? Предположу, что игра написана без наворотов и должна пойти.


    1. Dimaq21 Автор
      06.12.2022 10:30

      Надеюсь после того как я изучу unity, смогу и веб-версию сделать.


  1. Zara6502
    06.12.2022 11:03
    +1

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


    1. Dimaq21 Автор
      06.12.2022 11:33

      Возможно будет комфортнее играть на медленной скорости.

      Но в целом согласен, что не всем может быть привычным в подобных играх смотреть куда-то кроме поля.


      1. Inveker
        06.12.2022 16:33
        +2

        Можно попробовать сделать такой ui, что бы курсор был ещё и индикатором заряда: игрок часто смотрит на курсор, и это было бы удобнее, чем смотреть в угол экрана.


        1. Dimaq21 Автор
          06.12.2022 16:48
          +1

          Интересная идея.

          Мне правда кажется это немного разрушит атмосферу игры в блокноте.

          Но может додумаю как реализовать.


          1. Hallfire
            07.12.2022 03:48
            +1

            что если вместо батареек сделать курсор в виде чернильной ручки в которой виден уровень чернил и уже чернила расходовались / пополнялись?


            1. Dimaq21 Автор
              07.12.2022 03:54

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

              В изначально версии игры, которая была реализована в Google sheet, была одна линия с тремя делениями, и энергия от 2-го до 3-го деления восстанавливплась быстро, от 1-го до 2-го средне, а до 1-го деления медленно.

              В этой же версии намеренно вёл батарейки, т. К. Мне показалось более наглядным, что рисование одного элемента минус 1 батарейка (а не одно деление)

              Спасибо за предложение, подумаю как лучше сделать.


              1. Simpre_falta_algo
                07.12.2022 15:30
                +1

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


                1. Dimaq21 Автор
                  08.12.2022 11:04

                  Очень приятно, что детям дадут поиграть. Очень жду от детей обратной связи.

                  По поводу идеи с чернилами мне нравится, но 3 столбика мне кажется громоздко для отображения около курсора.


                  Наверное заменю энергию на чернила.


    1. Hidadmin
      08.12.2022 10:27
      +1

      В институте играли в бесконечные крестики-нолики

      Кажется оно )


  1. klimkinMD
    07.12.2022 08:30
    +2

    Здорово! То есть Вы до этого лета вообще не программировали? Обучение начали до переезда? И где так (респект и уважуха) учат?


    1. Dimaq21 Автор
      08.12.2022 11:12

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

      Я учусь на программе Масы в Израиле. Обучает нас компания Ционет. Летом у нас был обучающий, он же отборочный курс по JavaScript, с тестовым заданием в конце. Сама программа началась в августе.

      Подробнее про обучение на программе когда-нибудь может посвящу отдельный пост.


  1. arTk_ev
    07.12.2022 19:12
    +1

    Интересная концепция. И избавляет от дисбаланса походового варианта.

    Можно еще что-нибудь на поле добавить. Препятствия или доп. заряд, для разнообразия.


    1. Dimaq21 Автор
      08.12.2022 11:14
      +1

      Вообще у меня в планах, сделать игру "Точки" по такому же принципу. Идея с препятствиями и доп зарядами хотел реализовать, через возможность тратить заработанные очки, на различные бонусы. А бонусы как раз будут, буст по восстановлению энергии, поставить в какую-то клетку препятствие, уничтожить клетку (даже если в ней уже был какой-то элемент.