가장 낮은 점수에서 시작하여 각각의 점수를 비교, 높은 값을 기록하는 방식으로 진행하면 됩니다.
# {score::*} = 인덱스는 플레이어 이름, 값은 플레이어 점수를 가진 리스트 입니다.
set {_top.score} to 0
loop {score::*}:
continue if loop-value < {_top.score}
if {_top.score} < loop-value:
set {_top.score} to loop-value
set {_top.player::*} to loop-index
else if {_top.score} = loop-value:
add loop-index to {_top.player::*}
{_top.score} 변수는 가장 낮은 점수인 0점으로 시작해서 플레이어 점수가 더 크면 변수의 값을 플레이어의 점수로 바꿉니다.
그렇게 되면 가장 마지막에 남는 변수의 값은 가장 높은 점수가 됩니다.
같은 방식으로 높은 점수가 갱신 될 때 플레이어의 이름을 {_top.player::*} 변수에 set합니다.
여기에 동점자도 같이 찾아내기 위해 else if 가 사용됩니다.
else if의 경우 앞 선 조건이 만족되면 동작하지 않기 때문에
점수가 갱신될 때는 동작하지 않고, 갱신 된 점수와 동점인 경우에만 동작하게 됩니다.
갱신 된 점수인 경우 미리 set 한 값이 있기 때문에 add를 하여 추가해 좁니다.
점수가 갱신 될 때 set을 사용한 이유는 이전 낮은 점수에서 기록된 리스트 변수를 초기화하기 위해서 입니다.
스크립터브혼
2021.06.07[게임 시작 대기시간 구현하기] 예문을 참고해 보세요.
일정 인원이 모이는 것을 기다렸다가, 일정시간 대기 후 게임이 시작되는 알고리즘입니다.
가장 높은 점수를 찾는 방법은
가장 낮은 점수에서 시작하여 각각의 점수를 비교, 높은 값을 기록하는 방식으로 진행하면 됩니다.
{_top.score} 변수는 가장 낮은 점수인 0점으로 시작해서 플레이어 점수가 더 크면 변수의 값을 플레이어의 점수로 바꿉니다.
그렇게 되면 가장 마지막에 남는 변수의 값은 가장 높은 점수가 됩니다.
같은 방식으로 높은 점수가 갱신 될 때 플레이어의 이름을 {_top.player::*} 변수에 set합니다.
여기에 동점자도 같이 찾아내기 위해 else if 가 사용됩니다.
else if의 경우 앞 선 조건이 만족되면 동작하지 않기 때문에
점수가 갱신될 때는 동작하지 않고, 갱신 된 점수와 동점인 경우에만 동작하게 됩니다.
갱신 된 점수인 경우 미리 set 한 값이 있기 때문에 add를 하여 추가해 좁니다.
점수가 갱신 될 때 set을 사용한 이유는 이전 낮은 점수에서 기록된 리스트 변수를 초기화하기 위해서 입니다.
이렇게 찾아진 최고점수 플레이어들에게 보상을 주면 됩니다.