2009-08-29 2 views
0

을 발생의 가능성은 어떻게 한 가지 4/5 시간을 일하게하는 스크립트와 다른 것은 1/5 번뭔가 C#

내가 표시 할 필요가

을 할 수 만듭니다이

private void Arrest() 
{ 
    Ped Criminal = Player.GetTargetedPed(); 
    if (Exists(Criminal) && 
     (Player.Character.Position.DistanceTo(Criminal.Position) <= 10.0F)) 
    { 

답변

6
static Random rnd = new Random(); 
static void DoOne() { ... } 
static void DoTwo() { ... } 
static void RollDice() { 
    if (rnd.Next(5) == 0) 
     DoOne(); // happens 1/5 times 
    else 
     DoTwo(); // happens 4/5 times 
} 

각 전화Random 인스턴스를 다시 만들지 않아야합니다. 이전 인스턴스를 유지하고 재사용해야합니다. 그렇지 않으면 무작위로 생성 된 시퀀스가 ​​균일하게 배포되지 않습니다.

+0

죄송합니다. 구체적인 것은 아니지만이 후에 표시해야합니다. Ped Criminal = Player.GetTargetedPed(); if (Exists (Criminal) && (Player.Character.Position.DistanceTo (Criminal.Position) <= 10.0F) { – lilmcnessy

+1

@lilmcnessy : 그래서? 그것을 거기에 넣고, 당신이 원하는 것을하기 위해 그것을 수정하십시오. 우리는 당신을 위해 당신의 일을하지 않을 것입니다, 우리는 당신이 더 나은 프로그래머가 될 수 있도록 당신을 위해 질문에 대답하기 위해 왔습니다. 이 경우, @Mehrdad는 신중하게 한 번은 약 5 번, 한 번은 다섯 번마다 네 번 발생하도록하는 패턴을 제공했습니다. 그래서 나는 당신의 적절한 응답이 "고맙습니다."라고 말하지 않고 "내 코드에 따라 그것을 작동시켜야"라고 생각하지 않습니다. – Randolpho

+0

@Mehrdad : 더 나쁜 것은, 각 호출마다 Random 인스턴스를 빈 생성자에 시간 기반 값이 포함되므로 정확한 반복 시퀀스를 반복 할 수 있습니다. 몇 달 전에 묻고 싶은 질문이 있었는데, 묻는 사람은 자신이 기적적으로 중복 된 GUID를 만들었다 고 확신했습니다. 그가 한 일은 모두 동일한 시간 기반 값으로 두 개의 무작위 인스턴스를 인스턴스화했을 때였습니다. – MusiGenesis

관련 문제