Wie implementiere ich ein Programmiersystem in mein Spiel, das zugänglich, leistungsstark und schnell zu programmieren ist?

15

Ich arbeite derzeit an einem weltraumbasierten Sandkastenspiel, das die Möglichkeit bietet, Ihre Systeme individuell zu programmieren. Ich möchte das so umsetzen, dass es beides ist

  1. zugänglich,
  2. mächtig (das Nötigste wäre Vollständigkeit)
  3. schnell zu codieren.

Textbasierte Sprachen erfüllen im Allgemeinen nur die beiden letztgenannten Anforderungen, und obwohl es nicht schwierig ist, eine visuelle Sprache zu entwerfen, die die ersten beiden erfüllt, ist die Programmierung visueller Sprachen schwierig, da eine umfangreiche Mausbenutzung erforderlich ist. Obwohl es einige sehr leicht zugängliche textbasierte Sprachen gibt, möchte ich, dass sich vollständige Nicht-Programmierer in die Programmierung einarbeiten können.

Dimitriye98
quelle
Es würde mich wundern, wenn Ihnen jemand ein Beispiel geben könnte. Weil ich wirklich denke, dass dies einige umfangreiche Nachforschungen erfordert (wie Menschen Logik anwenden und was nicht, psychologische Faktoren, was auch immer und all diese menschenzentrierten Dinge)
Sidar
2
Niemand erwähnte Scratch?
Russell
2
Ich werde keine enge Abstimmung vorschlagen, aber ich möchte darauf hinweisen, dass dies ziemlich einfach in die Kategorie "Wenn Sie sich ein ganzes Buch vorstellen können, das Ihre Frage beantwortet, stellen Sie zu viel" der Fragen fällt, um es nicht zu stellen aus den FAQ; Dies ist ein sehr schweres Problem, und obwohl die Leute hier Ratschläge geben können, ist dies ein Problem, das wahrscheinlich außerhalb der Grenzen einer SE-Site zu lösen ist.
Steven Stadnicki
Es ist erwähnenswert, dass die Turing-Vollständigkeit durch Conways Game of Life , Minecraft und andere solche Systeme erreicht werden kann, die nicht für die Programmierung ausgelegt sind.
Wird

Antworten:

10

Die einzige Möglichkeit, alle Funktionen zu nutzen, besteht darin, mehrere Schnittstellen zu implementieren. Zugänglich und leistungsstark sind oft zwei Enden eines Spektrums. Der einfachste Weg, dies zu tun, ist die Implementierung eines leistungsstarken Systems mit einer zusätzlichen Schnittstelle, über die Anfänger auf intuitive Weise mit dem System interagieren können.

Unter Berücksichtigung eines Systems, mit dem Anfänger visuell programmieren können, möglicherweise ähnlich wie bei den Lego Mindstorms-Programmiertools :

Bildbeschreibung hier eingeben

Wo gibt es Drag & Drop-Komponenten. Die Komponenten haben Ein- und Ausgänge. Komponenten können einfache Dinge ANDoder ORTore sein oder komplexer wie ein Test für in der Nähe befindliche Feinde.

Idealerweise sollte die visuelle Darstellung ein schriftliches Sprachskript im Hintergrund kompilieren. Dies bietet ein leistungsstarkes Tool zum Erlernen der Sprache. Wenn ein Anfänger sein Programm visuell "schreiben" kann, dann lesen Sie den Code, den es erzeugt. Es ist weitaus wahrscheinlicher, dass er ihn versteht und den erzeugten Code modifizieren kann. Schließlich in der Lage zu sein, leistungsfähigeren Code zu schreiben, als es die visuellen Werkzeuge alleine erlauben. Dies erfüllt die Anforderung, die Benutzer in die Programmierung einzubeziehen.

Das Rückgrat des Systems ist natürlich eine geschriebene Sprache. Die visuellen Tools dienen lediglich dazu, den Benutzern eine schnelle Möglichkeit zu geben, etwas Einfaches zu programmieren und Anfängern den Einstieg zu ermöglichen.

Die geschriebene Sprache ermöglicht fortgeschrittenen Benutzern, fortgeschrittene Dinge zu tun. Sie können Benutzern sogar erlauben, ihre eigenen Komponenten zu erstellen, indem Sie benutzerdefinierte Skripts erstellen. Dann können sie Komponenten, die sie in einer schnellen und einfachen Schnittstelle für eine schnelle Programmierung hergestellt haben, wiederverwenden.

Viel Glück! Klingt nach einem lustigen Projekt.

