Просто, чтобы вы знали, когда вы делаете это:
var creature = {
damage: creatureDamage(3,7)
}
Функция creatureDamage выполняется на месте, с параметрами 3 и 7, и результат передается свойству урона вашего объекта.Я не думаю, что это то, что вы хотите.Вы, вероятно, хотите, чтобы эта функция выполнялась каждый раз, когда ваше существо проводит атаку, поэтому результат может отличаться.В этом случае вы должны создать свой объект следующим образом:
var creature = {
min_damage: 3,
max_damage: 7,
}
Затем во время атаки выполните следующее:
damage_given = creatureDamage(creature.min_damage , creature.max_damage);
Если вы хотите, чтобы вызываемая функция отличалась от существа ксущество, вы могли бы сделать что-то вроде этого
function basicDamage(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
}
function extendedDamage(min, max) {
//the +9 is just something silly to make it different
return Math.floor(Math.random() * (max - min)) + min + 9;
}
var creature1 = {
min_damage: 3,
max_damage: 7,
damage_function = basicDamage
}
var creature2 = {
min_damage: 3,
max_damage: 7,
damage_function = extendedDamage
}
var damage1 = creature1.damage_function(creature1.min_damage, creature1.max_damage);
var damage2 = creature2.damage_function(creature2.min_damage, creature2.max_damage);
Поскольку вы присваиваете "basic_damage" без () вашей функции Damage_, функция не выполняется при создании вашего объекта.Таким образом, свойствоmage_function указывает на вашу функцию, которую вы затем можете вызвать с вашими параметрами.Вы можете очистить этот код немного следующим образом.
function get_damage(creature)
{
var damage = creature.damage_function(creature.min_damage, creature.max_damage);
return damage;
}
var damage1 = get_damage(creature1);
var damage2 = get_damage(creature2);
Или пойти немного дальше, чтобы вы могли запустить любую функцию повреждения, если ваше существо обладает свойствами, которые функция хочет использовать
basicDamage(creature) {
return Math.floor(Math.random() * (creature.max_damage - creature.min_damage)) + creature.min_damage;
}
function extendedDamage(creature) {
//now this function use an extra property which your creature needs to have
return Math.floor(Math.random() * (creature.max_damage - creature.min_damage)) + creature.min_damage + creature.extra_damage;
}
var creature1 = {
min_damage: 3,
max_damage: 7,
damage_function = basicDamage
}
var creature2 = {
min_damage: 3,
max_damage: 7,
extra_damage: 7,
damage_function = extendedDamage
}
function get_damage(creature)
{
var damage = creature.damage_function(creature);
return damage;
}
var damage1 = get_damage(creature1);
var damage2 = get_damage(creature2);