2015-05-08 2 views
0

Я развиваю игру. Оружие может быть экипировано вашим персонажем. Различное оружие имеет разное количество урона и кости с критическим ударом. В настоящее время я работаю, чтобы программа загружала необходимое количество кубиков на основе вашего снаряженного оружия.Игра в кости - нужно бросить больше кубиков по обстоятельствам

Однако программа только бросает одну критическую кубик, несмотря на то, что экипированное оружие содержит два критических рулона.

var WepEquipped = { "name": "Broken Sword", "attack_dice": "2", "critical_dice": "1", "min_base_dmg": "2", "max_base_dmg": "12", "max_total_dmg": "24", "weapon_type": "Slash" }; 

function Attack(rolls) { 
var total = 0; 
var dice = []; 

for (var i = 1; i <= rolls; i++) { 
    var d6 = Math.floor((Math.random() * 6) + 1); 
    $("#dice_container").append("<div class='die_roll'><p class='atk-roll'>" + d6 + "</p></div>"); 
    dice.push(d6); 
    total += d6; 
} 

// Needs to be able to roll for multiple critical dice 
if ($.grep(dice, function (elem) { 
    return elem === dice[0]; 
    }).length == rolls) { 
     var d12 = Math.floor((Math.random() * 12) + 1); 
     total += d12; 
     $("#dice_container").append("<div class='die_roll'><p id='crit-roll'>" + d12 + "</p></div>"); 
    } 
    $("#attack").html("<div>You attack for " + total + "</div>"); 
}; 

$('#attack_button').off('click').on('click', function(){ 
    $('.die_roll').hide(); 
    Attack(WepEquipped.attack_dice); 
    // Attack(WepEquipped.attack_dice); 
}); 

Я могу объяснить гораздо больше, но я надеюсь, что этого достаточно, чтобы понять, что я прошу. Что-то здесь должно измениться, но я не могу понять, что:

// Needs to be able to roll for multiple critical dice 
if ($.grep(dice, function (elem) { 
return elem === dice[0]; 
}).length == rolls) { 
    var d12 = Math.floor((Math.random() * 12) + 1); 
    total += d12; 
    $("#dice_container").append("<div class='die_roll'><p id='crit-roll'>" + d12 + "</p></div>"); 
} 
$("#attack").html("<div>You attack for " + total + "</div>"); 
}; 
+0

Вам не нужно зацикливать число рулонов, одно выражение может вернуть допустимое значение для * n * dices. (Он не отвечает на ваш вопрос.) – usr2564301

+0

Я чувствую, что вы должны делать это по-другому. Я думаю, что часть grep проблематична; Я не уверен в том, как вы это делаете. Почему вы сравниваете с первой смертью только в этом? –

+1

@YannChabot Честно говоря, я не уверен. Это мой первый раз, используя Javascript в таких деталях. У меня была некоторая помощь, чтобы зайти так далеко, и это работает ... У меня не было никаких оснований менять его. Любая помощь приветствуется. – user2766423

ответ

1

ваш Grep возвращает количество элементов в кости массива, который равен ваш первый рулон и, если длина этого массива равно числу роликов, которые были заставил вас бросить критические кости один раз.

if ($.grep(dice, function (elem) { 
    return elem === dice[0]; 
    }).length == rolls) { 
     var d12 = Math.floor((Math.random() * 12) + 1); 
     total += d12; 
     $("#dice_container").append("<div class='die_roll'><p id='crit-roll'>" + d12 + "</p></div>"); 
    } 
    $("#attack").html("<div>You attack for " + total + "</div>"); 
}; 

Если вы пытаетесь выполнить рулон столько раз, сколько возвращает grep, вам нужно что-то подобное.

var crits = $.grep(dice, function (elem) {return elem === dice[0];}); 
if(crits.length == rolls){ 
    for(var x=0;x<crits.length;x++){ 
    var d12 = Math.floor((Math.random() * 12) + 1); 
    total += d12; 
    $("#dice_container").append("<div class='die_roll'><p id='crit-roll'>" + d12 + "</p></div>"); 
    } 
} 

Извините за двойной пост, был на заброшенном счете.

+0

Моя мысль заключалась в том, что я должен был хранить количество критических кубиков в переменной где-то. Я пытаюсь бросить столько критических кубиков, сколько позволяет «оружие». Это число будет между 1-3 критами, поэтому я не уверен, что важно, сколько чисел в grep, это было именно то, как я придумал, чтобы проверить, был ли в оригинальном рулоне все соответствующие кости. – user2766423

+0

Затем передайте количество критических кубиков, необходимое для прокатки рядом с играемыми кубиками. Атака (WepEquipped.attack_dice, WebEquipped.critical_dice); Функция Атака (rolls, critRolls) { Затем цикл повторяется много раз вместо crits.length или добавляет еще один цикл внутри цикла, который я предоставлял с использованием critRolls в качестве счетной верхней границы. – serverSentinel

+0

Ничего себе, это конечно делает трюк. Спасибо, что показали мне это! – user2766423

Смежные вопросы