MichaelHouse
quelle
Vielen Dank für die Erklärung. Eigentlich wollte ich so etwas wie NXT-G selbst machen, aber ich weiß aus Erfahrung, wie schwierig es ist, komplizierte Programme in einer solchen Sprache zu erstellen. Ich mag die Idee, visuelle Programme in Code umzuwandeln, so dass Spieler zurückgehen und ihre Programme textuell bearbeiten können, wenn sie erfahrener sind, also werde ich das wahrscheinlich verwenden.
Dimitriye98
1
Beachten Sie, dass es einfach ist, Skriptcode aus grafischen Darstellungen zu generieren, es jedoch sehr schwierig ist, eine (aussagekräftige und lesbare) grafische Darstellung aus einem Skript zu generieren. Sie werden wahrscheinlich eine sehr eingeschränkte eigene Skriptsyntax haben.
Imi
1
Es ist unwahrscheinlich, dass Sie aus genau diesem Grund script-> visual implementieren möchten. Bleibe bei Visual-> Script.
MichaelHouse
Makroblöcke (Blöcke mit Ein- / Ausgängen und der Möglichkeit, beliebige Blöcke darin zu platzieren) können zur Bereitstellung von Hierarchie, Kapselung und Wiederverwendung verwendet werden, um die Erstellung komplexer Programme zu erleichtern. Stellen Sie nur sicher, dass Sie keine Makros in Makros platzieren können oder solche Fälle erkennen ... Ich kenne mindestens ein Programm, das solche Endlosschleifen nicht erkennt.
Exilyth
5

Vielleicht möchten Sie einen Blick auf Googles Block werfen . Sie kombinieren die visuellen Elemente mit erkennbaren Programmierbegriffen und behalten dabei ein angemessenes Maß an Barrierefreiheit bei.

Bildbeschreibung hier eingeben

Sie können sich die Maze-Demo ansehen, um sich inspirieren zu lassen. Viele meiner Freunde, die keine Programmierer waren, waren in der Lage, den größten Teil der Rätsel damit zu lösen, und erfüllten zumindest einige Ihrer Kriterien.

Quetzalcoatl
quelle
Interessante Sprache aus der Sicht der Barrierefreiheit, aber die Programmierung ist sehr langsam (ich habe es gerade versucht) ...
Pasha
@PashaS In der Tat, ich denke, das ist ein Teil des Preises, den Sie zahlen müssen, um das Beste aus beiden Welten herauszuholen.
Quetzalcoatl
4

Ich bin überrascht, dass dies noch nicht erwähnt wurde, aber MITs Scratch verwendet eine Blockschnittstelle, die schnell zu codieren ist. Sie ermöglicht es Benutzern, ihre eigenen Funktionen zu erstellen und kann für eine Sprache, die entwickelt wurde, um Kindern beizubringen, wie man es macht, überraschend komplex werden Code.

Stencyl ist ein weiteres Beispiel für eine Blockcodierung, die etwas ähnlicheres macht als das, was Sie wollen. Das Codieren mit solchen Blöcken ist wesentlich effizienter und zeitsparender als visuelle Programmierschnittstellen wie die von Lego NXT. Mit Stencyl können Benutzer entweder in Actionscript oder in Blöcken codieren.

Ich entschuldige mich für den Mangel an Bildern, ich habe noch nicht genug Ruf um Bilder zu posten.

Leinenbart
quelle
2

Die Programmiersprache BPEL verfügt über eine visuelle Darstellung und viele Werkzeuge, die damit arbeiten. Es ist eine Workflow-Sprache, keine Programmiersprache, aber absolut vollständig. Es ist ausführlich, aber sowohl für Programmierer als auch für Geschäftsleute leicht zu schreiben und leicht von visueller in textuelle Form zu übersetzen. Ich denke nicht, dass es eine gute Spielsprache wäre, aber es kann als Inspirationsquelle dienen. Und angesichts der Menge an BPEL-Engines und -Tools sollte es möglich sein, einige Ideen und / oder Code wiederzuverwenden.

BPEL-ähnliche Sprache fühlt sich nicht wie Programmieren an, sondern eher wie Routing- und Verbindungssysteme. Sie können also ein Zielsystem mit einer dazwischen liegenden Logik an ein Geschützsystem anschließen.

MartinTeeVarga
quelle
+1: Obwohl ich BPEL selbst nicht befürworten würde, ist sein Ansatz genau die Antwort, die ich gegeben hätte. Sehr reguläre Sprache, die sowohl einfach in Text als auch visuell darstellbar ist und sich mehr auf das Routing / Reagieren von Ereignissen als auf "normale" Programmierparadigmen konzentriert.
Sean Middleditch
1

