Добро пожаловать на полигон!

Командир, в ваше распоряжение поступает танк и экипаж, готовый к бою.

Скачайте и распакуйте пакет для управления танком. Откройте файл tank.html в вашем любимом браузере (например, Chrome или Firefox).

Впишите свой позывной, выберите секретный пароль и принимайте управление!

Перед вами поле боя

У каждого объекта на полигоне есть координаты, которые определяются парой “xy”: [100, 50].

Движение и поворот башни

Танк может двигаться в определенном напралении "move-xy": [0, -1].
Башня танка развернута в направлении "gun-xy": [1, 1]

Откройте файл tank.js и отдайте танку команду двигаться на север и повернуть башню на юго-восток:

function commander() {
   return function strategy(world) {
       return {
           "move-xy": [0, -1],   // двигаться на север
           "gun-xy": [1, 1]      // развернуть башню на юго-восток
       };
   }
}

Чтобы прекратить движение, передайте в "move-xy" значение [0, 0]. Попробуйте поэкспериментировать с другими значениями для "move-xy" и "gun-xy" из примеров на картинке выше.

Исследуем окружающую среду

Узнаем ширину и высоту полигона, заглянув в world.size:

function commander() {
   return function strategy(world) {
       var width  = world.size[0];
       var height = world.size[1];
       console.log("Размер полигона: " + width + "x" + height);
   }
}

Чтобы увидеть вывод на консоль, откройте в браузере инструменты разработчика: F12 или в меню Инструменты > Инструменты Разработчика (для Chrome) и Разработка > Инструменты разработки (для Firefox) выберите вкладку Console

Распечатаем обстановку вокруг нас:

function commander() {
   return function strategy(world) {
       for (var i = 0; i < world.objects.length; i++) {
           var o = world.objects[i];
           console.log(o)
       }
   }
}

Найдем наш танк на поле боя:

function commander() {
   return function strategy(world) {
       var me = findMe(world)
       console.log("Наш танк: ", me)
   };

   function findMe(world) {
       for (var i = 0; i < world.objects.length; i++) {
           var o = world.objects[i];
           if (o.type == "player" && o.user == "Сержант Билко")  // <-- замените на свой позывной
               return o;
       }
   }
}

Найдем первого попавшегося врага:

function commander() {
   return function strategy(world) {
       var enemy = findEnemy(world);
       console.log("Первый попавшийся враг: ", enemy);
   };

   function findEnemy(world) {
       for (var i = 0; i < world.objects.length; i++) {
           var o = world.objects[i];
           if (o.type == "player" && o.user != "Сержант Билко") // <-- замените на свой позывной
               return o;
       }
   }
}

А теперь посчитаем направление башни, прицелимся и выстрелим в ближайшего врага

“gun-xy”: [vx - x, vy - y]

function commander() {
   var user = "Сержант Билко";  // <-- замените на свой позывной

   return function strategy(world) {
       var me = findMe(world);
       var enemy = findEnemy(world);

       if (me != undefined && enemy != undefined) {
           var gunXy = [
               enemy.xy[0] - me.xy[0],
               enemy.xy[1] - me.xy[1]];

           return {
               "gun-xy": gunXy,
               "fire": true};
       }
   };

   function findMe(world) {
       for (var i = 0; i < world.objects.length; i++) {
           var o = world.objects[i];
           if (o.type == "player" && o.user == user)
               return o;
       }
   }

   function findEnemy(world) {
       for (var i = 0; i < world.objects.length; i++) {
           var o = world.objects[i];
           if (o.type == "player" && o.user != user)
               return o;
       }
   }
}