Игра в кубики

Публичный форум для http://www.nedopc.org/nedopc

Moderator: Shaos

User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Игра в кубики

Post by Shaos »

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

Re: Игра в кубики

Post by Mac Buster »

Shaos wrote:Просто иногда, листая свою позапрошлогоднюю тетрадку, натыкаюсь на описание этих самых кубиков и испытываю желание побыстрее это реализовать, т.к. интересно. Еще кому-нибудь интересно?
Достаточно интересная вещь. В особенности если будет дальнейшее развитие в видел RW3 - троичная ;)
Extreme Entertainment
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Вот чего я придумал 27 ноября 2004 года и перерисовал на компьютере из своей тетрадки только сегодня:

Image

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

Image
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:Вот чего я придумал 27 ноября 2004 года и перерисовал на компьютере из своей тетрадки только сегодня:

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

connectors - коннекторы бывают двух типов - входные и выходные (соответственно принимающие потоки символы извне и отправляющие потоки символов наружу);

mirrors - зеркала берут символ с одной стороны и в следующем такте переставляют с другой, поворачивая поток символов на 90 градусов;

translucent mirrors - полупрозрачные зеркала кроме создания ответвленного потока символов, пропускают основной поток сквозь себя;

transmitters - передатчики могут генерировать поток символов из рядом стоящего или мимо проходящего символа (символы вылетают в направлении стрелки);

accelerators - ускорители применяются для мгновенного пропускания сквозь себя потока символов без задержки на один такт в каждой клетке, в случае использования ряда ускорителей символ также за один такт преодолевает всю цепочку (символы вылетают в направлении стрелки, залетая с противоположной стороны);

duplicator - предполагалось что дупликаторы будут удваивать каждый символ в потоке, но это противоречит концепции равномерной и постоянной скорости распортранения потоков символов по пустым клеткам, поэтому я скорее всего уберу их из спецификации;

terminators - съедают потоки символов, пришедших с любой стороны;

arithmetic operators - арифметические операторы, входы сверху и снизу, а выход справа;

comparisions - сравнивающие кубики (==, !=, >, >=, <, <=), аргументы сверху и снизу, а логический выход справа (два возможных значения - T и F);

logic operators - логические операторы над потоками символов T и F;

selectors - переключатели потоков, управляющий логический вход толстая линия, переключаемые каналы - тонкие, с той стороны где выдающийся пиксел по середине - канал включаемый по T на логическом входе (второй канал соответственно включается по F, отключая первый).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

По идее все вышеприведенное можно считать сложным клеточным автоматом, соответственно это можно назвать как-нибудь типа Data Driven Cellular Machine (DDCM)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:По идее все вышеприведенное можно считать сложным клеточным автоматом, соответственно это можно назвать как-нибудь типа Data Driven Cellular Machine (DDCM)
сложным клеточным автоматом это можно назвать из-за того, что состояние каждой клетки описывается не только ее непосредственными геометрическими соседями, но и достаточно отдаленными клетками - подцепленными цепочками акселераторов, зеркал и др
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Shaos wrote:Вот чего я придумал 27 ноября 2004 года
А началось всё с того, что я решил поразмышлять над проблемой создания графического языка программирования для написания программ на плоскости (а в будущем можно поразмышлять и над программированием в пространстве).
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

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

Image
Только что придумал способ, с помощью которого схема может сама себя перепрограммировать путём посылки специально сформированных последовательностей символов - круг покрываемых задач при этом существенно возрастает. К примеру можно написать прошивку клеточного автомата, которая определяла бы размер рабочего поля.
Я тут за главного - если что шлите мыло на me собака shaos точка net
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Post by Mac Buster »

Дело оказалось значительно интереснее чем я предполагал раньше! Идею стоит развивать и реализовывать по мере развития :) Предлагаю нарисовать большие изображения кубиков, чтобы потом можно было на их основе рисовать уменьшенные и использовать в устройствах с ограниченной разрешаюшей способностью экрана.
Extreme Entertainment
jdigreze
God
Posts: 1388
Joined: 02 Jan 2006 02:28
Location: Abakan

Post by jdigreze »

Замечательная идея!
А если отлаженый сценарий определить как отдельный "макро кубик", и вставлять его в другие сценарии, то получим многомерную структуру.

Если развить мысль дальше, и объединить несколько "макро кубиков" в класс, то вставлять нужно будет "кубики-объекты", т.е. копии этого класса, которые будет взаимодействовать с "макро кубиками" этого класса, но будут иметь разные переменные состояния...
Mac Buster
Retired
Posts: 1474
Joined: 03 Aug 2003 22:37
Location: Moscow

Post by Mac Buster »

jdigreze wrote:Если развить мысль дальше, и объединить несколько "макро кубиков" в класс, то вставлять нужно будет "кубики-объекты", т.е. копии этого класса, которые будет взаимодействовать с "макро кубиками" этого класса, но будут иметь разные переменные состояния...
В общем можно при переходе к следующему уровню повышать масштаб и в нем оперировать уже не единичными клетками, а целыми последовательностями.
Extreme Entertainment
User avatar
Shaos
Admin
Posts: 24088
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Post by Shaos »

Всё ломал голову как же это назвать - предполагал charbricks и data-driven cellular automat, но пока остановился на названии bricksputer.

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

Image

input connectors - входные коннекторы, принимающие потоки символы из внешнего мира;

output connectors - выходные коннекторы, отправляющие потоки символов во внешний мир;

mirrors - зеркала берут символ с одной стороны и в следующем такте переставляют с другой, поворачивая поток символов на 90 градусов;

translucent mirrors - полупрозрачные зеркала кроме создания ответвленного потока символов, пропускают основной поток сквозь себя;

transmitters - передатчики могут генерировать поток символов из рядом стоящего или мимо проходящего символа (символы вылетают в направлении стрелки);

accelerators - ускорители применяются для мгновенного пропускания сквозь себя потока символов без задержки на один такт в каждой клетке, в случае использования ряда ускорителей символ также за один такт преодолевает всю цепочку (символы вылетают в направлении стрелки, залетая с противоположной стороны);

terminator - терминаторы съедают потоки символов, пришедших с любой стороны;

bridge - мост служит для безболезнного разделения пересекающихся потоков символов (ставится в точку пересечения потоков);

exception - блок используется для передачи на верхний уровень информации об ошибочной ситуации в схеме, срабатывает при попадании в него любого символа;

equ blocks - сравнивающие блоки, принимающие два потока и выдающие символ, если он встретился в обоих потоках в этом такте - в противном случае ничего не выдается;

max blocks - блоки выдают максимальный символ из двух входных;

min blocks - блоки выдают минимальный символ из двух входных;

switches - переключатели работают как стрелки на железной дороге, останавливают один поток символов и пропускают другой - в зависимости от того ударил ли в управляющий вход символ в данном такте или нет.

Другие блоки более высокого уровня (реализующие булевые функции, десятичную или троичную арифметику) можно составить из вышеприведенных блоков, например вот так будут описываться блоки "равно" и "больше":

Image

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