Записи с меткой «робот»

SuperTracker – Super Sample Robot, .Net – версия

06.04.2010

SuperTracker – это Супер – Sample Robot от CrazyBassonist.

В его основе – робот Tracker от Mathew Nelson’а, доработанный Flemming N. Larsen.

Захватывает цель, приближается к ней, и стреляет.
(далее…)

SnippetBot – .Net-версия бота Алисдара Оуэнса

06.04.2010

SnippetBot – робот Алисдара Оуэнса (Alisdar Owens).

Этот бот состоит из множества полезных участков кода. Он не очень хороший воин (хотя неплохо справляется 1-на-1), а больше полезен для обучения программированию ботов.

Часть кода взято из Nicator и Chrisbot.

Соглашения о коде данного бота:

  • Все углы – в радианах.
  • Хранение абсолютных величин положения противников, а не относительных.
  • Очень мало кода в событиях.

(далее…)

Нанобот DustBunny 3.0

03.04.2010
.Net - версия нанобота DustBunny 3.0, который использует антигравитационный механизм движения.
// DustBunny 3.0
// Автор - Mike (--Miked0801)
// Это нанобот, использующий антигравитационное движение.
// Стреляет по ближайшей цели прямо по направлению обнаруженной цели.

using System;
using Robocode;
using Robocode.Util;

namespace RobocodeBotsDotNet
{
    public class DustBunny : AdvancedRobot
    {
        const double GunFactor = 50;

        static double _xForce;
        static double _yForce;
        static String _lastTarget;
        static double _lastDistance;

        public override void Run()
        {
            // это нужно, чтобы было удобнее стрелять по неподвижным целям
            IsAdjustGunForRobotTurn = true;

            // Сброс показаний дальномера
            _lastDistance = Double.PositiveInfinity;

            // Запустить бесконечную команду для радара.
            // Такой код позволяет сохранить много места (спасибо Dr. Loco!)
            TurnRadarRightRadians(Double.PositiveInfinity);
        }

        public override void OnScannedRobot(ScannedRobotEvent e)
        {
            // Вычисление абсолютного местоположения для процедур
            // прицеливания и антигравитационного движения,
            // и определение расстояний
            double absoluteBearing = e.BearingRadians + HeadingRadians;
            double distance = e.Distance;

            // Используем очень простую систему для имитации антигравитационных сил
            _xForce = _xForce * 0.9 - Math.Sin(absoluteBearing) / distance;
            _yForce = _yForce * 0.9 - Math.Cos(absoluteBearing) / distance;

            // Вычисление угла поворота
            // по приближении к стенам робота сильнее притягивает к центру
            SetTurnRightRadians(Utils.NormalRelativeAngle(
                Math.Atan2(_xForce + 1 / X - 1 / (BattleFieldWidth - X),
                _yForce + 1 / Y - 1 / (BattleFieldHeight - Y))
                - HeadingRadians));

            // Едем вперед
            SetAhead(Double.PositiveInfinity);

            // Перед резким поворотом сбрасываем скорость
            MaxVelocity = 420 / TurnRemaining;

            // Если пушка не нагрета и правильно нацелена,
            // то производим выстрел
            if (GunHeat == 0)
            {
                // Вычислить мощность выстрела в зависимости от текущего
                // количества энергии и расстояния до цели
                // после чего сбросить значение дистанции
                SetFireBullet(Energy * GunFactor / distance);

                _lastDistance = Double.PositiveInfinity;
            }

            // Захватить радаром ближайшие боты
            if (_lastDistance > distance)
            {
                _lastDistance = distance;
                _lastTarget = e.Name;
            }

            // а стрелять по самому близкому боту
            if (_lastTarget == e.Name)
            {
                // Сопровождать радаром цель
                if (GunHeat < 1)
                {
                    // Повернуть радар угол, доступный в пределах хода
                    SetTurnRadarLeft(RadarTurnRemaining);
                }

                // Прицелиться по текущему местоположению цели
                SetTurnGunRightRadians(
                    Utils.NormalRelativeAngle(absoluteBearing - GunHeadingRadians));
            }
        }
    }
}

Создание робота для Robocode в .NET

29.03.2010

В данной статье приводится пример создания простого робота для Robocode в .Net на языке C#.

Для разработки использовалась Visual Studio 2008. Если работать в Visual Studio 2010, то в свойствах проекта нужно будет изменить версию фреймворка .Net с 4 на 3.5.

Сначала нужно создать новый проект из шаблона «библиотека классов» (Class Library).

После этого нужно добавить ссылку на библиотеку Robocode .Net, которая, если во время установки использовать путь по умолчанию, находится в папке C:\robocode\libs. Файл называется robocode.dll.

