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

15

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

  1. доступным,
  2. мощный (минимальный уровень будет полнотой по Тьюрингу)
  3. быстро в коде.

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

Dimitriye98
источник
Я буду удивлен, если кто-нибудь может дать вам пример. Потому что я действительно думаю, что это требует некоторых обширных исследований (таких как то, как люди применяют логику, а что нет, психологические факторы и все эти вещи, ориентированные на человека)
Сидар
2
Никто не упомянул Scratch?
Рассел
2
Я не собираюсь предлагать закрытое голосование, но хочу отметить, что это довольно легко попадает в категорию вопросов: «Если вы не представляете всю книгу, которая отвечает на ваш вопрос, вы задаете слишком много» из FAQ; Это очень сложная проблема, и хотя люди здесь могут дать совет, эта проблема, вероятно, выходит за пределы сайта SE.
Стивен Стадницки,
Стоит отметить, что полнота по Тьюрингу может быть достигнута игрой жизни Конвея , Minecraft и другими подобными системами, не предназначенными для программирования.
Будет ли

Ответы:

10

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

Если учесть систему, которая позволяет начинающим программировать визуально, возможно, что-то похожее на инструменты программирования Lego Mindstorms :

введите описание изображения здесь

Где есть компоненты перетаскивания. Компоненты имеют входы и выходы. Компоненты могут быть простые вещи , как AND, или ORворота, или более сложными , как тест на окружающих врагов.

В идеале визуальное представление должно составлять сценарий письменного языка в фоновом режиме. Это предлагает мощный инструмент для изучения языка тоже. Если новичок может визуально «написать» свою программу, то прочитайте код, который он создает, и он с большей вероятностью поймет это и сможет изменить полученный код. В конечном итоге возможность писать более мощный код, чем позволяют визуальные инструменты. Это отвечает требованию облегчить пользователям программирование.

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

Письменный язык позволяет продвинутым пользователям делать сложные вещи. И вы даже можете позволить пользователям создавать свои собственные компоненты, создавая собственные сценарии. Затем они могут повторно использовать созданные компоненты в быстром и удобном интерфейсе для быстрого программирования.

Удачи! Похоже, веселый проект.

MichaelHouse
источник
Спасибо за объяснение. На самом деле я думал о том, чтобы сделать что-то вроде NXT-G, только по опыту знаю, насколько сложно создавать сложные программы на таком языке. Мне нравится идея преобразования визуальных программ в код, позволяющая игрокам возвращаться и редактировать свои программы текстово, когда они станут более опытными, поэтому я, вероятно, воспользуюсь этим.
Dimitriye98
1
Помните, что легко генерировать некоторый код скрипта из графических представлений, но очень трудно генерировать (значимое и читаемое) графическое представление из скрипта. Таким образом, вы, вероятно, получите очень ограниченный собственный синтаксис сценариев.
Ими
1
Вряд ли вы захотите реализовать script-> visual именно по этой причине. Придерживайтесь визуального> сценария.
MichaelHouse
Макроблоки (блоки, которые обеспечивают входы / выходы и возможность размещать блоки внутри себя) могут использоваться для обеспечения иерархии, инкапсуляции и повторного использования для облегчения создания сложных программ. Просто убедитесь, что вы не можете поместить макросы в макросы, или вы обнаруживаете такие случаи ... Я знаю по крайней мере одну программу, которая не может обнаружить такие бесконечные циклы.
Exilyth
5

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

введите описание изображения здесь

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

Кецалькоатль
источник
Интересный язык с точки зрения доступности, однако программирование в нем очень медленное (я только что попробовал) ...
Паша
@PashaS Действительно, я думаю, это часть цены, которую вы должны заплатить, чтобы попытаться получить лучшее из обоих миров.
Кецалькоатль
4

Я удивлен, что это не упоминалось ранее, но MIT Scratch из использует блочный интерфейс, который быстро кодирует. Он позволяет пользователям создавать свои собственные функции и может удивительно усложнять язык, который был создан, чтобы научить детей, как код.

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

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

Flaxbeard
источник
2

