Я хочу зробити модульну гру. Як це впливає на мій вибір мови програмування? [зачинено]


26

Я почав робити невеликі ігри на Java, і я розглядаю можливість вивчення C # для більшого проекту. Мені дуже хотілося б зробити гнучку гру, але хтось сказав мені, що мені потрібно дотримуватися Java, якщо я хочу, щоб гра була модною, хоча я не розумію, чому.

Отже, які характеристики мови програмування роблять мову більш придатною для змінних ігор?


3
Якщо ви хочете зробити гнучку гру, PhysicsFS може бути дуже корисною бібліотекою, про яку слід знати. (Це не має нічого спільного з фізикою, не дозволяйте, щоб ім’я вас обдурило.))
Пол Манта

10
"але хтось сказав мені, що мені потрібно дотримуватися Java, якщо я хочу, щоб гра була модифікованою" Це, до речі, BS.
Рей Дей

Відповіді:


18

Це залежить від того, як ви хочете спроектувати свою модову систему. Я вивчу два з них.

SDK

Швидше за все, вам потрібно буде, щоб ваші модери використовували ту саму мову, що і ви, і завантажуєте моди за допомогою відображення (або подібної, залежно від мови вибору). Це, очевидно, обмежить вас мовами, які можуть зробити пізнє зв’язування - і є багато хороших, хто може це зробити (навіть C може зробити пізнє зв’язування за допомогою хитрої LoadLibraryхитрості). Ви навіть можете зробити деякі метамоддінги, де мод може розміщувати інші моди (наприклад, сценарії модів).

Перша проблема такого підходу - це приховування внутрішнього стану. Беручи до прикладу C #, моддер може просто використовувати відображення для доступу до приватних членів, C також може це зробити (хоча більше зусиль потрібно).

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

Сценарій

Модери використовуватимуть таку мову, як Lua, для створення модів. Вам буде потрібна мова, яка могла б викликати нативний код (для взаємодії з Lua); або вам доведеться написати власну мову сценаріїв на вибраній вами мові.

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

За іронією долі друга проблема все ще існує; Взявши приклад Луа, я був дуже розчарований, що функція "обстрілу", включена в основну бібліотеку / за замовчуванням - робить її цілком марною як середовище з піском (без великих зусиль, удачі та обслуговування), важко зобразити, як я зливий на це, але я дуже сподіваюся, що вони випили якісь міцні коктейлі, коли включили ці антифункції . Очевидно, ви могли легко уникнути цього, якби прокатали свою власну мову (див. UnrealScript).

Нарешті, вартість взаємодії з двигуном сценаріїв може бути непомітною - знову ж таки, взяття Луа як приклад у поєднанні з C #: C # має значні накладні витрати при виклику власних функцій (через P / Invoke), а Lua - це досить «балакучий» API. Це може призвести до проблем, якщо спосіб розробки "сценарію SDK" вимагає багато спілкування між вашою основною мовою та вашою мовою сценаріїв (зауважте, що у C насправді немає цієї проблеми). Знову ж таки, ви можете ухилитися від цього, написавши свою власну мову сценаріїв (а у випадку, якщо C # компілює її в MSIL) та виконаєте її якнайшвидше у вашому [віртуальному] середовищі.

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

Висновок

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


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

1
@DavidGouveia Я вважаю, що принаймні одна версія двигуна Paradox, що використовується для Europa Universalis (та еквівалентні ігри для різних часових періодів), підтримувала форму бінарного виправлення (хоча це могло бути, якщо моддер виправити джерело та перекомпілювати один із ігри DLL замість належної підтримки SDK) на додаток до більш часто використовуваних мод шляхом зміни реалізації файлів даних.
Дан Нілі

2
@DavidGouveia див .: Джерело двигуна; або навіть плагіни Winamp Я думаю, що Quake навіть працює так. Я зрозумів, що ви використовуєте C #; тож, можливо, ви захочете заглянути в MEF (керовану рамку розширення): розкрийте інтерфейс, завантажте його за допомогою рефлексії та боб вашого дядька.
Джонатан Дікінсон

