2012-10-08 2 views
1

둘러 보았고 문제점에 대한 해결 방법을 찾을 수 없습니다.JavaScript의 양식에서 일련의 난수를 생성하십시오.

배경 - 의도 된 사용은 가동 중지 작업의 성공을 계산하기위한 실제 rpg 그룹에 대해 쉽게 구성 할 수 있습니다. 주어진 양식 필드에 숫자를 입력함으로써 스크립트는 사용할 "주사위"의 총 수를 1에서 10 사이의 값으로 계산합니다. 성공으로 간주되기 위해서는 "주사위"의 각 "롤"에서 만나야하는 난이도 한계도 있습니다.

totalDice을 배열의 크기로 사용하여 난수를 생성하는 데 어려움이 있습니다. 일단 그 문제가 발생하면 주어진 난이도 임계 값보다 큰 총 난수를 세고 표시하는 방법을 찾아야합니다.

내가 지금까지 가지고있는 것의 작동 예제는 see here입니다.

나는 랜덤 배열의 크기를 제공하는 var = totalDice을 가지고 있습니다. totalDice= 220 경우, I (220 개) 난수이어서 내가 난수와 비교해야하는 임계치를 제공한다 var = totalDiff이 1 ~ 10 생성해야 예 10.

- 난수의 값은 1이다 생성됩니다. 생성 된 배열을 가져와 => totalDiff 인 인스턴스의 수를 계산하는 방법을 찾아야합니다.

예 : totalDice = 220, totalDiff = 6, totalSuccesses = x, 여기서 x = the number of elements => 6.

도움을 주시면 대단히 감사하겠습니다.

+1

벽은 일반적으로에 눈살을 찌푸렸다된다 그래서. 관련 섹션에만 코드를 자르십시오. –

+0

편집 ... 내 사과 ... 스크립트에만 내려 놓았습니다 .. –

+0

더 좋았지 만 아직 많이 남아 있습니다. 엄지 손가락의 10 규칙 미만입니다. 너 뭐라고 묻는거야? –

답변

1

휴식이, 그 함수가 무엇인지입니다.

var roll = function() { 
    return Math.floor(Math.random() * 10 + 1); 
}; 

var getResult = function(difficulty) { 
    return roll() >= difficulty; 
}; 

var getAllResults = function(totalDice, difficulty) { 
    var arr = []; 
    for (var i = 0; i < totalDice; i++) { 
     arr.push(getResult(difficulty)); 
    } 
    return arr; 
}; 

확인 :

var results = getAllResults(220, 6); 
var t = 0; 
var f = 0; 

for (var i = 0; i < results.length; i++) { 
    if (results[i]) { 
     t++; 
    } else { 
     f++; 
    } 
} 
console.log('total rolls', 220); 
console.log('total result count (expected 220)', results.length); 
console.log('boolean results (expected 220)', t + f); 
console.log('successes', t); 
console.log('failures', f); 
console.log('raw results array', results); 

편집 : 당신은 단지 성공의 수를 원한다면, 다른 기능을을 계산합니다 : 텍스트의

var getSuccesses = function(results) { 
    var successes = 0; 
    for (var i = 0; i < results.length; i++) { 
     if (results[i]) { 
      successes++; 
     } 
    } 
    return successes; 
}; 

//Count successes for 175 die rolls at difficulty 8: 
var s = getSuccesses(getAllResults(175, 8)); 
+1

이것은 멋지게 보이며 여기에서 진행되는 프로세스를 볼 수 있습니다. –

+0

이제 220과 6은 계산에서 가져와 매번 변경 될 수있는 임의의 숫자이므로 해당하는 var로 바꾸겠습니까? 예를 들어 220의 모든 인스턴스를 totalDice로 변경합니까? –

+0

다행스럽게 도울 수있었습니다! 이 방법으로 문제가 해결되면 녹색 체크 표시를 클릭하여 문제를 해결하십시오. –

0

테스트하지만이 시도하지 : 조각으로

var generateRandomInteger = function(minV, maxV) { 
    return Math.floor(Math.random() * (1.0 + maxV - minV) + minV); 
} 

var generateRandomArray = function(n, minV, maxV) { 
    var rv = []; 
    for (var i=0; i<n; i++) { 
     rv.push(generateRandomInteger(minV, maxV)); 
    } 
    return rv; 
}; 
+0

그래서 내 이해가 정확하다면, 아마 ........ minV = 1, maxV = 10 이후 값의 범위, 그리고 n = parseInt (totalDice.value)? –

관련 문제