{"id":3824,"url":"\/distributions\/3824\/click?bit=1&hash=a0d33ab5520cacbcd921c07a49fc8ac5b78623b57936b992ce15c804b99210d4","title":"\u041a\u0430\u043a\u0443\u044e \u0440\u0435\u043a\u043b\u0430\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0442\u044c \u043d\u0430 DTF \u0438 \u043a\u0442\u043e \u0435\u0451 \u0443\u0432\u0438\u0434\u0438\u0442","buttonText":"\u0423\u0437\u043d\u0430\u0442\u044c","imageUuid":"75ec9ef4-cad0-549d-bbed-1482dc44e8ee","isPaidAndBannersEnabled":false}
Gamedev
perfect_genius

Идея интуитивного способа программирования — Visual Maker

Придумал, как может выглядеть программирование будущего: показываем компьютеру что от него хотим и он пытается найти в этом закономерность. Если не находит сразу, то показываем повторно.

Конкретнее: простой графический редактор типа Paint, в нём можно создавать объекты (пиксельные, векторные, буквы-цифры) и удалять. Также перемещать, поворачивать, масштабировать с нужной скоростью. Увидев повтор в этих действиях, редактор предложит автоматизировать их повторение. Например, увидев создание объекта, потом его удаление и потом снова создание, редактор предложит повторять этот процесс, т.е. объект будет мерцать. В более сложных случаях, когда выявленную закономерность можно объяснить несколькими способами, редактор спросит напрямую или же исследует неоднозначности сам в фоновом режиме, не отвлекая человека.

Это нейросети? Нет, пока нет. Я не смог понять как они работают, поэтому делая Visual Maker попытаюсь к ним подступиться, приоткрыть чёрный ящик.

Вот как выглядит создание простой игры типа Space Invaders:

Рекомендую в первый раз смотреть отключив субтитры (они быстрые, чтобы читать на паузах)

В этой демонстрации прототипа идеи очень многое не реализовано - планирую добавить цвет, загрузку своих изображений и звука, поддержку устройств ввода (сейчас только стрелки клавиатуры), хекс-редактор, текст, а в будущем дойти и до 3D.

Если хотите попробовать прототип, то знайте, что багов в нём больше, чем в играх Bethesda. Самый мешающий - при перемещении объекта мышкой и одновременно с нажатой клавишей-стрелкой - не задерживайте движение в начале и не отпускайте клавишу сразу. Также на видеокартах от Intel курсор может быть смещён по оси Y.

Мои параметры: NVIDIA, экран 1366 х 768 (диагональ 15.5), вертикальная синхронизация под частоту экрана (60 кадров в секунду), поэтому элементы могут выглядеть мелкими (есть масштабирование колёсиком), а анимации ускорены (нажмите на корпусе вашей ПК кнопку Turbo). Если что-то пошло не так, то пока лучшее решение - перезапустить программу и повторить свои действия.

Задуманный интерфейс на данный момент:

-F1 - управляет временем: остановка, перемотка, редактор застывшего момента...

В редакторе момента задействуются кнопки мыши:

-левая - создание и удаление объекта (точка, линия, круг, квадрат...), его свойства.

-правая - перемещение, размер, поворот...

-средняя с колёсиком - управляют видом самого редактора: масштаб, положение, 2D/3D...

Функции каждой кнопки зависят от одиночного нажатия, двойного нажатия, нажатия и задержании, нажатия и перемещения курсора.

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

Какую 2D-игру хотели бы попробовать создать в ВизМейкере?
Pong
Arcanoid
Жизнь
Тетрис
Змейка
Lode Runner
Сапёр
Asteroids
Танчики
Это какая-то хрень, иди лучше убейся.
Марио
Показать результаты
Переголосовать
Проголосовать
0
98 комментариев
Написать комментарий...
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Олег Котов

