Просто иногда, листая свою позапрошлогоднюю тетрадку, натыкаюсь на описание этих самых кубиков и испытываю желание побыстрее это реализовать, т.к. интересно. Еще кому-нибудь интересно?Вот и готова спецификация первой (если считать RW1, то второй) абстрактной системы (пока только на бумаге). Рабочее название "Игра Кубики" или английский вариант "Cubic Game" - пока на плоскости, но 3D вариант в-принципе возможен. Имеется некоторое поле с клетками M x N. Поведение каждой клетки определяется некоторой функциональностью. В общем случае клетка может быть пустой, несущей в себе символ (движущийся или стоящий), или функциональной клеткой. Некоторые клетки по краям поля могут нести смысл входных или выходных (принимающих потоки символов или отправляющие их). Требуется с помощью редактора-отладчика реализовать разнообразные задачи. Более детальная информация появится позже. Да - и еще, простота реализации позволяет написать редактор-отладчик полностью на RW1, что дает возможность портировать его на разнообразные микро-системы.
Игра в кубики
Moderator: Shaos
-
- Admin
- Posts: 24088
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Игра в кубики
Напомню то что я озвучил на своем форуме 28 ноября 2004 года:
Last edited by Shaos on 19 Oct 2007 21:14, edited 3 times in total.
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Retired
- Posts: 1474
- Joined: 03 Aug 2003 22:37
- Location: Moscow
Re: Игра в кубики
Достаточно интересная вещь. В особенности если будет дальнейшее развитие в видел RW3 - троичнаяShaos wrote:Просто иногда, листая свою позапрошлогоднюю тетрадку, натыкаюсь на описание этих самых кубиков и испытываю желание побыстрее это реализовать, т.к. интересно. Еще кому-нибудь интересно?

Extreme Entertainment
-
- Admin
- Posts: 24088
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Вот чего я придумал 27 ноября 2004 года и перерисовал на компьютере из своей тетрадки только сегодня:

А вот как из таких кубиков можно собрать схему, принимающую на входе последовательность символов и сравнивающую с указанным словом (в данном случае "WORD"):


А вот как из таких кубиков можно собрать схему, принимающую на входе последовательность символов и сравнивающую с указанным словом (в данном случае "WORD"):

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24088
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Итак, имеем потоки символов, которые могут перемещаться по незанятым клеткам. За один такт символ переставляется в соседнюю клетку, если соседняя клетка занята функиональным кубиком, то в этом такте происходят соответствующие вычисления:Shaos wrote:Вот чего я придумал 27 ноября 2004 года и перерисовал на компьютере из своей тетрадки только сегодня:
![]()
connectors - коннекторы бывают двух типов - входные и выходные (соответственно принимающие потоки символы извне и отправляющие потоки символов наружу);
mirrors - зеркала берут символ с одной стороны и в следующем такте переставляют с другой, поворачивая поток символов на 90 градусов;
translucent mirrors - полупрозрачные зеркала кроме создания ответвленного потока символов, пропускают основной поток сквозь себя;
transmitters - передатчики могут генерировать поток символов из рядом стоящего или мимо проходящего символа (символы вылетают в направлении стрелки);
accelerators - ускорители применяются для мгновенного пропускания сквозь себя потока символов без задержки на один такт в каждой клетке, в случае использования ряда ускорителей символ также за один такт преодолевает всю цепочку (символы вылетают в направлении стрелки, залетая с противоположной стороны);
duplicator - предполагалось что дупликаторы будут удваивать каждый символ в потоке, но это противоречит концепции равномерной и постоянной скорости распортранения потоков символов по пустым клеткам, поэтому я скорее всего уберу их из спецификации;
terminators - съедают потоки символов, пришедших с любой стороны;
arithmetic operators - арифметические операторы, входы сверху и снизу, а выход справа;
comparisions - сравнивающие кубики (==, !=, >, >=, <, <=), аргументы сверху и снизу, а логический выход справа (два возможных значения - T и F);
logic operators - логические операторы над потоками символов T и F;
selectors - переключатели потоков, управляющий логический вход толстая линия, переключаемые каналы - тонкие, с той стороны где выдающийся пиксел по середине - канал включаемый по T на логическом входе (второй канал соответственно включается по F, отключая первый).
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24088
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
-
- Admin
- Posts: 24088
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
сложным клеточным автоматом это можно назвать из-за того, что состояние каждой клетки описывается не только ее непосредственными геометрическими соседями, но и достаточно отдаленными клетками - подцепленными цепочками акселераторов, зеркал и дрShaos wrote:По идее все вышеприведенное можно считать сложным клеточным автоматом, соответственно это можно назвать как-нибудь типа Data Driven Cellular Machine (DDCM)
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24088
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
А началось всё с того, что я решил поразмышлять над проблемой создания графического языка программирования для написания программ на плоскости (а в будущем можно поразмышлять и над программированием в пространстве).Shaos wrote:Вот чего я придумал 27 ноября 2004 года
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 24088
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Только что придумал способ, с помощью которого схема может сама себя перепрограммировать путём посылки специально сформированных последовательностей символов - круг покрываемых задач при этом существенно возрастает. К примеру можно написать прошивку клеточного автомата, которая определяла бы размер рабочего поля.Shaos wrote:А вот как из таких кубиков можно собрать схему, принимающую на входе последовательность символов и сравнивающую с указанным словом (в данном случае "WORD"):
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Retired
- Posts: 1474
- Joined: 03 Aug 2003 22:37
- Location: Moscow
Дело оказалось значительно интереснее чем я предполагал раньше! Идею стоит развивать и реализовывать по мере развития
Предлагаю нарисовать большие изображения кубиков, чтобы потом можно было на их основе рисовать уменьшенные и использовать в устройствах с ограниченной разрешаюшей способностью экрана.

