Чото подумалось, что надо наверное нечто поплотнее нежели массив чисел генерить - например base64...Shaos wrote:Робот посложнее:Превратится уже вот в это:Code: Select all
robot "Test2" author "Shaos" color AABBCC main() { i0 = 0; for(i1=0;i1<16;i1++){ for(i2=0;i2<16;i2++){ select i1 i2 set i0 i0=i0+1 }} }
P.P.S. Компилятор RW1C теперь сам указывает платформу. Если у робота нет оборудования, цвета и картинки, то это плтформа 2 (RW1P2). Если у робота нет оборудования, но есть цвет или картинка, то это платформа 1 (RW1P1). Если у робота есть оборудование, то это платформа 0 (RW1P0 или классическая игра "Robot Warfare 1").Code: Select all
{"robot":"Test2", "author":"Shaos", "varm":3, "vars":[], "negs":[], "regs":[], "color":"#AABBCC", "code":[32,1,0,0,0,0,0,32,1,1,0,0,0,0,64,12,245,14,255,245,1,0,243,245,16,0,147,244,66,1,14,255, 0,127,0,32,1,2,0,0,0,0,64,12,245,14,255,245,2,0,243,245,16,0,147,244,66,1,14,255,0,109,0,105, 1,1,0,1,2,0,106,1,0,0,0,0,0,64,12,245,0,0,245,0,0,243,245,1,0,160,244,64,12,245,2,0, 245,2,0,243,245,1,0,160,244,67,0,42,0,64,12,245,1,0,245,1,0,243,245,1,0,160,244,67,0,14,0,0, 255], "platform":1 }
Rgrid - виртуальная машина роботов в браузере (JavaScript)
Moderator: Shaos
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Виртуальная машина роботов в браузере (JavaScript)
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: RW1 в браузере
поправил - теперь у меня везде только Rgrid.jsShaos wrote:Ввиду того, что я Roberta переименовал в Robby пришло время переделать и JS-интерпретатор - на днях я склеил вместе Webitable и Weberta и получил Rgrid.jsShaos wrote:В данный момент пишу JS-транслятор RW0-байткода в JS - пока вроде всё получается так, как и предполагалось
P.S. Виртуальная машина Roberta для Webitable будет называться Weberta
https://gitlab.com/nedopc/sdk/blob/master/rgrid/Rgrid.js
теперь надо Circuits.CC подправить, чтобы юзал одну новую либу вместо старых двух...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Rgrid - виртуальная машина роботов в браузере (JavaScrip
Можно попробовать портировать Rgrid.js на PhoneGap / Cordova и делать приложения для телефонов (iPhone & Android) 
P.S. PhoneGap адобэ отключает 1 октября насовсем (я по нему курс прослушал 2 года назад когда заканчивал обучение в NYU) - после этого остаётся только голая опенсорцная Cordova, в которой наряду с Android и iOS появилась дополнительная платформа Electron, предназначенная для запуска JS-приложений на обычных компьютерах в виде окна (там внутри движок хрома) на Linux, Windows и MacOS: https://www.electronjs.org/docs/tutorial/application-distribution

P.S. PhoneGap адобэ отключает 1 октября насовсем (я по нему курс прослушал 2 года назад когда заканчивал обучение в NYU) - после этого остаётся только голая опенсорцная Cordova, в которой наряду с Android и iOS появилась дополнительная платформа Electron, предназначенная для запуска JS-приложений на обычных компьютерах в виде окна (там внутри движок хрома) на Linux, Windows и MacOS: https://www.electronjs.org/docs/tutorial/application-distribution
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Rgrid - виртуальная машина роботов в браузере (JavaScrip
Вот например минимальный "робот" для онлайна (всё это лежит в репе nedoPC SDK https://gitlab.com/nedopc/sdk/-/tree/master/rgrid):
Этот робот ловит мышиный клик на сетке клеток и ставит в эту клетку символ с кодом 0xFF - компилируется он вот в такой JSON:
и вот такой HTML этого робота подключает (ещё есть подкаталог giftiles с файлами картинками символов):
Создаётся сетка клеток 80x50, которая выглядит вот так (несколько клеток уже покликано мышою):
Уже сейчас можно добавлять больше одного робота на сетку (и теоретически больше одной сетки на страницу) и такие роботы могут общаться друг с другом и внешним миром, а вот чего в данный момент не сделано, так это сохранение состояния системы с возможностью передачи его на другой узел сети для продолжения работы...
Code: Select all
// robbyc -r EXAMPLE.R
// echo var robot = >robot.js
// cat EXAMPLE.rjs >>robot.js
author "Shaos"
robot "Example"
main()
{
while(1)
{
code = 0
recv code
if(N==0) continue
if(N==#FFFF) // mouse click
{
select x y
set #FF
}
}
}
Code: Select all
var robot = {"robot":"Example",
"author":"Shaos",
"varm":1,
"vars":[],
"negs":[],
"regs":[],
"color":"#FFFFFF",
"code":[64,7,245,14,255,245,1,0,244,66,1,14,255,0,91,0,32,1,0,0,0,0,0,98,1,0,0,64,12,245,14,255,
245,3,255,243,245,0,0,144,244,66,1,14,255,0,52,0,67,0,0,0,64,12,245,14,255,245,3,255,243,245,255,255,
144,244,66,1,14,255,0,87,0,105,1,0,255,1,1,255,106,0,255,0,0,0,0,67,0,0,0,0,255],
"platform":2
}
Code: Select all
<HTML>
<HEAD><TITLE>Rgrid example</TITLE>
<META HTTP-EQUIV="Content-Language" content="en">
<META HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
<SCRIPT type="text/javascript" src="Rgrid.js"></SCRIPT>
<SCRIPT type="text/javascript" src="robot.js"></SCRIPT>
</HEAD>
<BODY BGCOLOR=#000000 TEXT=#00AA00 LINK=#00AAAA>
<p id="here" align=center>Rgrid requires a modern web-browser to work properly...</p>
<font size=-4>
<p id="pow" align=center>Powered...</p>
</font>
</BODY>
<script type="text/javascript">
$R.prefix = "giftiles/";
$_("pow","Powered by " + $R.powered());
function action(x,y) {
$R.event(0,-1,1,x,y);
}
if($R.grid('here',80,50,action)>0) {
$R.add(robot);
$R.start();
}
</script>
</HTML>
Уже сейчас можно добавлять больше одного робота на сетку (и теоретически больше одной сетки на страницу) и такие роботы могут общаться друг с другом и внешним миром, а вот чего в данный момент не сделано, так это сохранение состояния системы с возможностью передачи его на другой узел сети для продолжения работы...
You do not have the required permissions to view the files attached to this post.
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Rgrid - виртуальная машина роботов в браузере (JavaScrip
После экспериментов с HTML контролами внёс некоторые изменения в Rgrid.js:
https://gitlab.com/nedopc/sdk/-/tree/master/rgrid
Также добавил линк на репу и историю изменений в первое сообщение топика...
P.S. При подготовке v0.7 нашёл косяк в препроцессоре компилятора Robby - CONTINUE внутри FOR не меняет счётчик
https://gitlab.com/nedopc/sdk/-/tree/master/rgrid
Code: Select all
v0.7 (2023-04-17)
- Added ability to send string as an argument of event
- Fixed RECVP implementation
v0.6 (2023-04-16)
- Fixed SEND implementation (previosly it gave JS syntax error)
- RECV after SENDP returns 1st word of data, not size (and we ignore the rest of the packet)
v0.5 (2023-04-15)
- Fixed implementation of COMMAND
P.S. При подготовке v0.7 нашёл косяк в препроцессоре компилятора Robby - CONTINUE внутри FOR не меняет счётчик

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Rgrid - виртуальная машина роботов в браузере (JavaScrip
Как оказалось в Rgrid пока нельзя добавлять больше одного робота на сеткуShaos wrote:Уже сейчас можно добавлять больше одного робота на сетку (и теоретически больше одной сетки на страницу) и такие роботы могут общаться друг с другом и внешним миром..

Надо разбираться что там косячит, а так можно на этом threaded engine для примера насадить ещё и другие виртуальные машины - например 8080/8085 или даже RISC-V!

Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Rgrid - виртуальная машина роботов в браузере (JavaScrip
Выложил Rgrid v0.8
https://gitlab.com/nedopc/sdk/-/tree/master/rgrid
https://gitlab.com/nedopc/sdk/-/tree/master/rgrid
Code: Select all
v0.8 (2023-04-30)
- Added sourcecode URL
- Allowed $_ to control checkbox or radio as elements with value
- Added function $append
- Function $$_ was renamed to $$$
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Rgrid - виртуальная машина роботов в браузере (JavaScript)
Решил что-то заморочится с документацией своего Rgrid-а - я немого описывал его праотца Webitable по мере создания в 2012 году, но по хорошему нужна официальная подробная документация в одном месте. Обнаружилось, что Google AI Gemini может по JS-коду генерировать доку по английски и по русски (и даже предлагать улучшения!) и я буду публиковать описание функций как они есть на сегодняшний день тут ниже и в специально созданном сегодня англоязычном топике (после ручного редактирования конечно)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Rgrid - виртуальная машина роботов в браузере (JavaScript)
Функция $(s)
Эта функция является простым "обёрточным" элементом для document.getElementById(). Это сокращение для получения HTML-элемента по его ID. Итак, если у вас есть элемент в HTML, например
вы можете получить ссылку на него с помощью
Это распространенная практика для сокращения кода и повышения его читаемости.
Функция $_(s[,v])
Эта функция более сложная и служит двойной цели: получение значения элемента и установка значения элемента. Она принимает ID элемента (s) в качестве первого аргумента. Второй аргумент (v) является необязательным.
Функция $$(s)
Эта функция является функцией-селектором обёрткой над $R.select (см. далее), которая использует механизм кеширования для хранения выбранных элементов (этот кеш можно сбросить с помощью функции $R.clear). Элементы могут выбираться по префиксу или по маске со звёздочкой. Функция принимает строку и возвращает массив элементов веб-страницы.
Функция $$$(s)
Эта функция получает элементы с помощью функции $$ (т.е. входной аргумент также задаёт префикс или маску для поиска), а затем извлекая ID каждого элемента с помощью функции $map (см. далее) возвращает массив строковых ID элементов.
Пример:
Включение Rgrid.js, а также последние 2 примера были добавлены мной, а всё остальное придумал Gemini и у него по-моему очень неплохо получилось
P.S. А вот смысл функции $$ Gemini понял не до конца, поэтому я описал её сам
P.P.S. В будущем можно сделать "совместимую" версию Rgrid.js которая не будет конфликтовать по $-именам с другими фреймворками (jQuery или Prototype) - в ней функцию $ можно переименовать в $1, функцию $$ - в $2, ну и до кучи функцию $$$ - в $3...
Эта функция является простым "обёрточным" элементом для document.getElementById(). Это сокращение для получения HTML-элемента по его ID. Итак, если у вас есть элемент в HTML, например
Code: Select all
<div id="myDiv"></div>
Code: Select all
$("myDiv")
Функция $_(s[,v])
Эта функция более сложная и служит двойной цели: получение значения элемента и установка значения элемента. Она принимает ID элемента (s) в качестве первого аргумента. Второй аргумент (v) является необязательным.
- Получение значения (когда 2й аргумент v НЕ предоставлен):
- Сначала получает элемент с помощью функции $(s).
- Если элемент существует:
- Если элемент является флажком (checkbox) или переключателем (radio button), он возвращает "1", если он отмечен, и "0", если нет;
- В противном случае, если элемент имеет свойство value (например, поля ввода, списки выбора и т.д.), он возвращает значение этого свойства;
- Если элемент не имеет свойства value (например, <div> или <span>), он возвращает innerHTML элемента;
- Если элемент не существует, он фактически возвращает null (начиная с v0.9).
- Установка значения (когда 2й аргумент v предоставлен):
- Сначала получает элемент с помощью функции $(s).
- Если элемент существует:
- Если элемент является флажком или переключателем:
- Он проверяет значение 2го аргумента v. Если оно равно "N", "F" или "off", он снимает отметку с элемента. Если оно равно "Y", "T", "on" или истинному значению (с помощью eval("("+v+")")), он устанавливает отметку на элементе. Это 'eval' потенциально опасно, если 2й аргумент 'v' поступает от пользователя, поскольку оно может выполнять произвольный JavaScript. В целом, лучше избегать 'eval' и использовать более надежные методы для проверки типа.
- Затем он обновляет значение v до "1" или "0" в зависимости от нового состояния флажка/переключателя;
- В противном случае, если элемент имеет свойство value, он устанавливает свойство value равным значению 2го аргумента v;
- В противном случае (если свойство value отсутствует), он устанавливает innerHTML элемента равным значению 2го аргумента v;
- Наконец, он возвращает (потенциально измененное) значение v.
- Если элемент является флажком или переключателем:
Функция $$(s)
Эта функция является функцией-селектором обёрткой над $R.select (см. далее), которая использует механизм кеширования для хранения выбранных элементов (этот кеш можно сбросить с помощью функции $R.clear). Элементы могут выбираться по префиксу или по маске со звёздочкой. Функция принимает строку и возвращает массив элементов веб-страницы.
Функция $$$(s)
Эта функция получает элементы с помощью функции $$ (т.е. входной аргумент также задаёт префикс или маску для поиска), а затем извлекая ID каждого элемента с помощью функции $map (см. далее) возвращает массив строковых ID элементов.
Пример:
Code: Select all
<input type="text" id="myInput" value="Исходное значение">
<div id="myDiv">Какой-то текст</div>
<script type="text/javascript" src="Rgrid.js"></script>
<input type="checkbox" id="myCheckbox">
<script>
console.log($("myInput")); // Возвращает элемент input
console.log($_("myInput")); // Возвращает "Исходное значение"
$_("myInput", "Новое значение"); // Устанавливает значение input на "Новое значение"
console.log($_("myInput")); // Возвращает "Новое значение"
console.log($_("myDiv")); // Возвращает "Какой-то текст"
$_("myDiv", "Новый HTML"); // Устанавливает содержимое div на "Новый HTML"
console.log($_("myDiv")); // Возвращает "Новый HTML"
console.log($_("myCheckbox")); // Возвращает "0" (предполагая, что он не отмечен)
$_("myCheckbox", "on"); // Отмечает флажок
console.log($_("myCheckbox")); // Возвращает "1"
console.log($$("my")); // Возвращает массив, состоящий из 3 элементов
console.log($$$("my")); // Возвращает массив [ "myInput", "myDiv", "myCheckbox"]
</script>

P.S. А вот смысл функции $$ Gemini понял не до конца, поэтому я описал её сам

P.P.S. В будущем можно сделать "совместимую" версию Rgrid.js которая не будет конфликтовать по $-именам с другими фреймворками (jQuery или Prototype) - в ней функцию $ можно переименовать в $1, функцию $$ - в $2, ну и до кучи функцию $$$ - в $3...
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Rgrid - виртуальная машина роботов в браузере (JavaScript)
Выкатил слегка подшлифованную версию 0.9:
https://gitlab.com/nedopc/sdk/-/tree/master/rgrid?ref_type=heads
(поправил описание выше, чтобы указать, что если элемент не найден, то функция $_ теперь возвращает null вместо undefined)
P.S. Теперь надо "минимальную" версию Rgrid-0.9.min.js сгенерировать без пробелов и переводов строк, чтобы в одну строку типа как у всех взрослых дядек
P.P.S. А в будущем можно ещё и проверять наличие функций $ или $$ (если jQuery или Prototype были тоже загружены) прежде чем заводить свои:
Code: Select all
v0.9 (2025-02-09)
- $R object got field "license" with value "LGPL"
- $R.prefix was renamed to $R.gif_prefix
- Function $_ now returns null if element was not found
- Initialization of opcache was moved to function $R.add
- $R.iterate() now may have no arguments to start with document.body
- $R.select() was modified to utilize that new feature of $R.iterate()
(поправил описание выше, чтобы указать, что если элемент не найден, то функция $_ теперь возвращает null вместо undefined)
P.S. Теперь надо "минимальную" версию Rgrid-0.9.min.js сгенерировать без пробелов и переводов строк, чтобы в одну строку типа как у всех взрослых дядек

P.P.S. А в будущем можно ещё и проверять наличие функций $ или $$ (если jQuery или Prototype были тоже загружены) прежде чем заводить свои:
Code: Select all
if (typeof $ === 'undefined') {
function $(s) {
return document.getElementById(s);
}
}
Я тут за главного - если что шлите мыло на me собака shaos точка net
-
- Admin
- Posts: 23989
- Joined: 08 Jan 2003 23:22
- Location: Silicon Valley
Re: Rgrid - виртуальная машина роботов в браузере (JavaScript)
Перетащил http://ternaro.com/ к себе домой и настроил его на использование Rgrid v0.9
Теперь надо http://Circuits.CC перенести и перенастроить...
Теперь надо http://Circuits.CC перенести и перенастроить...
Я тут за главного - если что шлите мыло на me собака shaos точка net