Обычно я делаю свою работу и развлекаюсь на языках на основе 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 #: Проверка.
- Реализован базовый робот: проверка.
- Выиграл бой: проверь.
Это все на данный момент. Я надеюсь, что вы попробуете это!