Betrachten Sie diesen Ansatz:

  1. Stellen Sie sicher, dass Ihre Skriptlogik in einfachen regelbasierten Mechaniken ausgedrückt werden kann. Zum Beispiel hast du "Trigger", die während des Spiels auftreten und mit "Bedingungen" verknüpft sind, die erfüllt werden müssen, und dann werden "Aktionen" ausgeführt (die schamlos aus Starcraft 2 Editor gestohlen wurden).
  2. Stellen Sie dann eine Benutzeroberfläche zur Verfügung, in der Sie einige vordefinierte Aktionen / Bedingungen / Auslöser ziehen und ablegen können, um 90% der Anwendungsfälle zu konstruieren, die die Benutzer normalerweise ausführen möchten.
  3. Holen Sie sich jetzt eine leistungsstarke und beliebte Skript-Engine wie Lua, Python oder C #
  4. Schreiben Sie zum Schluss einige Dutzend dieser Aktionen / Bedingungen / Trigger in dieser Sprache. Stellen Sie sicher, dass der Customizing-Benutzer diese und neue Aktionen einfach kopieren, einfügen, bearbeiten und in Ihren Drag'n'Drop-Editor integrieren kann.
  5. Sie möchten wahrscheinlich in der Lage sein, Ihre Trigger, Bedingungen und Aktionen zu parametrisieren, und benötigen daher ein paar weitere Grundelemente als diese drei, z. B. "GameObject", "Position", "Number" oder "String". In der Benutzeroberfläche benötigen Sie einige Dialogfelder, um diese Parameter zuzuweisen, aber das ist noch viel weniger Arbeit, als wenn Sie ganze Skripte über Benutzeroberflächenoperationen erstellen müssten.

Das ist der schnellste Weg, den ich mir vorstellen kann, um all die Süßigkeiten ohne allzu große Schmerzen zu bekommen. Sie bekommen die Click'n'Drag Noobs sowie die Vim-Geeks an Bord. Und wenn Sie die Mechanik einfach halten (z. B. Auslöser -> Bedingung -> Aktion), müssen Sie nicht viele Jahre in die Entwicklung einer Benutzeroberfläche für einen leistungsstarken und dennoch benutzerfreundlichen grafischen Skripteditor investieren.

Einige Beispiele um zu verdeutlichen, was ich meine:

  • Auslöser könnten sein: "Game Framework Initialized", "Game loaded", "Unit created", "Unit destroyed", "Player damaged" und so weiter. Trigger haben normalerweise einige Parameter (zB Unit created ruft das erstellte GameObject ab)
  • Bedingungen sind alle booleschen Standard- und arithmischen Grundbedingungen (und / oder / nicht / gleich / größer ...) sowie einige typische Bedingungen, die Sie in Ihrem Spiel finden, wie "Einheit ist in vollem Zustand" oder "Mindestens zwei Spieler sind verbunden". Bedingungen haben normalerweise Parameter, die der Benutzer eingeben muss (über die Benutzeroberfläche)
  • Aktionen sind Skripte, die auch einige einfache Parameter annehmen können. wie "Kamera auf XXX schwenken", "Töte Einheit Y", "Spiel vorbei", "Trigger ausführen" und "Aktionen X, Y, Z ... in einer Sequenz aufrufen"
Imi
quelle
Beachten Sie, dass die Programmierung für Computer im Spiel ist, nicht für Plugins. Trotzdem danke.
Dimitriye98
Ich verstehe .. das klingt nach einem interessanten Spielansatz;). Haben Sie sich mit ähnlichen Spielen wie "Code Hero" oder "Garry's Mod" befasst, die versuchen, Codierungsfunktionen bereitzustellen, ohne das Eintauchen in das Spiel zu unterbrechen? Wie auch immer, Sie können meine grundlegenden Ratschläge trotzdem retten und das Problem in Skript- und Benutzeroberflächenteile aufteilen. Viel Glück mit deinem Spiel. :)
Imi
Nun, das Codieren wird auf In-Game-Computer-Konsolen durchgeführt, die das Eintauchen nicht zu sehr unterbrechen sollten. Obwohl Benutzer, die möchten, in der Lage sein werden, aus dem Spiel heraus zu codieren, importieren Sie den Code in ihren Speicher oder auf den Server, auf dem sie spielen.
Dimitriye98