내일배움캠프

내일배움캠프내일배움캠프 게임개발 과정 9일차: 실수형 난수 사용

pracumj 2024. 9. 24. 23:12

오늘 공부한 내용📝

C#을 활용한 TEXT RPG 만들기 과제를 하던 중 실수형 난수를 사용할 일이 생겼다.  하지만 기존에 사용하던 Next() 메서드로는 실수형 난수 값을 얻을 수 없었다. 방법을 찾던 중 NextDouble()을 학습하게 되었다.

NextDouble()과 Next()의 차이점

  • Next()정수형 값을 반환하며, 범위를 지정할 수 있다. 예를 들어, 최솟값과 최댓값을 설정해서 그 사이의 정수를 생성이 가능하다.
  • 반면, NextDouble()0.0 이상 1.0 미만실수형 값을 반환한다. 0.0 ~ 1.0 범위를 벗어나는 값을 넣어주고 싶다면 별도의 처리가 필요하다.

NextDouble에서 최솟값과 최대값 설정 방법

기본적으로 NextDouble()은 0.0 이상 1.0 미만의 값을 반환하지만 약간의 처리를 통해 최솟값과 최댓값을 설정하여 특정 범위 내의 실수형 난수를 생성할 수 있다.

 

예를 들어, 0.1에서 0.9 사이의 난수를 생성하려면 다음과 같이 계산할 수 있다:

Random random = new Random();
double minValue = 0.1;
double maxValue = 0.9;
double randomValue = minValue + (random.NextDouble() * (maxValue - minValue));

코드 예시: 던전 클리어  후 보상에 NextDouble() 적용하기

던전 클리어 시 랜덤한 보상을 지급하는 상황을 생각해보자. 
1. 난수값에 따라 추가 보상 골드를 추가 지급

2.  범위는 0.1~ 0.5  

public class Program
{
    static int userGold = 0;

    static void Main(string[] args)
    {
        Random random = new Random();
        int reward = 100;

        // 0.1 ~ 0.5 사이의 난수 값으로 보상 비율을 적용 
        double goldMultiplier = 0.1 + (random.NextDouble() * (0.5 - 0.1));  // 최소값 + 난수 * (최대값 - 최소값)
        userGold += (int)(reward * goldMultiplier);
    }
}

위 코드에서는 NextDouble()을 통해  0.1 ~ 0.5 사이의 난수를 생성하여 각 보상에 곱해주었다. 

0.1~0.5의 보상 범위를 얻기 위해 다음과 같은 공식이 사용 됐다.  => 최소값 + 난수 * (최대값 - 최소값)
이 공식을 통해  특정 범위 내의 실수형 난수를 쉽게 생성할 수 있었다.

마무리😺

처음에는 NextDouble()의 사용법이 헷갈렸지만, 실수형 난수를 필요로 하는 상황에서 그 유용성을 직접 느끼게 되었다. 특히, 기본적으로 0.0 ~ 1.0 사이의 값을 반환하는 것을 알고 나니, 이를 응용해 최솟값과 최댓값을 설정하여 다양한 범위의 실수형 값을 생성할 수 있었다. 앞으로 게임 개발이나 확률 기반의 시스템을 구현할 때, 정확한 난수 범위를 설정하고 싶은 경우에 매우 유용하게 활용할 수 있을 것 같다.

이제는 정수형 난수가 필요할 때는 Next(), 실수형 난수가 필요할 때는 NextDouble()을 상황에 맞게 선택하여 사용하면서 더 유연한 코드 작성을 할 수 있을 것 같다!