Комментарии 18
Сегодня тетромино описали бы битовой картой четыре на четыре.
Не, сегодня его описали бы джейсоном на четыре килобайта.
Та не. Сегодня было бы мегабайт сорок. Node.js, докер обязательно, каждая фигура в своем контейнере, коннекторы к чат-жпт, вебхуки на смену положения\вращение. Три-четыре фреймворка, на всякий случсай... Социальные сети для каждой фигурки... Сорок мег - оценка по нижней планке.
И время реакции на нажатие клавиши - от 200 миллисекунд (после того как JVM прогреется) до "Что-то пошло не так".
можно объявить конкурс на самый большой тетрис. Без искусственного увеличения исполняемого файла, только реализация логики.
я бы предложил другой вариант. Лоакальная LLM тренированная на тетрис. На входе текущая позиция и команда с клавиатуры, LLM в ответ на тетрис-промпт генерирует следующую позицию. Все на агентах естественно.
Достойно, солидно, вайб-интерпрайз.
Четыре килобайта это только импорты библиотек для парсинга джейсона. Сами фигуры потянули бы на мегабайт, чтобы с запасом на будущее масштабирование)
Дальше эту таблицу нужно было бы ввести. Сначала вычислить на бумаге в клеточку: разложить все девятнадцать положений и выписать 152 смещения со знаками плюс 19 переходов между положениями. Потом набрать числа на клавиатуре терминала и вычитывать глазами. Опечатка в одном знаке молчала бы до тех пор, пока в игре не выпадет кривая фигура, а искать её пришлось бы в этих же колонках цифр, на машине без отладчика.
Художественное преувеличение. Если бы нужна была такая оптимизация, то 152 числа кодом сразу бы и записывались в исходник, а не вбивались вручную с кучей опечаток.
Место на диске или ленте тоже было ограничено, исходники старались делать компактными. Написать математическую формулу тупо быстрее и короче, чем набивать простыню данных
Но ведь красивая буханка хлеба получилась ))
Напомню, что в вбить 152 числа пришлось бы через скучные строки вида:
SHAPE[2].DY[1] := 1;
SHAPE[2].DX[1] := 1;Програмная генерация тетрамино выглядит как какой-то оверинжениринг. Скорее всего это следы более ранних версий где были пентамино или какие-то еще фигуры.
Я когда-то писал тетрис сам, причем не один раз и на разных языках. Насколько помню в последней версии фигуры задавались как массив из четырех deltaX и deltaY в константах. Один раз задал 742=56 чисел (на самом деле можно и меньше, потому что точка с координатами 0, 0 всега входит, и больше констант не надо. А вращение было настоящим: deltaY менялась на deltaX и deltaX на - deltaY. Такая схема выглядит самой простой, и если хочется, можно добавить фигур пентамино почти не меняя код. Но в таком варианте все равно была некрасивая часть: программный лок на вращение квадрата. Потому что если не залочить вращение, то оно будет приводить к смещению квадрата на одну клетку вверх/вниз или влево/вправо.
Я в детстве Тетрис писал только один раз, на ассемблере Z80. Уже даже не помню, как задавал фигуры и их повороты. Но не битовой картой точно, скорее всего примерно так же, массивом координат смещения для каждой из четырех клеток фигуры.
Другие фигуры, кроме квадрата тоже съезжают, их надо кольцевать раньше. Вот к примеру палка прыгает вправо(2) и вверх(3):
I: НАИВНЫЙ поворот, четыре нажатия
....... ....... ....... ...#... .......
....... ...#... ....... ...#... .......
.####.. ...#... ..####. ...#... .####..
....... ...#... ....... ...#... .......
....... ...#... ....... ....... .......
старт 1 2 3 4
I: ТАБЛИЦА игры, кольцо NXT
....... ....... ....... ....... .......
....... ...#... ....... ...#... .......
.####.. ...#... .####.. ...#... .####..
....... ...#... ....... ...#... .......
....... ...#... ....... ...#... .......
старт 1 2 3 4
Процедурная генерация Мира тетриса. В этом есть что-то философское и не дурно.
Да никто не стал бы руками делать сотни комбинаций и перепечатывать. Просто пишешь отдельную программу генератор, которая генерирует комбинации и затем пишет их в виде исходника, который уже встраивается в основную программу.
Но скорее всего сначала захотелось иметь больше гибкости, а затем всё осталось как есть, потому что ресурсов и так хватает.
Забавно как ограничения железа рождали такие изящные алгоритмы) Сейчас бы просто закинули все положения в огромный json и не парились, память же резиновая))

Можно, но зачем: 7 фигур и 19 положений того самого Тетриса