Попробуйте что-то похожее на мой фрагмент, вам действительно нужен метод создания юнитов.Я использовал простые объекты, но если вы хотите вернуть casualties
, скажем, вам нужно будет вернуть массив humanoids
для каждого основного объекта и splice
их в бою на основе входящего урона.Полегче, вы увидите, как сражаются ваши армии!
Логика, которую я преследовал:
Мне нужна армия!
1.1.Чтобы создать армию, сначала мне нужно несколько юнитов, поэтому я строю createHumanoid
(должен был переименовать это в createArmy)
1.2.createHumanoid
поможет установить некоторые свойства для юнитов и сколько их будет в моей армии.
Создать массив armies
, где я буду создавать свои армии, используя createHumanoid
Мне нужно было знать, насколько сильна армия, поэтому я строю getArmyPower
, который возвращает name
и power
армии, это будет использовано в 4.2. .
Битва начинается!(FavoritesArmy = 'люди')
4.1.Метод fight
создается и принимает два параметра: первый - armies
, второй - favoriteArmy
4.2.Используя метод .map , я применяю getArmyPower
к каждой из моих армий (элементов массива), чтобы узнать их силу
4.3.Затем я использую .sort , чтобы отсортировать их по убыванию army.power
4.4.let victorious = armies[0];
достанет мне первый элемент из отсортированного массива.Тот, кто обладает высшей силой.Или вы можете использовать destruuring и записать его как let [victorious] = armies;
(который представляет первый элемент из массива)
4.5.Я сравниваю victorious.name
с favoriteArmy
, чтобы проверить, выиграла или потеряла интересующая меня армия.
/**
* A function to create units
*/
const createHumanoid = (race, howMany, stats) => {
return {
name: race,
armySize: howMany,
unitStats: stats
}
};
/**
* Register the armies into battle
*/
let armies = [
createHumanoid('humans', 12, {
health: 10,
attack: 12
}),
createHumanoid('zombies', 5, {
health: 30,
attack: 12
}),
]
/**
* Get the max power of each army - you can adjust the algorithm
*/
const getArmyPower = (army) => {
return {
name: army.name,
power: +army.armySize * (+army.unitStats.health + +army.unitStats.attack)
}
}
/**
* Let them fight and see what your favorite army did in the battle
*/
function fight(armies, favoriteArmy) {
armies = armies
.map(army => getArmyPower(army))
.sort((a, b) => b.power - a.power);
let victorious = armies[0];
if (victorious.name.toLowerCase() === favoriteArmy.toLowerCase()) {
document.write('Live to see another day.');
} else {
document.write('The zombies are taking over!');
}
}
fight(armies, 'humans');