Cómo hacer un sistema 'plugin' de Dll para jugar a los bots AI entre sí - en .Net

StackOverflow https://stackoverflow.com/questions/841662

  •  20-08-2019
  •  | 
  •  

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?

¿Fue útil?

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 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top