Перейти к содержимому
Totoro

[Java 8] O-Blocks IDE - визуальное программирование роботов

Рекомендуемые сообщения

Пробовал

 java -jar OcBlocks-0.11a.jar > log

Получаю log нулевой длины.

Ах.

Джава.

Вместо > тогда нужно писать 2>.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Вот

http://pastebin.com/5mU4MbLi

Доступно в течение недели

Круто, класс отвечающий за отображение ошибок не находится.

Вот

http://pastebin.com/5mU4MbLi

Доступно в течение недели

У тебя проблема в java, в стактрейсе написано что класс javafx.scene.control.Alert classloader не находит, и самое интересное, что это класс из родной библиотеки java, у Тоторо на гитхабе даже пакетов таких нет, не то что класс. Попробуй обновить java.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Попробуй обновить java.
 

Обновил до 1.8.0_65. Помогло. Спасибо.

Позже проверю, будет ли после обновления майн работать  :)


Прикольно. Вот бы иметь возможность как-то влиять на трассы без перемещения блоков. Сложная схема может оказаться плохо читаемой.

Жду циклы и логику.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Вот бы иметь возможность как-то влиять на трассы без перемещения блоков
 

А поподробнее.


Вообще, Oracle в 8 версии java активно пилят JavaFX хотят сделать заменой swing, так что для работы OcBlocks лучше использовать последнюю версию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Обновил до 1.8.0_65. Помогло. Спасибо.
 

Я почитал, для запуска нужно минимум версия 8u40, потому как там добавили Alert и тд.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А поподробнее.

 

Ну, к примеру, создаю я длинную цепочку блоков, которая в одну строку не умещается. Получается как-то так:

post-7-0-28697400-1447848768_thumb.png

А хотелось бы:

post-7-0-63738000-1447848776_thumb.png

Думаю, когда появится ветвление, это станет особенно актуальным.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да, упустил из виду Alert'ы. До версии Java 8u40, они существовали отдельно, в составе большой библиотеки ControlsFX Dialogs. Потом Oracle увидел, что это круто, и прибрал к рукам )

Добавлю уточнение в стартовый пост.

 

 

Прикольно. Вот бы иметь возможность как-то влиять на трассы без перемещения блоков. Сложная схема может оказаться плохо читаемой.

Жду циклы и логику.

Есть вариант добавить режим редактирования контрольных точек к "трассам". Тогда можно будет поправить форму.

Либо прямо тасканием за середину линии изменять.

 

 

Спасибо всем большое за отзывы и багрепорты! Это воодушевляет писать дальше  :)

Циклы и логика на подходе. К сожалению, времени на все не хватает, поэтому обновление может подзажержаться.

Изменено пользователем Totoro

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Я тут полистал свой календарь и обнаружил вопиющую пропажу - исчезли выходные на прошлой неделе.

"Как же так, - подумал я, - ведь я собирался выложить OcBlocks 0.2а в субботу"

Но злодеев найти так и не удалось, поэтому выкладываю программу сегодня.

 

Среда программирования пополнилась новыми плюшками, и новыми операторами.

Пожалуй лучше всего опишет изменения вот этот скриншот:

 

O-Blocks3.png

 

Который транслируется в такой код:



-- [OcBlocks v0.2a generated code] --
local robot = require('robot')
local a = robot.detect()
local b = robot.detectUp()
local c = b == a
if c then
  robot.down()
else
  -- pass --
end
-- [The END] --


Скачать

O-Blocks 0.2a (1.22 Mb)

 

Подробнее

  •   Добавлен инструментарий для работы с группами блоков - рамочка для выделения, хоткеи и меню для вырезания, копирования, вставки и удаления.
  •   Добавлены типы данных. Пока только boolean (оранжевый). Вы можете заметить у некоторых блоков дополнительную синюю ноду. Это Нода Данных, которая позволяет в любой момент стянуть с нее значение, которое хранит в себе блок. К нодам данным может быть подключено любое число линий. Пунктир на линии помечает тип данных, который этой линией передается. (Красный пунктир - неправильное подключение линии).
  •   Линии могут быть белыми и черными. Черные - это линии контролирующие ход программы и последовательность выполнения блоков. По ним выполняется схема, и по ним же она транслируется. Белые линии - пассивные линии данных. По ним блоки могут получать данные от других блоков, когда нужно.
 

Должен заметить, что суффикс "a" в номере версии означает "альфа". То есть, контент настолько сырой, что у меня не хватает нахальства называть его "бета".

Все изменения представляют собой наброски "того как оно будет", и ожидают вашей бурной критики и предложений по улучшению.

 

P.S. Репа проекта по прежнему открыта для предложений, багрепортов и пулл-реквестов. 


Изменено пользователем Totoro

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Годнота, только еще надо бы сделать возможность лепить несколько веревок на один вход/выход, а то чтобы прикрутить какой-нибудь код после if надо либо делать дублирование кода до if, либо составлять бороду из if if if, чтобы сделать необязательный if

 

P.S. формат для сохранения простой и понятный, такое можно сделать в OpenComputers