Язык программирования BPEL имеет визуальное представление и множество инструментов, которые работают с ним. Это язык рабочего процесса, а не язык программирования, но он завершен. Он многословен, но его легко написать как программистам, так и деловым людям, и его легко перевести из визуальной в текстовую форму. Я не думаю, что это станет хорошим языком игры, но это может послужить источником вдохновения. А учитывая количество двигателей и инструментов BPEL, должна быть возможность повторно использовать некоторые идеи и / или код.

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

MartinTeeVarga
источник
+1: хотя я бы не защищал сам BPEL, его подход - именно тот ответ, который я бы дал. Очень регулярный язык, который легко представить в тексте или визуально и который больше ориентирован на маршрутизацию событий / ответ, чем на более "нормальные" парадигмы программирования.
Шон Миддледич
1

Рассмотрим этот подход:

  1. Убедитесь, что логика вашего скрипта выразима в простой механике, основанной на правилах. Например, у вас есть «Триггер», возникающий во время игры, связанный с «Условиями», которые необходимо выполнить, а затем выполнить «Действия» (бессовестно похищенные из редактора Starcraft 2).
  2. Затем предоставьте пользовательский интерфейс, в котором вы можете перетаскивать и удалять некоторые предопределенные действия / условия / триггеры и таким образом составлять 90% сценариев использования, которые обычно хотят выполнять люди.
  3. Теперь получите несколько мощных и популярных скриптовых движков, таких как Lua, Python или C #.
  4. Наконец, напишите пару десятков этих действий / условий / триггеров на этом языке. Убедитесь, что пользователь, выполняющий настройку, может легко копировать, вставлять, редактировать и интегрировать эти и новые действия в редакторе drag'n'drop.
  5. Вы, вероятно, хотите иметь возможность параметризовать свои триггеры, условия и действия, и поэтому вам нужно несколько больше примитивов, чем эти три, например, «GameObject», «Position», «Number» или «String». В пользовательском интерфейсе вам потребуются некоторые диалоговые окна для назначения этих параметров, но это по-прежнему намного меньше работы, чем если бы вам пришлось создавать целые сценарии с помощью операций пользовательского интерфейса.

Это самый быстрый способ, которым я могу придумать, чтобы получить все конфеты без особой боли. Вы получаете нубов click'n'drag, а также фанатов vim на борту. И если вы сохраняете простую механику (например, Trigger -> Condition -> Action), вам не нужно тратить человеческие годы на разработку пользовательского интерфейса для мощного и при этом простого в использовании графического редактора сценариев.

Несколько примеров, чтобы прояснить, что я имею в виду:

  • Триггером могут быть: «Инициализированы игровые рамки», «Игра загружена», «Создан юнит», «Уничтожен юнит», «Игрок поврежден» и т. Д. Триггеры обычно имеют некоторые параметры (например, созданный модуль получает созданный GameObject)
  • Все условия - это стандартные логические и основные арифметические условия (и / или / не / равно / больше ...), а также некоторые типичные условия, которые вы найдете в своей игре, такие как «Юнит в полном здоровье» или «По крайней мере два игрока подключены». Условия обычно имеют параметр, который пользователь должен заполнить (используя пользовательский интерфейс)
  • Действия - это сценарии, которые также могут принимать некоторые простые параметры. такие как «Поворот камеры в XXX», «Убить юнит Y», «Игра окончена», «Выполнить триггер» и «Вызвать действия X, Y, Z ... в последовательности»
Imi
источник
Обратите внимание, что программирование предназначено для компьютеров в игре, а не для плагинов. В любом случае, спасибо.
Dimitriye98
Я вижу .. это звучит как интересный игровой подход;). Вы смотрели на подобные игры, такие как «Code Hero» или «Garry's Mod», которые пытаются обеспечить возможности кодирования, не нарушая погружение в игру? В любом случае, вы все равно можете воспользоваться моими основными советами и разделить проблему на части сценариев и пользовательского интерфейса. Удачи в вашей игре. :)
Ими
Что ж, кодирование будет выполняться на игровых компьютерных консолях, что не должно слишком сильно мешать погружению. Хотя пользователи, которые захотят, смогут кодировать вне игры, затем импортируют код на свое сохранение или на сервер, на котором они играют.
Dimitriye98