Показываешь пиксельными шарадами интерпретатору форму в 3-х проекциях. Очень быстро опускаешь и очень быстро поднимаешь - это говорит, что он тяжёлый. Показываешь летящий в обхект пиксель, показываешь как он проминает объект - это говорит, что объект мягкий, а пиксель - нет.
Охуенно, короче. Вот это я понимаю, упрощение разработки. Сидеть и рисовать пиксели в надежде, что интерпретатор поймёт тебя - куда лучше, чем написать условные 10 строк.

Ответить
15 комментариев
Развернуть ветку
perfect_genius
Автор

Это один первых вопросов, который задал себе и быстрый ответ не нашёл. Конечно, зная физику и формулы сделать физику в ВизМейкере должно быть чуть легче, чем на традиционных языках, потому что можно будет напрямую оперировать объектами, векторами и т.д. Но это всё равно слишком сложно и низкоуровнево для обычного человека, поэтому скорее всего придётся реально использовать нейросеть, чтобы обучать. Посмотрим, самого интересует.

Ответить
6 комментариев
Развернуть ветку
Никита Таллий
Ответить
Развернуть ветку
perfect_genius
Автор

Починил:

Ответить
Развернуть ветку
Pavel Lysenko

Это ж только визуализация, при чём только пиксельная. Никакой логики из этого сделать нельзя. Это станет понятно, например, после первой попытки реализовать сохранение / загрузку.

Ответить
Развернуть ветку
Сергей Кириченко

Сразу видно вы мега-гига-дупер-супер-пупер-жупер-мастер логики и системного мышления.

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

Ответить
3 комментария
Развернуть ветку
perfect_genius
Автор

Да, визуализация, но на котором человек без знания программирования уже может сделать несколько простых игр уровня самых первых игр индустрии. И каждая следующая добавленная фича будет увеличивать доступные возможности в геометрической прогрессии.
Пиксели - чтобы начинать с простого к сложному, да и банально стоит 20-кратное масштабирование при запуске, можете покрутить колёсиком и вернуть 1:1
А что там с сохранением/загрузкой? С текстовым/хекс-редактором можно будет проводить любые манипуляции с данными и файлами.

Ответить
5 комментариев
Развернуть ветку
Ручной звук

Это как законы ньютона переизобретать :)

Ответить
Развернуть ветку
perfect_genius
Автор

Эйнштейн-же смог.
В ответ скажете "Но ты же не Эйнштейн"? : )

Ответить
1 комментарий
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
REM1X

More like monitor learning in off mode.

Ответить
Развернуть ветку
Антон Антонов

Вспомнил, снова пригорело

Ответить
Развернуть ветку
Абыр Валг

Не хватает варианта "Похоже на хрень, но респект за старания".

В более сложных случаях, когда выявленную закономерность можно объяснить несколькими способами, редактор спросит напрямую или же исследует неоднозначности сам в фоновом режиме, не отвлекая человека.

Вот вы ж понимаете что такая штука крайне подвержена проблемам. Это почти как программирование чёрного ящика. Вы вроде как задаёте ввод и вывод, и кто-то (софт в данном случае) генерирует логику на основе этих данных. Но только тут ещё и тяжело передать эти параметры ввода/вывода однозначным образом.

В обучении программированию как оно есть сейчас оно тоже бесполезно, ведь программирование это в первую очередь создание алгоритма в голове. Да и так в принципе есть уже визуальные языки программирования для самых маленьких.

Ответить
Развернуть ветку
Евгений Серегин

Ну, задача благородная в том плане, что многие задачи имеют повторение и большое кол-во строк кода постепенно из "дворика" перерастают в "лес". Лично я вижу главный лейтмотив в том, чтобы визуализировать основные части, дабы минимизировать то, что в общем то даёт основу, но занимает не мало времени.

В моей голове всё выглядит так, что правой кнопкой нажимая на объект, мы как создаём основные алгоритмы (движимый ли, имеет ли ии, вес) и каждый из них является папкой-основой для дальнейшего прописывания деталей и возможностью создать шаблон. Эдакий "ярлык" на нужные строки кода, если можно так выразится, с возможностью открыть место где это всё именно прописано и дописать нужное, так же указав это как один из шаблонов.

