던전 보상 기능은 던전의 난이도가 나눠져 있을 때 던전의 난이도 별로 보상의 가치를 다르게 해서 플레이어에게 지급하는 형식이다.
이번에는 easy, normal, hard의 3난이도에 대해서 보상을, 차등을 둬서 지급하도록 하였다.
로직 작성 :
구현
일단 , 순서대로 구현한 것은 아니지만, 제일 하위의 함수부터 살펴보고자 한다.
일단 랜덤값을 중점으로 살펴보면, Random 클래스를 사용하기 위해 rand라는 객체를 생성해 주었다.
주석에도 적어 놓았듯 1,101을 입력하여 100의 범위에서 랜덤값을 뽑게 했는데 그 이유는 % 즉, 백분율로 확률을 구해야 했기 때문
왜냐면 0부터 100까지 뽑을 수 있는데 0부터 40까지만 뽑을 수 있다는 뜻이니까 40%확률로 실행되었단 뜻으로 볼 수 있기 때문.
NextDouble()의 초기값은 0~1 사이의 범위를 뜻하는데 거기에 (최댓값 - 최솟값)을 곱해주고 최솟값을 더해주면 최솟값~최댓값의 범위에서 랜덤값을 구할 수 있다.
이 함수는 앞서 구현했던 difficultyReward 함수를 담고있는 상위 함수로서, 구현하였다.
각 단계별로 difficultyReward 함수에 다른 값을 넣어 동일한 프레임으로 보상이 적용되면서 다른 수치만큼 보상을 반영하게 했다.
빨간색 히트박스를 보면, out 함수를 사용했는 걸 볼 수 있다.
이전 TIL을 보면 out 함수의 사용법을 알게 되었다고 했는데, 그걸 알고보니 생각보다 유용해서 사용하게 되었다.
내가 메서드 안에 메서드를 사용하는걸 즐기다보니, 메서드 밖에서 선언된 값형 변수의 값을 메서드 안에서 구해서 그 값을 다시 밖의 변수에 그대로 전달하기 위해 out을 자주 사용하는 상황이 오게 된것 같다. PastHealth, PastMoney, isSuccess 도 그런 경우로 사용한 것.
이게 씬을 구성하는 메서드, 즉 TextRPG의 UI를 담당하는 함수이며, 클래스 다음으로의 최상위 메서드라고 볼 수 있다.
최상위 계층일 수록 간단하면서 간결하게 작성을 해야 유지 보수 측면에서 유용하기 때문에, 메서드건 클래스건 줄일 수 있으면 줄이는 방식을 택한 것 같다.
ReflectDungeonResult()에서 구한 PastHealth, PastMoney, isSuccess의 값을 이 함수 밖이면서 DungeonClearScene()함수 안에서 선언한 변수에 값을 저장하기 하기 위해 out 을 사용했다는 것을 확실히 알 수 있다.
무사히 잘 구현 하였다.
일단 처음 해보는 기능이라서 어떻게 해야할지 아예 감이 안잡혔다.
이건 뭐 로직도 소용없어보이고, 그래서 그냥 AI와 Google 검색을 통해서 기능 구현하는 법을 알아 내고, 내 프로젝트 상황에 맞추어서 변형해서 구현하였다.
구현
실행
세이브, 로드 기능을 성공적으로 구현한 하였다.