Rank
플레이어의 점수를 저장하고 랭킹(리더보드)을 보여줄 수 있는 모듈입니다.
각 게임별로 플레이어의 점수를 저장하고 랭킹을 보여주는데 사용되는 클래스입니다.
현재는 랭킹 UI가 한 종류 밖에 없지만, 추후 추가될 예정입니다.
메소드
.saveScore(options)
플레이어의 점수를 서버에 저장합니다.
매개변수
options
(객체): 다음 속성을 포함하는 객체:
score
(정수): 저장할 플레이어의 점수.order
(문자열, 선택사항): 점수 정렬 순서. “ASC” (오름차순) 또는 “DESC” (내림차순)이 가능합니다. 지정하지 않으면 기본값은 “DESC”입니다.
점수는 정수로 저장되므로, 점수 시스템을 설계할 때 정수로 계산되도록 고려해야 합니다.
반환값
Promise: 점수가 성공적으로 저장되면 해결되는 프로미스.
예시
// 기본 내림차순으로 점수 저장
REDBRICK.Rank.saveScore({ score: 10 });
// 명시적으로 내림차순 설정하여 점수 저장
REDBRICK.Rank.saveScore({ score: 10, order: "DESC" });
// 오름차순으로 점수 저장
REDBRICK.Rank.saveScore({ score: 10, order: "ASC" });
참고사항
order
매개변수를 제공하지 않으면 점수는 내림차순(“DESC”)으로 저장됩니다.- 점수를 검색할 때는 저장 시 지정한
order
매개변수에 따라 정렬됩니다.
적절한 랭킹을 보장하기 위해 게임 내에서 모든 점수 저장에 동일한 order
를 일관되게 사용하는 것이 좋습니다.
정렬 순서는 데이터베이스에 별도로 저장됩니다. order: "ASC"
로 저장된 점수는 show({order: "DESC"})
로 검색할 수 없으며, 그 반대의 경우도 마찬가지입니다.
.show(options)
지정된 순서로 랭킹을 보여줍니다. 현재 플레이어의 점수가 리더보드 상단에 표시됩니다.
매개변수:
options
(선택사항): 다음 속성을 포함하는 객체:theme
(문자열, 선택사항): 랭킹 UI의 시각적 테마.type
(문자열, 선택사항): 랭킹 표시 유형.order
(문자열, 선택사항): 랭킹 표시 순서
현재는 랭킹 UI의 theme
가 기본 유형 하나만 있지만, 추후 더 추가될 예정입니다.
default
유형과 함께 time
옵션을 사용할 수 있습니다. 추후 더 많은 옵션이 추가될 예정입니다.
기본적으로 랭킹은 DESC
순서로 표시됩니다. ASC
순서도 사용 가능합니다.
사용 예시:
// 기본 랭킹 표시
REDBRICK.Rank.show();
// 사용자 지정 옵션으로 랭킹 표시
REDBRICK.Rank.show({
type: "time",
});
time 옵션으로 랭킹 표시: hh:mm:ss
REDBRICK.Rank.show({
type: "time",
});
time 유형과 내림차순 순서로 랭킹 표시.
REDBRICK.Rank.show({
type: "time",
order: "DESC"
});
.hide()
랭킹을 숨깁니다. 랭킹이 표시되면 닫기(X) 버튼을 눌러 닫기 전까지 다른 GUI를 클릭할 수 없습니다. 원하는 경우 setTimeout()
을 사용하여 몇 초 후에 자동으로 랭킹을 숨길 수 있습니다.
예시
// 이 버튼은 랭킹을 보여줍니다
this.onClick(() => {
REDBRICK.Rank.show();
});
// 이 함수는 점수를 정수로 저장합니다
function onGameEnd() {
// ...
REDBRICK.Rank.saveScore(score);
}
.hide()
는 다음과 같이 사용할 수 있습니다
// 이 버튼은 랭킹을 보여주고 1초 후에 숨깁니다
this.onClick(() => {
REDBRICK.Rank.show();
setTimeout(() => {
REDBRICK.Rank.hide();
}, 1000);
});
내 랭킹 가져오기
getMyRank()
현재 사용자의 랭킹 정보를 가져오는 비동기 함수입니다.
async function fetchMyRank() {
const myRank = await REDBRICK.Rank.getMyRank();
return myRank;
}
**getMyRank()**는 비동기 함수이며 await 또는 **.then()**과 함께 사용해야 합니다.
반환값:
사용자의 랭킹 정보가 포함된 JSON 객체를 반환하며, 점수가 존재하지 않는 경우 빈 객체를 반환합니다.
응답 예시:
{
"id": 21,
"pid": "게임의 pid",
"score": 24,
"rank": 1,
"username": "사용자명",
"avatar": "아바타_url"
}
모든 랭킹 가져오기
getAllRank(options)
모든 사용자의 랭킹 정보를 가져오는 비동기 함수입니다.
async function fetchAllRanks() {
// 옵션을 전달하지 않으면 기본적으로 상위 100명의 사용자를 가져옵니다
const allRanks = await REDBRICK.Rank.getAllRank();
return allRanks;
}
**getAllRank()**는 비동기 함수이며 await 또는 **.then()**과 함께 사용해야 합니다.
매개변수:
options
(선택사항): 가져올 상위 랭킹 수를 지정하는take
속성을 가진 객체. 기본값은 100입니다.
사용 예시:
// 상위 10개 랭킹 가져오기
const top10Ranks = await fetchAllRanks({ take: 10 });
반환값:
각 사용자의 랭킹 정보가 포함된 JSON 객체 배열을 반환합니다.
응답 예시:
[
{
"id": 21,
"pid": "게임의 pid",
"score": 24,
"rank": 1,
"username": "사용자명",
"avatar": "아바타_url"
},
{
"id": 22,
"pid": "게임의 pid",
"score": 21,
"rank": 2,
"username": "사용자명2",
"avatar": "아바타_url"
},
// ... 더 많은 랭킹 항목
]