Полёт мысли офк, но все мы понимаем, что с прописыванием кода надо реально что-то делать для сокращения времени работы с ним и увеличения ориентирования в собственно-посаженном лесом.

ВООООТ

Ответить
8 комментариев
Развернуть ветку
perfect_genius
Автор
тяжело передать эти параметры ввода/вывода однозначным образом.

В видео в каком моменте тяжело? Хочу, чтобы элемент что-то делал после чего-то. Делаю это чего-то и после делаю с элементом то, что хотел бы, чтобы делала программа. Повторяю это пару раз, проверяю, что оно делает что хотел.

программирование это в первую очередь создание алгоритма в голове

Далее сделаю ввод букв-цифр, и вот с ними можно будет делать сортировки, например пузырьком. Да и вообще любой алгоритм, по идее.

уже визуальные языки программирования для самых маленьких.

Они же всё ещё текстовые.

Ответить
Развернуть ветку
Demian

Полезно разве что в качестве интересного упражнения для разработчика

для создания презентаций, прототипирования

Есть более удобные инструменты

при начальном обучении программированию

Оно не может научить программированию, т.к. идея была сделать инструмент, не требующий программирования

Ответить
Развернуть ветку
perfect_genius
Автор
Есть более удобные инструменты

В каких из них можно за одно движение объектом назначить ему его направление, скорость, условия начала его движения и конца? В планах сделать ещё и определение ускорения, чтобы человек мог либо изначально плавно менял скорость, либо в начале и конце.

идея была сделать инструмент, не требующий программирования

Может, автор лучше знает какую идею он хотел? :D
Идея была сделать безтекстовое программирование. Алгоритм - это просто определённая последовательность действий. В демонстрации это:
-Переместить пульку туда, где находится пулялка, когда пулька заканчивает движение.
-Перемещать пульку туда же когда перемещается пулялка.
-Не перемещать пульку, если уже пущена (на данный момент не реализована перемотка времени назад, поэтому это первый логичный баг - она перемещается к пулялке даже пущенной, а также анимация не останавливается, т.к. не сделал ещё остановку)

Ответить
4 комментария
Развернуть ветку
Kriptman

Представил производительность сколько-нибудь сложных штук написанных таким способом. Удачи в поисках суперкомпьютера.

Ответить
Развернуть ветку
perfect_genius
Автор

Это больше для создания-прототипирования, чем производительность. Т.е. если в этом будет удобнее быстро проверить идею, убедиться в её годности и потом уже писать на серьёзном производительном языке, то это уже будет успех.
А так в планах - перевод в LLVM.

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
perfect_genius
Автор

С нейросетями вот так и мучаются? Вот бедненькие программисты, тогда точно надо что-то с этим делать.

Ответить
1 комментарий
Развернуть ветку
Ярослав Голубев

Неявная задача алгоритма.

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

Ответить
Развернуть ветку
perfect_genius
Автор

Не зная, что происходит внутри чёрного ящика.

Ответить
Развернуть ветку
Олег Котов

Валидацию всё равно пилить надо.

Ответить
Развернуть ветку
333hronos

Исходя из вводных, и желаемого результата, компьютер, конечно, может построить, некую, на первый взгляд, рабочую цепочку...

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

К тому же, при необходимости правки или отладки, сделать это будет весьма проблематично, т.к. код писал не username.

В общем, волшебства не бывает.
Вернее бывает, но создаём мы его как правило сами, последовательным трудом.

Ответить
Развернуть ветку
perfect_genius
Автор

Да, работы много ожидается. Мне нравится решать интересные задачки, поэтому не терпится встретиться с ними.
В крайнем случае будет режим низкоуровневого вида, чтобы точнее разобраться что же там происходит.

