2009-05-08 3 views
1

私は一種の楽しい「コンテスト」をまとめようとしています。開発者は、多少のゲームをするボットを書くだろう - ブラックジャックかもしれないし、マスタープログラムはゲームを主催して、ボット同士を互いに対してプレイさせるだろう。AIのボットをお互いに再生するためのDLLのプラグインシステムを作る方法 - .Net

私は前にこのようなことに参加しましたが、「ホスト」アプリケーションには関与しませんでした。そして、私はそれをどうやってやっていくのかは分かりません。

私は別の人が自分のボットを書き込みますVB.Net

でこれをやっているだろう - 私は定義します、特定のインターフェイスを実装するためにそれらを必要としたいと思います推測しています。彼らはそれをDLLにコンパイルし、それを私に送ります。私はホストがゲームの進行を進めるために異なる 'bot' DLLのそれぞれに同じメソッドを呼び出させる必要がありますが、それをやっていく上で問題があります。

これを行うにはどうすればよいですか?

答えて

3

Load the assemblyリフレクションAPIを使用します。次に、定義した基本クラスまたはインターフェイスから継承するものを見つけるまで、そのアセンブリの型を繰り返し処理します。そして、そのインスタンスを作成し、サンプルのドキュメントから

:-)メソッド呼び出しを開始:あなたはタイプを持っていたら、あなたはthe Activator

+0

なぜホイールを改造するのですか?余分なエラーチェック、より複雑な機能などを備えた多くの素晴らしいDIフレームワークがあります。 –

+0

時には、ホイールの再発明から多くの知識を得ることがあります。いずれにしても、彼はこれがどのように行われるかを尋ねましたが、これは一つの選択肢に過ぎません。このスレッドに返信して他の素晴らしい答えがあります:-) –

1

ああ、that idea brings back some memoriesを使用してインスタンスを作成することができます

Imports System 
Imports System.Reflection 

Class Class1 
    Public Shared Sub Main() 
     Dim SampleAssembly As [Assembly] 
     ' You must supply a valid fully qualified assembly name here.    
     SampleAssembly = [Assembly].Load("Assembly text name, Version, Culture, PublicKeyToken") 
     Dim Types As Type() = SampleAssembly.GetTypes() 
     Dim oType As Type 
     ' Display all the types contained in the specified assembly. 
     For Each oType In Types 
      Console.WriteLine(oType.Name.ToString()) 
     Next oType 
    End Sub 'LoadSample 
End Class 'Class1 

を.NETの非常に初期の時代から。私は、コードに1〜2ビットの関心が含まれていると仮定します。

1

現実的であることに応じて、MS Robotics Studioを活用してVisual Studio 2008と連携させ、シミュレータを組み込むことができます。さらにa leagueがあります。

2

Managed Extensibility Frameworkをご覧ください。これにより、インターフェイス(または基本クラス)を簡単に作成できるようになり、実装にエクスポート属性を追加するだけで済みます。あなたはすべての発見と注射を無料で受けることができます。

+0

これは現時点では最高のクラッタ無しの方法です:)すべての拡張性は、それを行う方法を知っているマネージャーによって処理される必要があります。 – ruslander

関連する問題