Як я можу запровадити систему програмування у своїй грі, яка є доступною, потужною та швидкою для кодування?


15

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

  1. доступний,
  2. потужний (голий мінімум буде твердістю-повнотою)
  3. швидко кодувати в.

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


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

2
Скретч ніхто не згадав?
Рассел

2
Я не збираюся пропонувати закрите голосування, але хочу зазначити, що це досить зручно підпадає під категорію "Якщо ви можете уявити всю книгу, яка відповідає на ваше запитання, ви задаєте занадто багато", не задаючи питання. від FAQ; це дуже важка проблема, і хоча люди тут можуть запропонувати поради, це проблема, яка, ймовірно, виходить за межі веб-сайту SE.
Стівен Стадницький

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

Відповіді:


10

Дійсно, єдиний спосіб мати всі функції - це реалізація декількох інтерфейсів. Доступні та потужні часто є двома кінцями спектру. Найпростіший спосіб зробити це - реалізувати потужну систему, яка має додатковий інтерфейс, який дозволяє новачкам інтуїтивно взаємодіяти з системою.

Дозволяє створити систему, яка дозволяє новачкам програмувати візуально, можливо, щось подібне до програмування Lego Mindstorms інструментів :

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

Там, де є компоненти перетягування / падіння. Компоненти мають входи та виходи. Компоненти можуть бути простими речами, як-отAND , або ORворота, або більш складними , як тест на оточуючих ворогів.

В ідеалі візуальне зображення повинно складати сценарій письмової мови на задньому плані. Це також пропонує потужний інструмент для вивчення мови. Якщо новачок може «написати» свою програму візуально, то прочитайте створений ним код, вони набагато частіше зрозуміють її та зможуть змінити створений код. Зрештою, можливість написати більш потужний код, ніж дозволяють лише візуальні засоби. Це відповідає вимозі спрощення користувачів у програмуванні.

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

Письмова мова дозволяє досвідченим користувачам робити передові речі. І ви навіть можете дозволити користувачам створювати власні компоненти, створюючи власні сценарії. Потім вони можуть повторно використовувати складені ними компоненти у швидкому та простому інтерфейсі для швидкого програмування.

Удачі! Звучить як веселий проект.


Дякую за пояснення. Я насправді думав робити щось на кшталт NXT-G, тільки з досвіду знаю, як складно робити складні програми такою мовою. Мені подобається ідея перетворення візуальних програм в код, що дозволяє гравцям повертатися назад і редагувати свої програми текстуально, коли вони більш досвідчені, тому я, швидше за все, цим скористаюся.
Dimitriye98

1
Слідкуйте за тим, щоб легко створити якийсь код скрипту з графічних зображень, але дуже важко створити (змістовне і читабельне) графічне зображення зі сценарію. Таким чином, ви, ймовірно, закінчите синтаксис власного сценарію.
Імі

1
Навряд чи ви хочете реалізувати script-> visual саме з цієї причини. Дотримуйтесь візуального-> сценарію.
MichaelHouse

Макроблоки (блоки, які забезпечують введення / виходи та можливість розміщення атрибутивних блоків всередині) можуть використовуватися для забезпечення ієрархії, інкапсуляції та повторного використання для полегшення створення складних програм. Просто переконайтеся, що ви не можете розмістити макроси всередині макросів або виявити такі випадки ... Я знаю принаймні одну прогаму, яка не може виявити такі нескінченні петлі.
Exilyth

5

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

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

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


Цікава мова з точки зору доступності, проте програмування на ній відбувається дуже повільно (я тільки спробував) ...
Паша

@PashaS Насправді це так, я думаю, що це частина ціни, яку вам доведеться заплатити, щоб спробувати отримати найкраще з обох світів.
Кетцалькоатль

4

Я здивований, про це раніше не говорилося, але Скретч MIT використовує блок-інтерфейс, який швидко кодується. Це дозволяє користувачам створювати власні функції і може напрочуд складною для мови, яка була побудована для того, щоб навчити дітей як робити код.

Стенцил - це ще один приклад блочного кодування, який робить щось більш подібне до того, що ви хочете. Кодування з такими блоками набагато ефективніше та менш трудомістке, ніж інтерфейси візуального програмування, як ті, які використовує Lego NXT. Stencyl дозволяє користувачам кодувати або Actioncript, або блоки.

Прошу вибачення за відсутність фотографій, у мене ще недостатньо репутації, щоб розміщувати зображення.


2

Мова програмування BPEL має візуальне представлення та багато інструментів, які працюють з ним. Це мова робочого процесу, а не мова програмування, але вона є повною. Він є багатослівним, але легко писати як для програмістів, так і для ділових людей, і легко перекладається з візуальної в текстову форму. Я не думаю, що це зробить гарну мову гри, але вона може послужити джерелом натхнення. А враховуючи кількість двигунів та інструментів BPEL, слід використовувати можливість повторного використання деяких ідей та / або коду.

Мова, схожа на BPEL, не відчуватиме себе як програмування, більше схожа на маршрутизацію та з'єднання систем. Таким чином, ви можете мати систему націлювання, підключену до системи гармати з певною логікою між ними.


+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-geeks на борту. І якщо ви будете тримати механіку простою (наприклад, Тригер -> Умова -> Дія), то вам не доведеться витрачати ці люди-роки на розробку інтерфейсу користувача для потужного і все ще простого у користуванні редактора графічних сценаріїв.

Деякі приклади, щоб прояснити, що я маю на увазі:

  • Тригером може бути: "Ігрові рамки ініціалізовані", "Гра завантажена", "Блок створений", "Підрозділ знищено", "Гравець пошкоджений" тощо. Тригери зазвичай мають деякі параметри (наприклад, створений Unit отримує створений GameObject)
  • Умови - це всі стандартні булеві та основні арифмічні умови (та / або / не / дорівнює / більше ...), а також деякі типові умови, які ви знайдете у грі, наприклад, "Підрозділ у повному стані здоров'я" або "Принаймні два гравця підключені". Умови зазвичай мають параметр, який користувачеві потрібно заповнити (використовуючи інтерфейс користувача)
  • Дії - це сценарії, які також можуть приймати простий параметр. як-от "Панорамування камери на XXX", "Вбивчий блок Y", "Гра закінчена", "Виконати тригер" та "Дії викликів X, Y, Z ... послідовно"

Зауважте, що програмування призначено для комп'ютерів В грі, а не для плагінів. Дякую все одно.
Dimitriye98

Я бачу .. це звучить як цікавий ігровий підхід;). Ви заглядали в подібні ігри, такі як "Code Hero" або "Garry's Mod", які намагаються надати можливості кодування, не порушуючи ігрового занурення? У будь-якому разі, ви все ще можете врятувати мою основну пораду та розділити проблему на сценарії та частини інтерфейсу. Успіхів вам у грі. :)
Imi

Ну, кодування буде зроблено на ігрових консолях комп'ютера, які не повинні занадто сильно порушувати занурення. Хоча користувачі, які захочуть, зможуть кодувати з гри, тоді імпортують код у свій файл збереження або на сервер, на якому вони грають.
Dimitriye98
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.