@JonathanDickinson О, я не мав уявлення, що двигун Source працює під цією моделлю. Завжди уявляв набір інструментів, як набір The Elder's Scrolls Construction. Дякую за інформацію (у мене була ідея, як це працює, я просто подумав, що це може бути занадто складним для загального використання модера). І я насправді сміявся з "боба твоя дядько" . :-)
Девід Гувейя

1
Re Lua: У цих хлопців є пісочне меню Lua, яке підходить для використання у вікі-програмному забезпеченні (і досить стійке, що англійська Вікіпедія використовує його). Я впевнений, що ви могли б адаптувати це до своїх потреб, але деякі частини розширення є GPL, тому проконсультуйтеся зі своїм юристом.
Кевін

16

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

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

Це також на півдорозі, якщо ви просто створите інструменти для власного користування (наприклад, власний редактор рівнів), а пізніше вдосконалите їх та поділіться ними зі своїми користувачами. Редактор рівнів Super Meat Boy був в значній мірі , що вдосконалений verision інструменту використовується в процесі розробки гри.

І залежно від типу гри, можливо, ви захочете дозволити користувачам розробляти сценарії певної поведінки гри. У такому випадку вам слід задуматися про те, щоб у свою гру включити мову сценаріїв (як власну, так і існуючу, наприклад, Lua або Python, які є популярними варіантами). Це також підпадає під категорію дизайну, керованого даними. Якщо ви вирішили використовувати існуючу мову скриптів, можливо, варто перевірити, чи потрібна мова програмування має прив'язки до цієї мови сценаріїв (як правило, у формі сторонніх бібліотек).


5

Вибрана мова насправді не визначає, наскільки граюча гра, але спосіб використання мови має більше значення.

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

Однак це не означає автоматично, що використання цих речей унеможливлює модерування гри. Наприклад, Minecraft - це не дуже модифікована гра, проте для Java є досить непогані декомпілятори та дуже велике співтовариство для Minecraft, тому багато інструментів було зроблено для того, щоб Minecraft був модифікованим (різні модлодери, Bukkit). За допомогою цих інструментів можна модифікувати Minecraft (проте, мабуть, технічно вони є незаконними у деяких країнах).

Найкраща порада, яку я можу дати вам, - це використовувати інструменти, якими ви хочете користуватися моддерами; Якщо ви визначите NPC з файлу, він може бути модифікованим, якщо ви маєте особливий регістр у коді, він, ймовірно, не може бути.


1

Java цілком підходить для написання модифікованої гри.

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

Деякі динамічні варіанти мови, які слід врахувати:

  • Groovy - відмінна динамічна мова, схожа на Java, яку можна вбудувати в більші програми Java.
  • Clojure - потужний, динамічний Lisp для JVM. Деякі модери можуть важко обійтися, але це надзвичайно потужна мова і її можна вбудувати дуже легко. Ще не бачив, як він використовувався для моделювання гри, але немає причини, чому ні.
  • Lua - дуже популярна ігрова сценарна мова. Я вважаю, що існують версії для JVM, які ви можете використовувати зсередини Java (хоча я сам цього не пробував)
  • JavaScript - доступний в JVM через Rhino . Досить солідний вибір для сценаріїв ігор, оскільки багато людей знають деякі JavaScript, а також прототипна об'єктна модель дуже добре підходить для ігрових мод.

-2

Існує спосіб простіший спосіб зробити це в Java, хоча це трохи неохайно. Все, що вам потрібно зробити, - це взяти в папку файли java з точкою, а потім помістити цей пакетний файл у папку, назвати його Запустити:

javac /src/.java Java / src /

Примітка. Ви можете додати скільки завгодно класів. Примітка. В останньому рядку переконайтесь, що НЕ ставити розширення ака .java, .exe, .bat, ect.

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


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