Ответить
Развернуть ветку
lolipop popilol

это не обучение программированию однозначно, я загружаю в черный ящик то, что я хочу, а дальше он выдает мне какой-то результат, при этом ученик понятия не имеет как работает алгоритм внутри и все, что делает это ученик, тыкает в кнопку повтора, пока не получится нужный результат. В чем здесь обучение, мышкой кликать?
п.с. с учетом планов автора по развитию я уже представляю как он рисует взаимодействие предметов разной формы, из разного материала с другими предметами в разных средах, и ждет n-ое кол-во времени , пока его не-нейронка заново изобретет законы физики.

Ответить
Развернуть ветку
perfect_genius
Автор
а дальше он выдает мне какой-то результат

Не какой-то, а какой требовался. Если всё же не такой, то извините, значит это мой косяк и надо бы исправить баг : )

при этом ученик понятия не имеет как работает алгоритм внутри

Вы знаете как физически внутри процессора перемножаются числа, как работают логические операции, как операционные системы/компиляторы обращаются с памятью и оперируют нашим кодом? Даже если знаете, то много кто не знает.

Насчёт законов физики - много ли игр с достоверной физикой? Или может в программах каждый день вам приходится иметь с ними дело?

Ответить
1 комментарий
Развернуть ветку
Максим Савчук

Это ж обычный макрос. Или я чего-то не понял?

Ответить
Развернуть ветку
perfect_genius
Автор

Действительно, оно. Только не обычный, а визуальный.

Ответить
Развернуть ветку
Antony Sumin

По ходу, автор просто не застал пик славы Flash (по сути он создал пару спрайтов и ключевых точек анимации).
Иначе он бы не стал такой фигней страдать.

Ответить
Развернуть ветку
perfect_genius
Автор

Застал и даже пробовал делать анимацию. Уже тогда поражался, почему нельзя интуитивно за одно перемещение объекта назначить ему его направление, скорость и условия начала его движения и конца.

Ответить
Развернуть ветку
No More Natum

Не особо понимаю как оно в принципе может работать, но по тому, что я вижу, скорее не взлетит. Выше уже правильно расписали что по поводу проблем, что про обучение. Добавлю то, что сложные взаимодействия таким образом пилить будет если и реализуемо, то больше похоже на ад. Посмотри на те же UE4 Blueprints From Hell.

Ответить
Развернуть ветку
perfect_genius
Автор
как оно в принципе может работать

Пользовались ArtMoney или подобными поисковыми программами?
Если нет и не знаете, то опишу: память программы - целое полотно разнообразных безликих цифр, и какая-то одна из них является нужным нам значением, например количеством сердечек жизни. Допустим их 5, запускаем поиск-отсеивание всех пятёрок в этом полотне. Из тысячи цифр остаётся сотня. Теперь надо бы изменить количество сердечек, чтобы увидеть это изменение среди тех отсеянных цифр. Получаем урон в игре и сердечек становится 4. Снова ищем-отсеиваем среди тех пятёрок те, которые стали четвёрками. Из сотен их останется уже несколько. Снова получаем урон... Таким образом останется одна цифра (или больше). Меняем его уже в поисковике и смотрим изменение уже в игре - в игре окажется столько сердечек, сколько ввели. Нашли, можно увеличить и/или заморозить - поисковик будет всегда записывать в память игры эту цифру, пока запущена с игрой.
Похожее хочу сделать в ВизМейкере - чтобы при каждом повторе действия отсеивались несовпавшие значения-результаты разных подсистем-алгоритмов (а их можно напихать все известные человечеству).
Моя цель - чтобы не надо было повторять-отсеивать много и долго, желательно только 2-3 раза.

Ад блюпринтов решил своей блок схемой, похожей на ДРАКОН, но лучше.

Ответить
1 комментарий
Развернуть ветку
Евгений Серегин

