Seite 1 von 1

Eigene Skriptsprache

Verfasst: 9. Mai 2008 19:49
von PeterLustig
Moin. :)

Ich möchte in mein Programm, bzw. in mein Spiel gerne eine Skriptsprache einbauen. Jedoch weiß ich nicht genau wie ich das realisieren sollte, was die besten Möglichkeiten sind. Vorweg gesagt: Das gesamte Spiel ist 2D und wird in einer GraphicsScene dargestellt.

Ich stelle mir das so vor, dass ich eigene Events, Funktionen und Standardvariablen definiere welche dann im Skript benutzt werden können. Zwei Codebeispiele wären die folgenden:

Code: Alles auswählen

on UnitAttacked:Batman:Joker {
  attackedUnit.decreaseHealth(attackerUnit.attack);
}
Wenn die Einheit mit der ID "Batman" von der Einheit mit der ID "Joker" angegriffen wird, werden die Lebenspunkte von Batman um die Angriffspunkte von Joker reduziert. Anstatt der IDs sollten auch Wildcards möglich sein.

Code: Alles auswählen

on init {
  loadGraphic("MenuHintergrundGrafik", "hintergrund.png",);
  
  createGuiElement("MenuHintergrundElement", "MenuHintergrundGrafik");
}

on GuiElement:clicked:MenuHintergrundElement {
  // Gui Element wurde angeklickt, mach irgendwas
}
Das Event on init wird beim Programmstart von meinem Hauptprogramm aufgerufen und evaluiert. In dem Event wird eine Grafik in den Speicher geladen und ein Element in der Scene wird erstellt. Wenn auf das Element geklickt wird, wird geschaut ob es ein Event dafür gibt und es wird aufgerufen.


Wie könnte ich so etwas am besten realisieren? Sollte ich einen eigenen Parser schreiben und eine eigene Sprache definieren? Sollte ich sowas wie LUA benutzen? Oder eignet sich QtScript dafür?

Ich hoffe auf konstruktive Antworten. :)

Mit freundlichen Grüßen
Peter

Verfasst: 9. Mai 2008 21:36
von upsala
Ich würde mal ein paar Versuche mit QtScript machen um ein Gefühl für die Sprache zu bekommen, falls du bereits JavaScript-Erfahrung hast, gehts ja nur noch um die Schnittstellen zwischen C++ und QtScript.

Ansonsten könntest du dir noch die Sourcen SuperTux ansehen, dort wird auch eine Scriptsprache zur Steuerung der Figuren verwendet.