Дальше желательно удалить пустой класс в новом проекте Class1.cs и добавить новый класс MyRobot.cs.

Ниже приведен код простого бота, который можно добавить в новый класс.

// Оригинальный код от FNL, источник:
// http://robowiki.net/wiki/Robocode/.NET/Create_a_.NET_robot_with_Visual_Studio

// Доступ к стандартной системе .Net
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

// Доступ к общей API Робокода
using Robocode;

// По соглашению, пространство имен должно называться инициалами разработчика,
// но в нашем случае используем имя всего проекта по трансляции ботов на .Net
namespace RobocodeBotsDotNet
{
    // Имя робота - MyRobot, тип робота - Robot
    class MyRobot : Robot
    {
	    // Главный метод робота, содержащий его логику
	    public override void Run()
        {
            // -- Инициализация робота --

            // Повернуть робота вертикально вверх, а
            // пушку повернуть на 90 градусов
            TurnLeft(Heading - 90);
            TurnGunRight(90);

            // Бесконечный цикл нужен для того, чтобы робот
            // выполнял свою программу до самого конца раунда
            while (true)
            {
                // -- Эти команды повторяются бесконечно --

                // Проехать 5000 пикселов вперед
                Ahead(5000);

                // Повернуть робота на 90 градусов
                TurnRight(90);

                // Наш робот будет двигаться вдоль границ поля
                // боя, повторяя две инструкции выше.
            }
        }

        // Обработчик события робота, когда робот
        // видит другого робота
        public override void OnScannedRobot(ScannedRobotEvent e)
        {
            // Сделать выстрел с мощностью пули = 1
            Fire(1);
        }
    }
}

Соглашения по именованию роботов.

В Робокоде используется соглашение по именованию роботов, согласно которому каждый робот должен принадлежать уникальному пространству имен, как инициалы или никнейм.

В таком случае возможны следующие ситуации:

  • В битве могут участвовать роботы с одинаковыми именами, только если они определены в разных пространствах имен.
  • В одном пространстве имен может быть несколько имен, и будет хорошо, если другие участники боев будут знать, кому принадлежат эти роботы.
  • Во время создания новой битвы будет легко выбрать именно вашего робота.
  • Для сохранения данных, робокоду нужно пространство имен. Использование глобальных пространств имен не допускается.

Таким образом, имена роботов обычно записывают следующим образом:

<ваши инициалы>.<имя робота>_<версия робота>

Полное имя робота, которого мы создали выше, может выглядеть следующим образом: 

RobocodeBotsDotNet.MyRobot_1.0

Запуск скомпилированного робота в Робокоде.

В настройках робокода нужно указать путь, по которому могут находиться библиотеки роботов. Для этого в меню Options -> Preferences -> Development Options нажмите кнопу Add и выберите тот путь, куда попадают скомпилированные библиотеки проекта. Это может быть папка \bin\debug или \bin\release, которая находится в папке всего проекта.

Таким образом, если в Visual Studio изменить бота и скомпилировать, то при перезапуске битвы на поле боя будет находиться уже новая версия бота.

Robocode .NET

23.03.2010

Вышла новая версия битвы роботов Robocode, которая поддерживает роботов, написанных на платформе .Net (единственно, пока нет поддержки mono).

Сделать первые шаги в создании робота поможет вступительная статья:

«Как сделать робота в Visual Studio на платформе .Net на языке c#».

Для разработки более совершенного робота лучше всего учиться у опытных разработчиков – некоторые из них выкладывают своих ботов в открытом доступе:

Почем Асимо для народа?

11.11.2009

Мучает вопрос.

Когда же наконец появятся полезные автономные роботы?

Дистанционно управляемые роботы уже проникли во многие виды человеческой деятельности. Но остается открытым вопрос, когда же наконец появятся действительно полезные автономные роботы, и чего им для этого не хватает?

Роботы смогут ориентироваться естественным образом со зрением, подобным человеческому

02.08.2009
Так выглядит устройство VisGuide изнутри. Видеосигнал передается по кабелям в легкий переносно микрокомпьютер. (Разработчик: Decisions in Motion Project (www.decisionsinmotion.org)).

Так выглядит устройство VisGuide изнутри. Видеосигнал передается по кабелям в легкий переносной микрокомпьютер. (Разработчик: Decisions in Motion Project (www.decisionsinmotion.org)).

Роботизированная система зрения, повторяющая ключевые функции человеческого мозга, обещает позволить роботам маневрировать быстро и безопасно в произвольном окружении, а также окажется полезной для людей с нарушениями зрения.

(далее…)