Идея хорошая, но не избавляет от прописания цепочек событий if-then, посему довести бы до ума идею. К примеру возможность выделения объекта/ов с возможностью правой кнопкой выбрать If-1 или Then-1. Тем самым указывая что If-1 делает, чтобы вызвать Then-1. Там же, правой кнопкой, иметь возможность нажать "триггер" и в итоге указывать область где он сработает для If-1.
Что касается веса, то ввести в правой кнопке нужный пункт интерактивности модели, где один из пунктов будет вес.

Конечно у идеи много подводных камней в 3D проектах, но в 2D затея нормальная, как по мне. Хотя с разрушаемостью, реакцией на удар/попадание и всей "пластичностью" я хз как сделать

Ответить
Развернуть ветку
Олег Котов

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

Ответить
Развернуть ветку
perfect_genius
Автор

Вы описываете конструкторы игр типа Construct. Я хочу заменить интерфейсы повторением действия и подтверждением/опровержением догадки компьютера.
Лучше опишите задачку, решение которой хотели бы увидеть.
Область-триггер можно сделать и сейчас нарисовав эту область, переместив в него объект и делать с ним то, что хотели бы, чтобы делала программа при попадании в эту область. Когда появится цвет - область можно будет закрашивать в прозрачный.

Ответить
Развернуть ветку
Demian

Мне кажется, я 1-2 года назад что-то такое уже читал на хабре вроде бы. Вы и раньше про него уже писали?

Ответить
Развернуть ветку
perfect_genius
Автор

Да, на Хабре несколько раз описывал в комментариях, например вот целое полотно: https://habr.com/ru/company/1cloud/blog/315230/#comment_9910818
Предложил этот материал в Песочницу - не приняли с формулировкой "реклама". Поэтому получился эксклюзив для DTF : )

Ответить
5 комментариев
Развернуть ветку
Сергей Кириченко

Выглядит весьма забавно :)) Интуитивное программирование.

Очень интересный подход, имеет право на существование и интересно будет раскрыть его потенциал.
Конечно некоторые вещи так не запрограммируешь, по типу таблицы чисел, но определённые задачи можно сымитировать.

Автору ни в коем случае не стоит бросать идею.

Ответить
Развернуть ветку
perfect_genius
Автор

С появлением чисел можно будет делать с ними всё.

Ответить
1 комментарий
Развернуть ветку
Sergey Leskov

На данном этапе к такой концепции много вопросов. Но вообще программирование должно стать более верхнеуровневым. Я сейчас изучаю юнити, и несмотря на то, что даже в голове у меня есть четкий алгоритм, как его реализовать я не понимаю. Как только вижу какой-нибудь roomNavigation = GetComponent<RoomNavigation> (); мне становится плохо. Синтаксис большинства языков пока не готов к пришествию людей (таких как я), которые не могут уложить в голове все эти абстракции, инкапсуляции и рекурсии.

Ответить
Развернуть ветку
perfect_genius
Автор
как его реализовать я не понимаю

А здесь не будет такого сложного выбора - лишь кнопки мыши : )

Ответить
Развернуть ветку
Олег Котов

Синтаксис языка учится за 2 месяца максимум. Даже сложный типа С++

Ответить
Развернуть ветку
Pavel Lysenko

Для тех, кто не может уложить в голове абстракции и инкапсуляции, существует язык C и процедурное программирование.
Более того, приведённая строчка из C# станет понятна даже девятикласснику после одного 40-минутного занятия. Русский язык гораздо сложнее, чем любой язык программирования, но почему-то его синтаксис никого не смущает.
А теперь самое интересное: чем программирование более высокоуровневое — тем больше в нем абстракций.

Ответить
Развернуть ветку
perfect_genius
Автор

Кстати, вот как можно закрасить экран (пока отключено, теперь закрашивать можно будет двойным нажатием левой кнопки):
https://im3.ezgif.com/tmp/ezgif-3-92a3e5ca7193.gif

Ответить
Развернуть ветку
Читать все 98 комментариев
null