2009-05-08 6 views
1

Ich versuche, einen Spaß "Wettbewerb" der Art zusammenzustellen. Entwickler schreiben einen Bot, der ein Spiel spielt - vielleicht BlackJack und das Master-Programm wird das Spiel hosten und die Bots gegeneinander spielen lassen.Wie man ein DLL-Plugin-System zum Spielen von AI-Bots gegeneinander macht - In .Net

Ich habe schon früher an solchen Dingen teilgenommen, war aber nie an der 'Host'-Anwendung beteiligt. Und ich bin mir nicht sicher, wie ich das machen soll.

Ich werde dies in VB.Net tun

Verschiedene Menschen werden ihre eigenen Bots schreiben - ich vermute, ich wollen würde sie verlangen, eine bestimmte Schnittstelle zu implementieren, definiere ich werde. Sie werden es in eine DLL kompilieren und das an mich senden. Ich muss den Host die gleichen Methoden auf jeder der verschiedenen 'Bot' DLLs aufrufen, um das Gameplay voranzutreiben - aber ich habe ein paar Probleme damit.

Was ist der beste Weg, dies zu tun?

Antwort

3

Load the assembly mit der Reflexions-API. Durchlaufen Sie dann die Typen in dieser Assembly, bis Sie eine gefunden haben, die von einer von Ihnen definierten Basisklasse oder einer Schnittstelle erbt. Dann eine Instanz davon erstellen und starten Sie die Methoden aufrufen :-)

Aus der Musterdokumentation:

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 

Sobald Sie die Art haben, können Sie die Instanz erstellen mit the Activator

+0

Warum das Rad neu erfinden? Es gibt viele großartige DI-Frameworks, die dies mit vielen zusätzlichen Fehlerüberprüfungen, komplexeren Funktionen usw. tun. –

+0

manchmal gewinnt man viel Wissen, wenn man das Rad neu erfindet. Wie auch immer, er fragte, wie das gemacht werden könnte, und das ist nur eine Option. Es gibt auch andere gute Antworten als Antwort auf diesen Thread :-) –

1

Je nachdem, wie realistisch Sie sein möchten, können Sie immer die MS Robotics Studio nutzen, die in Visual Studio 2008 integriert ist und einen Simulator enthält. Es gibt sogar a league.

2

Werfen Sie einen Blick auf die Managed Extensibility Framework. Damit können Sie problemlos eine Schnittstelle (oder sogar Basisklassen) erstellen und der Implementierung einfach ein Export-Attribut hinzufügen. Sie würden die gesamte Entdeckung und Injektion kostenlos bekommen.

+0

Dies ist im Moment der beste Weg frei Clutter :) Die gesamte Erweiterbarkeit sollte von einem Manager, der weiß, wie es geht, mit Meta-Spex behandelt werden. – ruslander