WarriorJS Docs
  • Игрок
  • Разработчик
  • Сообщество
  • Русский
    • English
    • العربية
    • Català
    • Čeština
    • Deutsch
    • Ελληνικά
    • Español
    • Français
    • Italiano
    • Polskie
    • Српски језик (Ћирилица)
    • Svenska
    • Türkçe
    • 中文
    • 繁體中文
    • Помочь с переводом
  • GitHub

›Руководство

Руководство

  • Введение
  • Создание Своей Башни
  • Добавление Уровней
  • Добавление Способностей
  • Добавление Существ
  • Рефакторинг
  • Testing
  • Публикация Башни

API разработчика

  • API Областей
  • Unit API
Translate

Добавление Существ

Существо это Javascript объект:

const WhiteWalker = {
  // Unit definition.
};

Давайте начнём с того, что добавим существу имя:

const WhiteWalker = {
  name: 'White Walker',
};

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

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

const WhiteWalker = {
  name: 'White Walker',
  character: 'w',
  maxHealth: 12,
};

Давайте определим новую способность для атаки:

function iceCrystalSwordAttack(unit) {
  return {
    action: true,
    description:
      'Attack a unit in the given direction (forward by default) with your ice blade, dealing 3 HP of damage.',
    perform(direction = 'forward') {
      const receiver = unit.getSpaceAt(direction).getUnit();
      if (receiver) {
        unit.log(`attacks ${direction} and hits ${receiver}`);
        unit.damage(receiver, 3);
      } else {
        unit.log(`attacks ${direction} and hits nothing`);
      }
    },
  };
}

И добавим её "Белому Ходоку" (White Walker). Давайте, также добавим аналогичную способность ощущать, которую мы уже определили:

const WhiteWalker = {
  name: 'White Walker',
  character: 'w',
  maxHealth: 12,
  abilities: {
    attack: iceCrystalSwordAttack,
    feel: feel,
  },
};

Наконец, мы должны определить AI нашего White Walker. Это будет весьма примитивный AI: Белый Ходок начнёт свой ход, если почувствует в любом из направлений присутствие врага (Воина). Если он найдёт Воина в каком-либо из направлений, он атакует в этом направлении. Давайте опишем логику в методе playTurn:

const WhiteWalker = {
  name: 'White Walker',
  character: 'w',
  maxHealth: 12,
  abilities: {
    attack: iceCrystalSwordAttack,
    feel: feel,
  },
  playTurn(whiteWalker) {
    const enemyDirection = ['forward', 'right', 'backward', 'left'].find(
      direction => {
        const unit = whiteWalker.feel(direction).getUnit();
        return unit && unit.isEnemy();
      },
    );
    if (enemyDirection) {
      whiteWalker.attack(enemyDirection);
    }
  },
};

Мы, так же не будем описывать AI для Воина, предоставив эту задачу игроку во время игрового процесса.

Теперь нам нужно добавить Белого Ходока на второй уровень. Существа, отличные от Воина, добавляются массивом в качестве значения свойства units объекта floor, который в свою очередь, так же является свойством:

const Level2 = {
  description:
    'The cold became more intense. In the distance, you see a pair of deep and blue eyes, a blue that burns like ice.',
  tip:
    "Use `warrior.feel().isEmpty()` to see if there's anything in front of you, and `warrior.attack()` to fight it. Remember, you can only do one action per turn.",
  clue:
    'Add an if/else condition using `warrior.feel().isEmpty()` to decide whether to attack or walk.',
  timeBonus: 20,
  aceScore: 26,
  floor: {
    size: {
      width: 8,
      height: 1,
    },
    stairs: {
      x: 7,
      y: 0,
    },
    warrior: {
      character: '@',
      maxHealth: 20,
      position: {
        x: 0,
        y: 0,
        facing: 'east',
      },
      abilities: {
        attack: valyrianSteelSwordAttack,
        feel: feel,
      },
    },
    units: [
      {
        ...WhiteWalker,
        position: {
          x: 4,
          y: 0,
          facing: 'west',
        },
      },
    ],
  },
};

Здесь мы использовали spread оператор для вставки существа на своё место в объекте floor.

Поздравляем! Вы создали свою первую Башню. На данный момент Башня полностью готова к игре, но, как мы увидим далее, её код можно улучшить.

← Добавление СпособностейРефакторинг →
WarriorJS Docs
Docs
PlayerMaker
Community
SpectrumTwitterFollow WarriorJS on Twitter
More
DonateGitHubStar