WarriorJS Docs
  • Παίκτης
  • Δημιουργός
  • Κοινότητα
  • Ελληνικά
    • English
    • العربية
    • Català
    • Čeština
    • Deutsch
    • Español
    • Français
    • Italiano
    • Polskie
    • Русский
    • Српски језик (Ћирилица)
    • Svenska
    • Türkçe
    • 中文
    • 繁體中文
    • Βοηθήστε στη Μετάφραση
  • GitHub

›Οδηγός

Οδηγός

  • Εισαγωγή
  • Δημιούργησε τον Πύργο σου
  • Προσθήκη Επιπέδων
  • Καθορισμός Ικανοτήτων
  • Ορισμός Μονάδων
  • Επανασχεδιασμός
  • Έλεγχος
  • Δημοσίευση

Δημιουργία API

  • Χώρος API
  • API Μονάδας
Translate

Καθορισμός Ικανοτήτων

Μια ικανότητα είναι μια λειτουργία της Javascript που λαμβάνει σαν μοναδική παράμετρο τη μονάδα που έχει την ικανότητα και επιστρέφει ένα αντικείμενο Javascript:

function walk(unit) {
  return {
    // Ability definition.
  };
}

Η ικανότητα περπατήματος είναι μία δράση, άρα πάμε να το δηλώσουμε:

function walk(unit) {
  return {
    action: true,
  };
}

Στη συνέχεια, πρέπει να γράψουμε μια περιγραφή για την ικανότητα ώστε να γνωρίζει ο παίκτης τη λειτουργία της:

function walk(unit) {
  return {
    action: true,
    description: 'Move one space in the given direction (forward by default).',
  };
}

Και τέλος, πρέπει να γράψουμε τη λογική για τη δυνατότητα στη συνάρτηση perform. Εδώ, μπορούμε να χρησιμοποιήσουμε οποιαδήποτε από τις μεθόδους που βρίσκονται στο API Δημιουργίας Μονάδων. Πάμε να το κάνουμε:

function walk(unit) {
  return {
    action: true,
    description: 'Move one space in the given direction (forward by default).',
    perform(direction = 'forward') {
      const space = unit.getSpaceAt(direction);
      if (space.isEmpty()) {
        unit.move(direction);
        unit.log(`walks ${direction}`);
      } else {
        unit.log(`walks ${direction} and bumps into ${space}`);
      }
    },
  };
}

Οι ικανότητες προστίθενται στις μονάδες κάτω από ένα κλειδί στο αντικείμενο abilities. Ας προσθέσουμε την ικανότητα περπατήματος στον Πολεμιστή κάτω από το κλειδί walk (γιατί θέλουμε τον παίκτη να το εφαρμόσει, καλώντας warrior.walk()):

const Level1 = {
  description:
    "You've entered the ancient castle of Eastwatch to escape from a blizzard. But it's deadly cold inside too.",
  tip:
    "Call `warrior.walk()` to walk forward in the Player's `playTurn` method.",
  timeBonus: 15,
  aceScore: 10,
  floor: {
    size: {
      width: 8,
      height: 1,
    },
    stairs: {
      x: 7,
      y: 0,
    },
    warrior: {
      character: '@',
      maxHealth: 20,
      position: {
        x: 0,
        y: 0,
        facing: 'east',
      },
      abilities: {
        walk: walk,
      },
    },
  },
};

Για το δεύτερο επίπεδο, πρέπει να προσθέσουμε ακόμα δύο ικανότητες: επίθεση και αίσθηση.

Αρχικά, ας ορίσουμε την ικανότητα επίθεσης:

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

Στη συνέχεια, ας ορίσουμε την ικανότητα αίσθησης. Σε αντίθεση με την επίθεση, η αίσθηση είναι μία έννοια; επομένως μπορούμε να παραλείψουμε το κλειδί action:

function feel(unit) {
  return {
    description:
      'Return the adjacent space in the given direction (forward by default).',
    perform(direction = 'forward') {
      return unit.getSensedSpaceAt(direction);
    },
  };
}

ΣΗΜΑΝΤΙΚΟ: Όταν επιστρέφεις έναν ή πολλαπλούς χώρους από τις αισθήσεις, χρησιμοποίησε unit.getSensedSpaceAt() αντί για unit.getSpaceAt(). Η πρώτη επιστέφει έναν χώρο που αποκαλύπτει μόνο το API Χώρου Παίκτη, ενώ η δεύτερη αποκαλύπτει το API Χώρου Δημιουργού και προορίζεται για εσωτερική χρήση, όπως στην ικανότητα επίθεσης προηγουμένως.

Τέλος, ας τις προσθέσουμε στον Πολεμιστή του δεύτερου επιπέδου:

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,
      },
    },
  },
};

Δεν προσθέτουμε την ικανότητα περπατήματος στο δεύτερο επίπεδο γιατί ο Πολεμιστής το έχει ήδη μάθει στο πρώτο επίπεδο.

Όλα μια χαρά, αλλά ο Πολεμιστής δεν κρατά το σπαθί από Βαλυριανό ατσάλι για το τίποτα. Ας προσθέσουμε έναν εχθρό για να πολεμήσει μαζί του!

← Προσθήκη ΕπιπέδωνΟρισμός Μονάδων →
WarriorJS Docs
Docs
PlayerMaker
Community
SpectrumTwitterFollow WarriorJS on Twitter
More
DonateGitHubStar