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

None
Десятичные пятнашки (вариант от Subaru)

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

Подробнее

Что такое "Бинарные пятнашки". Это игра аналогичная той что на картинке, но цифровая, и числа в ней отображаются в бинарном виде.

Я заметил, что в игре очень удобным образом все числа укладываются в 4 бита информации: от 1 (0b0001) до 15 (0b1111). Таким образом ячейка каждого числа может быть представлена четырьмя светодиодами, а свободная ячейка, куда "сдвигаются" остальные, будет состоять из неподсвеченных светодиодов (0b0000). Вся игра - это матрица 4х4 из таких ячеек.

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

None
Двоичное представление чисел в ячейке

Корпус

В 2013 году, когда я работал над Пятнашками, 3D-печать только появлялась в Москве и очень хотелось попробовать технологию. Этот проект оказался весьма кстати.

Я не умел на тот момент в SolidWorks'ы, и воспользовался бесплатным и простым редактором SketchUp.

Всё изделие состоит из трёх крупных деталей и четырёх кнопок.

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

Лицевая часть корпуса
Лицевая часть корпуса
  1. отверстие для выдавливания батарейки из отсека

  2. зацепы для задней крышки

  3. выступ, чтобы прижать отсек батарейки

  4. стойки под винты (2 шт.)

  5. отверстие под батарейку CR2032

  6. отверстие под выключатеть

  7. отверстие под кнопку сохранения игры

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

None
"Выравниватель" диодов
  1. отверстия под диоды (64 шт.)

  2. вырез для кнопки

Задняя крышка цепляется защёлками за лицевую панель с одной стороны и прикручивается винтами - с другой. Классический подход. И кнопки, которые ложатся под лицевую панель.

None
Задняя крышка и кнопки
  1. зацепы

  2. выпуклости для прижимания печатной платы

  3. отверстия под винты

Печатная плата

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

None
None
С выравнивателем светодиодов
None
Задняя сторона платы

Сборка

После сборки, изделие стало выглядеть так.

None
В корпусе

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

None

Как вы наверное заметили, из отсека батарейки торчит скотч. Дело в том, что отверстие для выдавливания батарейки оказалось неработоспособным. По задумке при давлении скрепкой на батарейку сбоку, она должна была выйти из отсека в сторону - в отверстие, но не тут-то было! Силы трения оказались сильнее и эта задумка, к сожалению, накрылась. Ничего лучше чем приклеить к батарейке кусок скотча я на тот момент не придумал. "Нет ничего более постоянного, чем временное", и кусок скотча позволяет вынимать батарейки и по сей день. Сейчас провал в этом моменте мне кажется довольно очевидным.

Прошивка + исходники

Прошивка написана в Bascom-AVR. К тому моменту этот компилятор был уже похоронен, но освоить Basic было быстро и просто и я его какое-то время использовал до перехода на Assembler, а потом на C.

64 диода, конечно же, не могут индивидуально управляться микросхемой у которой 32 ножки (ATmega8). Поэтому была использована динамическая индикация.

Тут я оставлю черновики. Обычно они у меня выглядят ещё хуже и я не представляю, как их разбирали на олимпиадах, когда сдавал их вместе с основными листами. Но здесь это скорее про ностальгию + по ним можно понять электрическую схему. Нормальной схемы нет, на тот момент я работал в Sprint-Layout и сразу отрисовывал дорожки.

Было два варианта, как в начале игры расставлять числа: либо по счету (от 1 до 15), но в случайные ячейки, либо ставить по порядку в ячейки, но выбирать случайные числа. Я пошёл первым путём, думаю, так интереснее. Во-первых, во время расстановки можно понять как выглядит каждое число, а во-вторых, интереснее когда числа загораются в случайных ячейках, нежели они бы выводились строго по очереди.

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

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

Исходники здесь. Сразу прошу прощения за бардак - тогда я не использовал git. Рабочая прошивка bascom_3, а "asm" это, вероятно, попытка переписать на assembler. Уже не помню успешная или нет, но на всякий случай выложил всё.

Результат

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

Это видео начинается с загрузки предыдущей игры из EEPROM. Также показан процесс сохранения игры. И уже есть случайная расстановка при запуске, увидеть её можно с 50-ой секунды.

Итоги

В те времена я был молод, и сон был не обязателен: я просидел над проектом рекордные 49 часов, не вставая, пока он наконец не заработал. И только тогда, удовлетворённый, я отправился спать.

На этом, кажется, всё.

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

Все исходники здесь.

Буду рад комментариям, вопросам и замечаниям!

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


  1. LeshaRB
    31.10.2023 05:33

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

    Я вот только хотел спросить, а что в конце?
    Есть какая-то индикация или другое уведомление, что игра окончена.
    Или звучит призовая мелодия, как в игре "Ну погоди" если набрать 1000 очков =)


    1. DiTsi Автор
      31.10.2023 05:33

      Нет, в текущей прошивке эффектов в конце не предусмотрено, это возможность для upgrade'а. Если решите повторить игру и будет нужна помощь с кодом - я в деле!


  1. simenoff
    31.10.2023 05:33
    +4

    Можно добавить кадр промежуточной анимации перемещения