Изменено пользователем Doob

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Годнота, только еще надо бы сделать возможность лепить несколько веревок на один вход/выход, а то чтобы прикрутить какой-нибудь код после if надо либо делать дублирование кода до if, либо составлять бороду из if if if, чтобы сделать необязательный if

 

Имеешь ввиду что-то такое?

 

ocb-programm0.png

 

Несколько веревок на выход я делать не буду, поскольку это создает неоднозначность выполнения. По какой линии должна двинуться программа? По рандомной, или по очереди (по какой очереди?)... Это создает неочевидность и запутанность.

 

Несколько веревеок на вход я делаю сейчас.

Тут проблема в том, во что это будет экспортировано. То что выше, на скриншоте - по сути цикл while. И по хорошемо должно экспортироваться в него. Однако схема может быть гораздо запутаннее, с несколькими переходами в начало цикла, или даже не только в начало.

Поэтому скорее всего, это все будет экспортировано в виде вермишели с операторами goto. =) Это конечно не радует, и противоречит принципам красивого кода... Но зато в OcBlocks "код" станет красивее и понятнее.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хм.. Я все не мог придумать, как экспортировать вермишель, про goto совсем забыл.

Главное, чтобы оно работало, а как оно будет работать это дело десятое :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Небольшое обновление. Запатчил и проапдейтил. Теперь будет запускаться на секунду дольше, это нормально. =)

 

dig_all_forward.png

 

Скачать

OcBlocks 0.21a (1 Mb)

 

Что нового

  • Экспорт "кода" в картинку PNG с прозрачным фоном. Типа той, что выше.
  • Поддержка вермишельного кода. Типа того, что выше.

Экспортируется во что-то такое:

-- [OcBlocks v0.21a generated code] --
local robot = require('robot')
::a::
local b = robot.detect()
if b then
  robot.swing()
  robot.forward()
  goto a
else
  robot.forward()
  os.exit()
end
-- [The END] --

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

io.png

-- [OcBlocks v0.22a generated code] --
local robot = require('robot')
local a = io.read()
print(a)
os.exit()
-- [The END] --

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Теперь на O-Blocks можно официально написать свой "хеллоу-ворлд"!

untitled.png

Скачать бесплатно без СМС:

OcBlocks 0.3a (1.1 Mb)

-- [OcBlocks v0.3a generated code] --
local a = 'Hello World!'
local robot = require('robot')
::b::
print(a)
os.exit()
-- [The END] --

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

e6a8a2012d2c2a033bcb0d6600c4894a.png

 

122a4c356130c2cece027bb39401749b.png

 

 

По логике программа спрашивает, стоит ли какой-то блок перед роботом. Если блок есть, то сначала выполняется robot.swing() и двигается вперед, а если нет, то робот просто двигается вперед. Сгенерировался какой-то непонятный код, явно несоответствующий моей логике хд

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

swing_check.png

 

Блок проверки только генерит значение. Для того чтобы создать "развилку", надо добавить ромбик-проверку. Оранжевый пунктир показывает, что блок проверки передает с зеленого узла логическое значение.

 

Синий узел нужен для повторного использования этого значения позднее, если надо.

А выполнение программы всегда идет с зеленого на красный узел.

 

Код будет выглядеть так:

-- [OcBlocks v0.3a generated code] --
local robot = require('robot')
local a = robot.detect()
if a then
  robot.swing()
  ::b::
  robot.forward()
  os.exit()
else
  robot.forward()
  os.exit()
end
-- [The END] --

Не идеал в плане оптимизации, но логику передает верно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Блок проверки только генерит значение. Для того чтобы создать "развилку", надо добавить ромбик-проверку. Оранжевый пунктир показывает, что блок проверки передает с зеленого узла логическое значение.

 

А, вот оно как. Пасиба. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Извини за назойливость, но так как в чате история храниться не долго, а мне надо тикать, то оставляю вопрос здесь:
 

Решил я сделать цикл, который проверяет, есть ли впереди блок. Если да - уничтожить и двигаться дальше, если нет - сразу двигаться дальше. В чём проблема: Я не пойму как вернуться обратно. Он просто прекращает цикл после проверки. Делает как надо, а потом стопорится и пишет, что закончил. Такие дела. Говнокод прилагаю: 90b6db9b2eab47319675f3e7ff4252a6.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если рассуждать логически. Здесь всё выполняется по линиям.

 

У цикла есть две ветки - ветка "плюс" и метка "минус".

По ветке "плюс" программа идёт когда цикл активен, а по ветке "минус" - когда он завершился.

 

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

 

Пример:

 

iE5Dd9L.png

Выполняется этот осьминог так:

1) Программа заходит в цикл

2) Цикл повторился 0 раз. Надо 10. Значит цикл активен. Значит идём по "плюсу".

3) Печатаем номер попытки в консоль

4) Возвращаемся к началу

5) Цикл повторился 1 раз. Надо 10. Идём по "плюсу".

....

31) Цикл повторился 10 раз. Цикл завершён, идем по "минусу".

32) Конец программы

 

Вот такой исходник сгенерится:

-- [OcBlocks v0.3a generated code] --
local a = '10'
local robot = require('robot')
for c = 1, tonumber(a) do
  print(c)
end
-- [The END] --

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...