2017-01-05 1 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이면 플레이어 1이 이깁니다. 21-100이면 플레이어 2가 승리합니다. 또한'player1'을 두 번 정의했습니다. – Santi

+0

산티가 방금 말한 무작위 기능 – Tom

+0

[ask]를 읽어주세요. 핵심 구절 : "검색 및 연구"및 "당신이 직접 해결하지 못하게하는 어려움을 설명하십시오." –

답변

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; 
    } 
} 

는 (인 Math.random 우리에게 0.99-0.0 ~ 제공 이후 0.45 * 100), 난수 (45)를 선택한 것으로 상상한다. 플레이어 (1)가 수상했다 경우는 임의의 숫자는 첫 번째 반복을 선택으로 그 플레이어 (2) (45)를 사용하여

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

을 수상 의미, 우리는 확인한다. 그는 그렇게하지 않았으므로 플레이어 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 분 동안 올바른 코드를 편집하는 데 낭비했지만 사이트 코드는 내 코드가 내 코드가 코드로 코딩 된 것으로 보여도 코드로 포맷되지 않은 코드라고했기 때문에 내 코드를 거부했습니다. 코드에 대한 코드는 4 개의 공백으로 된 올바른 코드를 사용하더라도 잘 코딩되지 않았습니다. – 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)

관련 문제