Extreme Entertainment
-
- God
- Posts: 1388
- Joined: 02 Jan 2006 02:28
- Location: Abakan
Замечательная идея!
А если отлаженый сценарий определить как отдельный "макро кубик", и вставлять его в другие сценарии, то получим многомерную структуру.
Если развить мысль дальше, и объединить несколько "макро кубиков" в класс, то вставлять нужно будет "кубики-объекты", т.е. копии этого класса, которые будет взаимодействовать с "макро кубиками" этого класса, но будут иметь разные переменные состояния...
А если отлаженый сценарий определить как отдельный "макро кубик", и вставлять его в другие сценарии, то получим многомерную структуру.
Если развить мысль дальше, и объединить несколько "макро кубиков" в класс, то вставлять нужно будет "кубики-объекты", т.е. копии этого класса, которые будет взаимодействовать с "макро кубиками" этого класса, но будут иметь разные переменные состояния...
-
- Retired
- Posts: 1474
- Joined: 03 Aug 2003 22:37
- Location: Moscow
В общем можно при переходе к следующему уровню повышать масштаб и в нем оперировать уже не единичными клетками, а целыми последовательностями.jdigreze wrote:Если развить мысль дальше, и объединить несколько "макро кубиков" в класс, то вставлять нужно будет "кубики-объекты", т.е. копии этого класса, которые будет взаимодействовать с "макро кубиками" этого класса, но будут иметь разные переменные состояния...
Extreme Entertainment
-
- Admin
- Posts: 24088
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Всё ломал голову как же это назвать - предполагал charbricks и data-driven cellular automat, но пока остановился на названии bricksputer.
После дополнительного обдумывания у меня сложился вот такой набор базовых блоков:

input connectors - входные коннекторы, принимающие потоки символы из внешнего мира;
output connectors - выходные коннекторы, отправляющие потоки символов во внешний мир;
mirrors - зеркала берут символ с одной стороны и в следующем такте переставляют с другой, поворачивая поток символов на 90 градусов;
translucent mirrors - полупрозрачные зеркала кроме создания ответвленного потока символов, пропускают основной поток сквозь себя;
transmitters - передатчики могут генерировать поток символов из рядом стоящего или мимо проходящего символа (символы вылетают в направлении стрелки);
accelerators - ускорители применяются для мгновенного пропускания сквозь себя потока символов без задержки на один такт в каждой клетке, в случае использования ряда ускорителей символ также за один такт преодолевает всю цепочку (символы вылетают в направлении стрелки, залетая с противоположной стороны);
terminator - терминаторы съедают потоки символов, пришедших с любой стороны;
bridge - мост служит для безболезнного разделения пересекающихся потоков символов (ставится в точку пересечения потоков);
exception - блок используется для передачи на верхний уровень информации об ошибочной ситуации в схеме, срабатывает при попадании в него любого символа;
equ blocks - сравнивающие блоки, принимающие два потока и выдающие символ, если он встретился в обоих потоках в этом такте - в противном случае ничего не выдается;
max blocks - блоки выдают максимальный символ из двух входных;
min blocks - блоки выдают минимальный символ из двух входных;
switches - переключатели работают как стрелки на железной дороге, останавливают один поток символов и пропускают другой - в зависимости от того ударил ли в управляющий вход символ в данном такте или нет.
Другие блоки более высокого уровня (реализующие булевые функции, десятичную или троичную арифметику) можно составить из вышеприведенных блоков, например вот так будут описываться блоки "равно" и "больше":

P.S. Продолжение темы в другом топике: viewtopic.php?t=8852
После дополнительного обдумывания у меня сложился вот такой набор базовых блоков:

input connectors - входные коннекторы, принимающие потоки символы из внешнего мира;
output connectors - выходные коннекторы, отправляющие потоки символов во внешний мир;
mirrors - зеркала берут символ с одной стороны и в следующем такте переставляют с другой, поворачивая поток символов на 90 градусов;
translucent mirrors - полупрозрачные зеркала кроме создания ответвленного потока символов, пропускают основной поток сквозь себя;
transmitters - передатчики могут генерировать поток символов из рядом стоящего или мимо проходящего символа (символы вылетают в направлении стрелки);
accelerators - ускорители применяются для мгновенного пропускания сквозь себя потока символов без задержки на один такт в каждой клетке, в случае использования ряда ускорителей символ также за один такт преодолевает всю цепочку (символы вылетают в направлении стрелки, залетая с противоположной стороны);
terminator - терминаторы съедают потоки символов, пришедших с любой стороны;
bridge - мост служит для безболезнного разделения пересекающихся потоков символов (ставится в точку пересечения потоков);
exception - блок используется для передачи на верхний уровень информации об ошибочной ситуации в схеме, срабатывает при попадании в него любого символа;
equ blocks - сравнивающие блоки, принимающие два потока и выдающие символ, если он встретился в обоих потоках в этом такте - в противном случае ничего не выдается;
max blocks - блоки выдают максимальный символ из двух входных;
min blocks - блоки выдают минимальный символ из двух входных;
switches - переключатели работают как стрелки на железной дороге, останавливают один поток символов и пропускают другой - в зависимости от того ударил ли в управляющий вход символ в данном такте или нет.
Другие блоки более высокого уровня (реализующие булевые функции, десятичную или троичную арифметику) можно составить из вышеприведенных блоков, например вот так будут описываться блоки "равно" и "больше":

P.S. Продолжение темы в другом топике: viewtopic.php?t=8852
Я тут за главного - если что шлите мыло на me собака shaos точка net