2009-05-08 2 views
1

Я пытаюсь создать забавный «конкурс». Разработчики напишут бота, который играет какую-нибудь игру - возможно, BlackJack, и главная программа будет содержать игру и позволить ботам играть друг против друга.Как создать систему плагинов Dll для воспроизведения ботов AI друг против друга - в .Net

Я принимал участие в таких вещах раньше, но никогда не был связан с приложением «хозяин». И я не уверен, как это сделать.

я буду делать это в VB.Net

Разных людей будут писать свои собственные боты - Я предполагаю, что я хочу, чтобы требовать от них, чтобы реализовать конкретный интерфейс я определю. Они скомпилируют его в DLL и отправят это мне. Мне нужно, чтобы хост вызывал одни и те же методы в каждой из разных «ботов» DLL, чтобы продвигать игру, но у меня есть некоторые проблемы с этим.

Каков наилучший способ для этого?

ответ

3

Load the assembly с использованием API отражения. Затем перебирайте типы в этой сборке, пока не найдете тот, который наследуется от определенного базового класса, который вы определили, или интерфейса. Затем создать экземпляр этого и начать называть методы :-)

из документации образца:

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 

После того, как у вас есть тип, вы можете создать экземпляр с помощью the Activator

+0

Зачем изобретать колесо? Есть много отличных фреймворков DI, которые делают это с большим количеством дополнительной проверки ошибок, более сложными функциями и т. Д. –

+0

иногда получает много знаний от изобретательства колеса. В любом случае, он спросил, как это можно сделать, и это только один вариант. Есть также другие отличные ответы в ответ на эту тему :-) –

1

В зависимости от того, насколько вы реалистичны, вы всегда можете использовать MS Robotics Studio, который связан с Visual Studio 2008 и включает в себя симулятор. Там даже a league.

2

Посмотрите на Managed Extensibility Framework. Это позволит вам легко создать интерфейс (или даже базовые классы), и они могут просто добавить атрибут Export для их реализации. Вы получите все открытия и инъекции бесплатно.

+0

Это на данный момент лучший беспорядок беспорядка :) Вся расширяемость должна обрабатываться менеджером, который знает, как это сделать, записав meta spex. – ruslander

Смежные вопросы