2016-06-21 11 views
0

私は自分自身をcRPGゲームで使用するダイアログ用の小さなC#ライブラリにしています。XMLファイルの文字列フィールドに格納されたコードを実行する

Dialogueオブジェクトとそのフィールド(DialogueNodeやDialogueOptionオブジェクトなど)は、できるだけシンプルにすることを目指してXMLファイルに基づいて作成されています。ライブラリ内に含まれているリストやオブジェクトの型を除くフィールドは、最高でも必要なときに外部の手段で取得および解析される文字列識別子です。

基本的なコンソールベースのアプリケーションインタプリタとダイアログを作成するための基本的なコンソールインタプリタとWPFエディタを基本的な機能として実装しました。世界で最も快適なもの。 (最後の2つは、おそらく表示/作成するものを実装することを除いて、できるだけライブラリから独立していることを意図しています)

問題が発生しました私は私の試験の後の時間があるときに別の質問でカバーします)。

私の経験の浅い「ノービッシュ」の考えを与えた後、私はいくつかの基本的な述語を自分のノードやオプションに格納したいと思っています。 、ノード/オプションを表示するか、それともそのままにするか(正直なものに干渉しているかどうか)。例えば、プレイヤーキャラクターがアイテムXをインベントリーに持つ場合、またはプレーヤーが属性の特定の最小値を持つ場合にノードが表示される場合、オプションが表示されます。

実装の私の考えは今のところそのようなものです: :

  1. は、このようなインタプリタによって実行時に実行されるだろうブールメソッドを持つオブジェクト
  2. でフィールドPredicateScriptを持ちます
     
        public bool DisplayPredicate(string predicateCode) 
        { 
         bool result = FunctionExecutingCSharpCode(predicateCode); 
    
         return result; 
        } 
    

    コンパイルに関するいくつかの話題はとてもかわいいですが、私が欲しいものであるかどうかは分かりません。アプリケーションのパフォーマンスにどのような影響があるかわかりません数秒ごとに再コンパイルされるのであれば、通訳(通訳者かゲーム自体のどちらか)が...

    私がやっていることのコードは貼っていません。これは(私はコードが書かれていないので、私はそれがうまくいくとは思っていません)、それは私がやっていることを説明した以外の関連性はないと思うライブラリの構造です。 ^^

    ありがとうございました。 ^^

+0

[こちら](http://stackoverflow.com/a/14671145/4558029) – lokusking

+0

[Roslyn](https://github.com/dotnet/roslyn)をご覧ください。そう言いましたが、私はこのルートを踏みにじることに注意します。私はあなたのデザインを再評価するよう促します。あなたがやろうとしていることを達成するためのより簡単な方法があると確信しています。 –

+0

@TheBeardedLlama私の考えは、対話のデザイナーが、述語のビットをWPFのエディタのテキストボックスに入れて、それを特定のオブジェクトのフィールドに入れることでした。他のアイデア、私はどのように私のダイアログでそのような条件を実装するかもしれませんか? – Schwalbe

答えて

0

標準の.NETフレームワークを考えると、実行されるコードを提供できるC#の "インタプリタ"はありません。 C#コードを動的に作成し、オンザフライでメモリ内アセンブリにコンパイルして、.NETコンパイラサービスを使用して使用できます。

この例は、http://www.codeproject.com/Tips/715891/Compiling-Csharp-Code-at-Runtimeです。

+0

ロザリンはどうですか? –

+0

Roslynはコンパイラプラットフォームです。私が言ったように、あなたは既存の.NETフレームワーク標準手段を使って同じことを達成することができます。しかし、どちらも "内部のC#インタープリタ"と同じものではありません。 –

+0

実際には(サービスとしてのコンパイラはお気に入りのようです)、それをオンザフライでコンパイルするために利用することができます。したがって、通訳者の出現を与えます –

関連する問題