Skip to content

IshIvan/tanks-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

67 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tanks api

Платформа для ботов-танчиков в одноименной игре.

Запуск

Все стандартно:

    npm i
    npm start

Основы

Каждому участнику необходимо создать свой класс, реализующий логику работы бота. Для этого необходимо занаследоваться от Bot, как показано ниже:

export class ExampleBot extends Bot {
    constructor() {
        super();
    }

    doStep() {
      ...
    }
}

В методе doStep() необходимо описать поведение бота на текущий ход.

Пример бота

Желательная директория для ваших ботов

Важно:

  • Бот не должен вмешиваться в работу других ботов.
  • Бот не должен переопределять какие-либо другие методы или свойства.
  • Бот не должен обращаться к api-config.js
  • Бот может создавать свои методы и свойства.
  • Результатом doStep() будет являться любой ход отличный от ACTIONS.nothing
  • doStep() ничего не возвращает, следовательно, можно определить любое количество действий подряд, но выполнится только последнее.

Api

Методы передвижения

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

    up()
    down()
    right()
    left()

Если вы не хотите ничего делать в данный ход, то:

    sleep()

Однако, даже если вы не вызовете данный метод явно, он все равно будет вызван, в случае если вы не сделали ход.

Узнать о возможности перемещения в любую из сторон:

    canIDoMoveAction(moveActions): boolean
    moveActions = ACTIONS.up | down | right | left

Методы ведения огня

Для того чтобы выстрелить, необходимо указать направление. В качестве направления служат ACTIONS. В случае попадания по противнику, ему присвоится STATUS.dead, так как на данный момент у каждого бота только 1 здоровье. Выстрел занимает 1 ход, следовательно, двигаться и стрелять одновременно не получится. Снаряд быстрее игрока в config.multipleFactorFireSpeed раз.

    fire(vector)

Получить все выстрелы можно методом:

    get fires(): Fire[]

    class Fire {
        position: {x: number, y: number},
        vector: moveActions
    }

Получить объект красной зоны можно, где counter - количество ходов до удара:

    get strike(): AirStrikeModel | null
    class AirStrikeModel {
        leftAngle: {x: number, y: number},
        rightAngle: {x: number, y: number},
        counter: number
    }

Методы ориентирования

Данные методы не будут засчитаны как ход, однакое не следует ими злоупотреблять.

Узнать свое положение:

    myPosition: {x: number, y: number}

Узнать местоположение всех STATUS.live противников:

    enemies: [{x: number, y: number}]

Получить всю карту на текущий ход:

    gameMap: Array<Array<cellType>>;
    cellType = CELL_TYPES.ground | barricade | player

Узнать размер карты:

    gameMapSize: [columnNumber: number, rowNumber: number]

Действия

Только данные методы присваивают признак действия, использовать другие методы можно в неограниченном(разумном) количестве.

    up()
    down()
    right()
    left()
    fire(vector)

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published