Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Угу - смысл понят верно - байткода Hope ещё нет
Поэтому я и стал пока копать в сторону RW0 - что есть существующий и более тривиальный байт-код...
|
17 May 2010 15:40 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Решил копать в сторону Hope, причём не просто Hope, а его гибрида с языком Prolog - подробнее см. тут
|
10 Jan 2012 15:12 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
А теперь смотрю обратно в сторону RW0 в качестве виртуальной машины на JS
|
10 Oct 2012 18:13 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Ну мой движок RW0 (язык Robot Warfare 1 теперь называется Robby) на JS существует уже более 10 лет - см. Rgrid - виртуальная машина роботов в браузере (JavaScript)Поэтому задача по сути выполнена - можно строить онлайн приложения с управлением мышой типа http://Circuits.CC или https://Ternaro.comРазве что ещё нужно замкнуть на нативные контролы (кнопки, чекбоксы, текстовые поля ввода) - тогда можно нагородить аналоги вот такого: И оно даже будет крутиться в старых браузерах
|
13 Apr 2023 08:43 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Можно поэкспериментировать с прикручиванием HTML-ных контролов к ROBBY, продолжая развивать минимальный пример из соседнего топика. Пока в Robby-онлайн используется вывод картинки по номеру в определённые координаты: по мышиному клику, который превращается в сообщение роботу вот такой JS-фунцией: а также можно выводить попап с сообщением (alert) через команды PRINT и SAY (правда в последнем случае вывод значений переменных пока не работает). И ещё остаётся неисследованная возможность заводить команды COMMAND (для вызова изнутри робота), реализация которых на JS добавлялась бы через колбеки: Вот это мы сейчас и попробуем...
|
14 Apr 2023 22:51 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Мда - надо пофиксить: вот теперь COMMAND работает и вот с таким HTML: | | | | Code: <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 = "pcb/";
$_("pow","Powered by " + $R.powered());
function command1(r) { alert("Robot "+r.regs[9]+" "+r.regs[0xA]+" "+r.regs[0xB]+" "+r.regs[0xC]); }
$R.callback(1,command1);
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>
| | | | |
при кликаньи в левую-верхнюю клетку выдаёт вот такое: Это значения регистров робота I A B С после слова Robot, как и было закодено в HTML для COMMAND 1: Регистр I (девятый регистр) - это порядковый номер робота, начиная с 1 (поэтому оно тут 1), а вот более одного робота пока не взлетают - буду чинить потом P.S. Обновил Rgrid.js до v0.5 (фикс COMMAND): https://gitlab.com/nedopc/sdk/-/tree/master/rgrid
|
15 Apr 2023 01:39 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
А теперь пробуем чекбоксы - меняем HTML таким образом: | | | | Code: <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> <p align=center> <input name="el1" type="checkbox" onclick="inputcheck(10)" id="input10"> <input name="el2" type="checkbox" onclick="inputcheck(20)" id="input20"> <input name="el3" type="checkbox" onclick="inputcheck(30)" id="input30"> </p> <font size=-4> <p id="pow" align=center>Powered...</p> </font> </BODY> <script type="text/javascript">
$R.prefix = "pcb/";
$_("pow","Powered by " + $R.powered());
function command1(r) { alert("Robot "+r.regs[9]+" "+r.regs[0xA]+" "+r.regs[0xB]+" "+r.regs[0xC]); }
$R.callback(1,command1);
function action(x,y) { $R.event(0,-1,1,x,y); }
if($R.grid('here',20,12,action)>0) { $R.add(robot); $R.start(); }
function inputcheck(i) { var e = $("input"+i); if(e.checked) i++; $R.event(0,-5,i); } </script> </HTML>
| | | | |
Этот код добавляет под сеткой 3 чекбокса: Модифицируем робота вот так: Теперь при выборе первого чекбокса выскочит вот такой попап (Robot 1 далее время, потом код -5=0xFFFB и далее идентификатор события): В данном случае идентификатор события 11 - т.е. контрол с кодом 10 включён (+1). Далее снимаем чек с первого чекбокса - теперь идентификатор события 10 (чекбокс выключен): И для разнообразия ставим чек на третьем чекбоксе: В данном случае попапчик нам нужен только для отладки с помощью COMMAND 1 выводящем значения регистров A B C куда предварительно записаны K (время), N (код источника) и CODE (код пришедший из очереди сообщений) - так можно видеть, что всё сработало как надо. P.S. По идее можно разными отрицательными кодами источника кодировать разные контролы, а в коде данных можно указывать взведён чекбокс или нет - в этом случае функция обработчик может выглядеть вот так: (тут последние 2 аргумента опущены, но в них что-то ещё можно передавать - внутри робота они принимаются как регистры X и Y) P.P.S. Вот прям сразу можно ещё и обычные кнопки поддержать: А вот для радио-кнопок (type=radio) надо будет дополнительный код на JS городить, который будет выключать лишние радиокнопки...
|
15 Apr 2023 03:50 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Теперь о полях ввода (однострочных type=text и многострочных textarea) Текст можно попробовать засылать как многословное событие - внутри робота его надо получать через RECVP А можно представить текст как файл, уведомляя робота однословным событием, что тот или иной текст (файл) поменялся На обновление строки ввода должно отрабатывать событие onchange: И на нажатие Enter или уход из контрола когда там что-то поменялось, вызывается событие, уходящее в робота:
|
15 Apr 2023 11:39 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Обновил Rgrid.js до v0.6 (фикс SEND и RECV): https://gitlab.com/nedopc/sdk/-/tree/master/rgridТеперь попробую послать введённый в поле текстового ввода текст роботу - для этого делаем следующие изменения в HTML: Функция $_ досталась фреймворку Rgrid.js по наследству от моего же фреймворка Webitabe, который я развил до предела в 2012 году - эта функция возвращает текстовое значение элемента HTML по ID - в данном случае это value контрола text, которое затем превращается в массив ASCII-кодов (а что делать с UTF8?) и передаётся роботу как сообщение-пакет (может имеет смысл вставить такую разборку строки на запчасти внутрь фреймворка?). P.S. Хотя с UTF8 вроде бы что-то поболее чем ASCII-коды возвращает (и это не Unicode): P.P.S. А нет - это UTF8 т.к. всё совпадает вот с этой табличкой: https://www.w3schools.com/charsets/ref_utf_cyrillic.asp
|
16 Apr 2023 03:13 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Перенёс преобразование строки в массив внутрь Rgrid.js (будет частью v0.7) - плюс там ещё длину посылки надо было указывать в первом отправляемом слове и RECVP был немного "поломатый". Теперь прямо при объявлении контрола можно указывать добавление события с текстом по изменению состояния (по Enter или покиданию изменённого контрола):: и всё отрабатывает как надо: (в ячейке 5 теперь длина пакета 8 и далее идут коды символов из текстового поля ввода) P.S. Сетку пока отключать нельзя т.к. в функции $R.grid идёт заполнение кое-какие операционных кешей для RobbyVM - непомню зачем я это сделал, но надо их оттуда вынести, тогда grid будет независим от роботов и можно будет делать другие виртуальные машины (как собственно и задумывалось в Webitable) либо запускать роботов без grid (это будет нужно для веб-приложений где только контролы).
|
16 Apr 2023 17:58 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Для вывода русского текста через робота (скажем на сетку) придётся провести преобразование из UTF8 в альтернативную кодировку доса - в этом случае в робота надо воткруть таблицу перекодировки, которая бы переводила UTF8 с кодами от 1025 (Ё) до 1105 (ё) т.е. всего 81 ячейка (ну или 82, если стартовать с круглого кода 1024): На самом деле тут всё относительно просто и можно чисто процедурно подменить - вот пример на языке Robby:
|
16 Apr 2023 20:02 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
C textarea тоже всё хорошо Вот такой HTML: и вот обработчик в Robby: Обновил https://gitlab.com/nedopc/sdk/-/tree/master/rgrid до v0.7 P.S. Но всё-таки большие тексты лучше по нажатию на кнопку через файлы в робота вводить т.к. там будут ограничения по размеру 32K (область данных робота с отрицательными адресами), а не размер массива объявленного внутри программы как в случае многословных сообщений, а так уже можно начинать писать онлайн реализацию 3niti alpha на Robby P.P.S. Раздвоение одной буквы при выводе placeholder -> placeholddr было связано с тем, что размер принимающего буфера в программе на языке Robby был недостаточен (т.е. далее шли другие переменные, например code) - увеличил размер буфера c 10 до 32 и всё стало лучше - это лишнее доказательство того, что для textarea надо переходить на файлы...
|
16 Apr 2023 21:03 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Для современных браузеров можно где-то сбоку опционально приделать canvas и реализовать Robby-команды PIXEL/CLEAR, COLOR, FILL и TEXT для рисования на графический экран: P.S. Ещё можно сделать сайт, где бы пользователь мог ввести текст своей программы на Robby, скомпилировать (скажем через сервер, на котором бы запускался robbyc) и запустить в своём браузере (в Rgrid.js прямо сейчас уже возможно робота брать извне как строку с JSON-ом, а не как подключаемый JS-файл)...
|
16 Apr 2023 22:55 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Выпадающее меню для робота выглядит как текстовая строка ввода - при выборе нового значения оно будет послано в робота с нужным идентификатором контрола (в данном случае -50):
|
21 Apr 2023 21:53 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Ещё прицепить возможность чтения аргументов из урла и всё - можно начинать писать любые онлайн приложения на Robby
|
22 Apr 2023 07:48 |
|
|