대장간 - 가중치를 이용한 무기 강화

2024. 12. 24. 21:16카테고리 없음

아이템 강화할때 가중치를 이용해서 아이템을 강화하도록 만들었다.

private List<float> probs = new List<float>{20, 200};

리스트 하나를 만들어주고 0번째 인덱스 자리에 있는 숫자가 실패할 확률 1번째 인덱스자리에 있는 숫자가 성공 확률이다.

그래서 1번째 인덱스 값을 몇강인지에 따라서 강화확률이 줄어들게 만들었다.

private void EnhancementProbability()
{
    if (_item.enhance < 10)
    {
        probs[1] = 200 - _item.enhance * 20;
    }
    else if (_item.enhance < 20)
    {
        probs[1] = probs[0] - _item.enhance;
    }
    else if (_item.enhance < 50)
    {
        probs[1] = (float)(1 - 0.02 * _item.enhance);
    }
    else
    {
        probs[1] = 0.001f;
    }
}

 

밑에 코드가 가중치를 이용해서 아이템 강화를 결정하는 코드이다.

private bool GetGradeType()                   //가중치 랜덤
{
    EnhancementProbability();
    total = 0;
    for (int i = 0; i < probs.Count; i++)
    {
        total += probs[i];
    }
    
    System.Random random = new System.Random();
    float randomValue = (float)random.NextDouble() * total;

    for (int i = 0; i < probs.Count; i++)
    {
        if (randomValue < probs[i])
        {
            return i == 1;
        }
        
        randomValue -= probs[i];
    }

    return false;
}