2017-01-05 121 views
-2

我想從2到10名玩家中隨機選擇一個贏家。每個球員都有獲勝的機會。有人有50%,有人有10%。選擇百分比隨機贏家

比方說,我們有2名球員。一個球員有20%,其他球員有80%。我如何選擇這兩者之間的勝利者?

球員是在陣列

var players = { 
    player1: { 
     chance: 20 //% 
    } 
    player2: { 
     chance: 80 //% 
    } 
} 

//Select winner from json 
+3

隨機抽取1到100之間的數字。如果是1-20,則Player1獲勝。如果是21-100,球員兩勝。另外,你定義了'player1'兩次。 – Santi

+0

桑迪剛剛說的隨機函數 – Tom

+0

請閱讀[問]。重要短語:「搜索和研究」和「解釋......阻止你自己解決它的任何困難」。 –

回答

1

(假設百分比全加起來爲100)

您首先必須訂購球員。然後從1到100的隨機數,並找出哪個球員的隨機數屬於。

例如:

// Modified json to array so we can easily loop through them 
// If you would like help turning the json to an array, I can provide code for that upon request 
var players = [ 
    { 
     chance: 20 
    }, 
    { 
     chance: 40 
    }, 
    { 
     chance: 40 
    } 
]; 

// Generate random number 
var perc = Math.random() * 100; // between 0 and 99.999~ 
// Save where we are in the percentage 
var currentPerc = 0; 

// Loop through the players and check who the random number chose 
for (var pID = 0; pID < players.length; pID++) { 

    // Check if the current player we are looking at has won 
    if (perc < (players[pID].chance + currentPerc)) { 
     alert("PLAYER " + (pID + 1) + " HAS WON."); 
     // Do player winning code here 
     break; // break out of the loop, we're done 
    } else { 
     currentPerc += players[pID].chance; 
    } 
} 

在上述例子中,假設所述隨機數選擇45(0.45 * 100自的Math.random給我們0.0至0.99〜)。 這意味着玩家2贏

0 to 20 = Player 1 wins 
21 to 60 = Player 2 wins 
61 to 100 = Player 3 wins 

使用45的隨機數選擇的第一次迭代,我們檢查,如果玩家1贏得。他沒有,所以我們將玩家1的比例添加到「當前比例」。

然後在第二次迭代中,我們檢查玩家2.由於45 <(20 + 40),玩家2贏得了選擇。我們提醒他已經贏得並將爲此做一些代碼。

-1

如果(randomNum < = player1.chance)然後player2.wins()否則player1.wins()其中randomNum是1-100

+0

這對超過2名球員不起作用 – iagowp

+0

請在給出答案前仔細閱讀問題。他們要求一個可以處理2到10名球員的解決方案。 –

+0

哦,我嘗試了。我浪費了10分鐘的時間嘗試在正確的代碼中進行編輯,但該網站不斷拒絕我的代碼,因爲它表示我的代碼是未被格式化爲代碼的代碼,即使預覽代碼顯示我的代碼被編碼爲代碼。即使我使用了四個空格的正確代碼,代碼的編碼也沒有很好地編碼。 – JarHead0844

0
var players = [20,5,15,40,20]; 
var getWinner = function(players){ 
    var random = Math.random(); 
    var sum = 0; 
    for(var i = 0; i < players.length; i++){ 
    sum+= players[i]/100; 
    if(random<= sum) return i; 
    } 
} 

返回玩家人數(指數0)誰獲勝