Ορισμός Μονάδων
Μία μονάδα είναι ένα αντικείμενο 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`);
}
},
};
}
Και να την προσθέσουμε στον Λευκό Πεζοπόρο. Επίσης ας προσθέσουμε την ίδια ικανότητα αίσθησης που είχαμε ήδη ορίσει:
const WhiteWalker = {
name: 'White Walker',
character: 'w',
maxHealth: 12,
abilities: {
attack: iceCrystalSwordAttack,
feel: feel,
},
};
Τέλος, πρέπει να ορίσουμε την ΤΝ του Λευκού Πεζοπόρου. Θα είναι μία στοιχειώδης ΤΝ: ο Λευκός Πεζοπόρος θα ξεκινήσει τη σειρά του, με την αίσθηση προς κάθε κατεύθυνση ψάχνοντας για έναν εχθρό (τον Πολεμιστή). Εάν τον βρει σε οποιαδήποτε κατεύθυνση, θα επιτεθεί σε αυτή την κατεύθυνση. Ας γράψουμε αυτή τη λογική στη συνάρτηση 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);
}
},
};
Δεν γράψαμε την ΤΝ για τον Πολεμιστή γιατί εφαρμόζεται από τον παίκτη κατά τη διάρκεια του παιχνιδιού.
Τώρα πρέπει να προσθέσουμε τον Λευκό Πεζοπόρο στο δεύτερο επίπεδο. Μονάδες διαφορετικές από τον Πολεμιστή προστίθενται στον πίνακα του ορόφου units
:
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',
},
},
],
},
};
Εδώ, χρησιμοποιήσαμε διάφορες ιδιότητες για να συνδυάσουμε τη μονάδα με τη θέση της στον όροφο.
Συγχαρητήρια! Δημιούργησες τον πρώτο σου πύργο. Σε αυτό το σημείο μπορείς να παίξεις κανονικά αλλά καλό θα ήταν να κάνεις έναν έλεγχο.