2016-06-21 12 views
0

Also mache ich mir eine kleine C# -Bibliothek für Dialoge, die in einem cRPG-Spiel verwendet werden.Ausführen des im String-Feld der XML-Datei gespeicherten Codes

Die Idee ist, dass das Dialogue-Objekt und seine Felder (wie DialogueNode und DialogueOption-Objekte) basierend auf einer XML-Datei erstellt werden, die ich so einfach wie möglich machen möchte. Die Felder, mit Ausnahme von Listen oder Objekten von Typen, die in der Bibliothek enthalten sind, sind - bestenfalls - Zeichenfolgenidentifizierer, die bei Bedarf von außen erfasst und geparst werden.

Ich habe grundlegende Funktionalität implementiert - XML-Serialisierung, durch den Dialog laufen und beenden - sowie grundlegende, konsolenbasierte Anwendung Interpreter und einen WPF-Editor, um die Dialoge zu erstellen, denn das Schreiben des Dialogs in einfachen XML ist nicht die bequemste Sache der Welt. (die letzten beiden sind so viel unabhängig von der Bibliothek wie möglich, außer vielleicht zu implementieren, was ist zu zeigen/zu erstellen)

Alles was gesagt wird, habe ich ein Problem (eigentlich zwei, die andere Ich werde in anderer Frage berichten, wenn ich nach meinen Prüfungen Zeit habe).

Nachdem ich einige meiner unerfahrenen 'noobish' Gedanken gegeben habe, bin ich zu dem Schluss gekommen, dass ich einige Grundprädikate in meinen Knoten oder Optionen gespeichert haben möchte - sie würden später im Spiel überprüft werden , ob der Knoten/Option angezeigt wird oder lassen Sie es (oder was auch immer sich mit denen einmischen, um ehrlich zu sein). Zum Beispiel - eine Option wird angezeigt, wenn der Spielercharakter den Gegenstand X in seinem Inventar hat, oder der Knoten wird angezeigt, wenn der Spieler einen bestimmten Mindestwert eines Attributs hat.

Meine Idee so weit von der Umsetzung, wie das ist:

  1. ein Feld PredicateScript in einem Objekt Mit
  2. eine Bool Methode ist, die durch die Interpreter wie dies im laufenden Betrieb ausgeführt werden würden:

Ich habe einige Themen über kompilieren auf der Fliege sehr knappfy gelesen, aber ich bin mir nicht sicher, ob es genau das ist, was ich will - ich bin nicht sicher, wie es die Leistung der Anwendung beeinflussen würde (entweder der Interpreter oder das Spiel selbst), wenn es alle paar Sekunden neu kompiliert würde ...

Ich kleben keinen Code von dem, was ich versuche zu tun, weil entweder ich noch tun muss dies (da ich den Code nicht schreibe, bin ich mir nicht sicher, ob es funktionieren wird) oder es ist die Bibliotheksstruktur, von der ich denke, dass sie nicht relevant wäre, abgesehen von dem, was ich erklärte. ^^

Danke. ^^

+0

[This] (http://stackoverflow.com/a/14671145/4558029) könnte Ihnen helfen – lokusking

+0

Werfen Sie einen Blick auf [Roslyn] (https://github.com/dotnet/roslyn). Nachdem ich das gesagt habe, würde ich davor warnen, diesen Weg zu gehen, und ich würde dringend bitten, Ihr Design neu zu bewerten. Ich bin mir sicher, dass es einen einfacheren Weg gibt, um das zu erreichen, was Sie tun möchten. –

+0

@TheBeardedLlama Meine Idee war, dass der Designer des Dialogs das Prädikat Bit des Codes in eine WPF-Editor-Textbox legt, die es in ein Feld eines bestimmten Objekts einbezieht.Irgendeine andere Idee, wie ich solche Bedingungen in meinen Dialogen umsetzen könnte? – Schwalbe

Antwort

0

Angesichts der Standard-.NET-Framework, gibt es nicht so etwas wie eine C# "Interpreter" können Sie Code einspeisen, der ausgeführt wird. Sie könnten versuchen, C# -Code dynamisch zu erstellen, und dies kompiliert in einer In-Memory-Assembly, die Sie dann mithilfe der .NET-Compiler-Dienste verwenden können.

Und ein Beispiel dafür ist hier gegeben: http://www.codeproject.com/Tips/715891/Compiling-Csharp-Code-at-Runtime.

+0

Was ist mit Roslyn? –

+0

Roslyn ist eine Compiler-Plattform. Wie gesagt, mit den vorhandenen .NET-Framework-Standardmitteln können Sie das Gleiche erreichen. Beide sind jedoch nicht dasselbe wie ein "interner C# Interpreter". –

+0

In der Tat ist es ("Compiler als Dienst" scheint der favorite Begriff zu sein) und Sie könnten es nutzen, um im laufenden Betrieb kompilieren, so dass das Auftreten eines Interpreters –

Verwandte Themen