개인 자료란 (JE)

  서버 커뮤니티

Profile Seo_Horyang 대표칭호 없음
Profile

질문하기 스크립트

데스매치 게임 같은걸 만들려고 하는데 도와주세요

2021.06.07 조회 수 82 추천 수 0
이해도 1.12 
게임버전 (JE) 스피곳 
게임버전 (BE) 거의 다 사용하고 있습니다. 
스크립트 애드온 2.5.3 

데스메치 게임을 시작하고 그 게임 안에서 점수가 가장 높은 1명에게 게임이 종료된뒤 랭크라는 점수를 주고 싶은데 어떻게 해야되나요?




1개의 댓글

스크립터브혼
2021.06.07

[게임 시작 대기시간 구현하기] 예문을 참고해 보세요.

일정 인원이 모이는 것을 기다렸다가, 일정시간 대기 후 게임이 시작되는 알고리즘입니다.


가장 높은 점수를 찾는 방법은

가장 낮은 점수에서 시작하여 각각의 점수를 비교, 높은 값을 기록하는 방식으로 진행하면 됩니다.

# {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을 사용한 이유는 이전 낮은 점수에서 기록된 리스트 변수를 초기화하기 위해서 입니다.


이렇게 찾아진 최고점수 플레이어들에게 보상을 주면 됩니다.