Cómo hacer un sistema 'plugin' de Dll para jugar a los bots AI entre sí - en .Net
Pregunta
Estoy tratando de organizar una especie de "concurso" divertido. Los desarrolladores escribirán un bot que juegue algún juego, tal vez BlackJack y el programa maestro alojará el juego y permitirá que los bot jueguen unos contra otros.
He participado en tales cosas antes, pero nunca he estado involucrado con la aplicación 'host'. Y no estoy seguro de cómo hacerlo.
Haré esto en VB.Net
Diferentes personas escribirán sus propios bots. Supongo que me gustaría exigirles que implementen una interfaz particular que definiré. Lo compilarán en un archivo DLL y me lo enviarán. Necesito que el host llame a los mismos métodos en cada una de las diferentes DLL 'bot' para progresar en el juego, pero tengo algunos problemas para hacerlo.
¿Cuál es la mejor manera de hacer esto?
Solución
Cargue el ensamblaje utilizando la API de reflexión. Luego, repita los tipos en ese ensamblaje hasta que encuentre uno que herede de alguna clase base que haya definido o interfaz. Luego cree una instancia y comience a llamar a los métodos :-)
De la documentación de muestra:
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
Una vez que tenga el tipo, puede crear la instancia usando el Activador
Otros consejos
Eche un vistazo al Marco de extensibilidad administrada . Le permitiría crear fácilmente una interfaz (o incluso clases base), y podrían simplemente agregar un atributo Exportar a su implementación. Obtendría todo el descubrimiento y la inyección de forma gratuita.
Ah, esa idea trae algunos recuerdos de los primeros días de .NET. Supongo que el código contiene uno o dos bits de interés.
Dependiendo de cuán realista quiera ser, siempre puede aprovechar el MS Robotics Studio que se vincula con Visual Studio 2008 e incluye un simulador. Incluso hay una liga .