2015-05-08 119 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); 函數Attack(rolls,critRolls){ } 然後循環多次而不是crits.length,或者在我使用critRolls作爲計數器上邊界提供的循環中添加另一個循環。 – serverSentinel

+0

哇,那肯定會有訣竅。謝謝你給我看這個! – user2766423