Статьи

Изучение F # через Robocode: настройка и первые шаги

Обычно я делаю свою работу и развлекаюсь на языках на основе JVM, таких как Scala или иногда Clojure ; тем не менее, у меня возникает это ноющее чувство, что я что-то упускаю, если не время от времени смотрю и на мир .NET .

C # скучно похож на Java, поэтому давайте попробуем F # для разнообразия.

Недавно я заметил, что Robocode теперь также поддерживает .NET (через jni4net ). Ура! Давайте проверим это!

Сначала загрузите Windows. Далее: установка вещей. Тьфу.

Поскольку нет Visual F # Express (что думает Microsoft? Разве они не будут продвигать F # больше?), Мне придется установить «оболочку Visual Studio (Integrated)» , а затем и сам F # .

Хорошо, теперь я готов открыть Visual Studio и создать проект F #. Ницца.

Затем я должен установить сам Robocode и плагин .NET (оба отсюда ): сначала вызовите установочный jar-файл Robocode, затем установите установочный jar robocode.dotnet поверх созданного каталога Robocode. Кстати, я свободно следую инструкциям в удивительном Robocode Wiki для этих шагов.

В мастере «Новый проект» Visual Studio я выбираю «F # Library» , так как мы хотим создать библиотеку классов, а не приложение. Я называю свой проект «SharpyTheFirst» (да, хорошо). Up приходит редактор. Но я не имею никакой ссылки на Robocode, поэтому давайте создадим его.

Снова из вики : «Вам нужно добавить ссылку на файл robocode.dll, расположенный в папке \ libs вашей домашней папки для Robocode». Хорошо, давайте сделаем именно это.

Кроме того, давайте изменим имя сборки прямо сейчас, чтобы соответствовать соглашениям Robocode: щелкните правой кнопкой мыши проект, затем в разделе «Свойства», «Приложение» установите имя сборки (я установил его как johofer.SharpyTheFirst_1.0).

Мы наконец готовы к некоторому взлому .

Я создам пространство имен johofer, поскольку принято использовать свой ник для пространств имен роботов Robocode, открыть пространство имен Robocode для моего прочтения и создать класс, унаследованный от Robocode.Robot, потому что так работают роботы Robocode:

#light
namespace johofer

open Robocode

type SharpyTheFirst() =
    inherit Robot()

Это все еще отображает ошибку, потому что Робот, кажется, зависит от System.Drawing, поэтому давайте добавим System.Drawing к зависимостям.

Далее я должен выяснить, как переопределить метод в F # (вещи, которые вам обычно не нужны в функциональных языках). Кажется, для этого мне нужно ключевое слово override и «самоидентификатор». Я назову это самоидентификатором. Затем мне нужно перевести инициализацию робота C #, основной цикл и обработку событий в синтаксис F #. Вы можете удивиться моей первой попытке здесь:

#light
namespace johofer

open Robocode

type SharpyTheFirst() =
    inherit Robot()

    override this.Run() =
        this.Initialize()
        this.MainLoop()

    member private this.Initialize() =
        this.TurnLeft (this.Heading - 90.0)
        this.TurnGunRight 90.0 
       
    member private this.MainLoop() =
        while true do
            this.ExecuteSingleStep()

    member private this.ExecuteSingleStep() =
            this.Ahead 5000.0
            this.TurnRight 90.0
    
    override this.OnScannedRobot e =
        this.Fire 1.0
 

Теперь, когда у нас есть робот с чрезвычайно простой функциональностью, давайте выясним, работает ли он … вообще … — быстро соберите его в Visual Studio, а затем, наконец, запустите Robocode!

Alrighty. В  вики сказано, что мне нужно добавить путь к моей новой сборке в Robocode IDE в меню «Параметры», «Настройки», «Параметры разработки».

Теперь я могу начать битву. Johofer доступен под пакетами? Да, это! Woot!

Давайте поссоримся: johofer.SharpyTheFirst vs sample.Crazy! — И… SharpyTheFirst побеждает! Ура!

Итак, резюмируем:

  • Установлено F #: Проверить.
  • Установлен Robocode: Проверьте.
  • Научился делать уродливые вещи OO / наследования в F #: Проверка.
  • Реализован базовый робот: проверка.
  • Выиграл бой: проверь.

Это все на данный момент. Я надеюсь, что вы попробуете это!