리듬 게임에서 랭킹 시스템을 어떻게 만들까 고민중이다.
처음에는 랭킹 저장에 대해 엑셀과 스크립터블 오브젝트를 이용한 방식을 가져갈까 했다.
하지만 이 방식은 대량의 데이터가 엑셀에 존재할 때 게임으로 가져오는 것(대화, rpg아이템)에는 편의성이 특화돼있지만, 점수 랭킹처럼 실시간으로 추가되는 데이터에는 어울리지 않음을 깨달았다.
그래서 튜터님께 여쭈어보니, 튜터님도 위같은 방식은 맞지 않음을 알려주셨다.
아마 Json을 사용할 것 같다. (드디어 다뤄본다.)
튜터님의 추천대로 점수에 따른 순위 정렬에 퀵 정렬을 사용하기로 했다.
처음에는 [곡id, 유저이름, 점수]요소를 가진 클래스의 리스트를 점수별로 정렬하려고 했으나, 설계 중에 몇 가지 조건이 붙어버렸다.
1번 문제를 해결하기 위해서 딕셔너리를 사용하기로 했다.
곡id가 키, 나머지 정보의 클래스를 값으로 한다.
2번 문제는 정렬 알고리즘 내부에 따로 예외를 둘까 한다.
public class RankingEntry
{
public RankingEntry(string UserName, int Score)
{
this.UserName = UserName;
this.Score = Score;
}
public string UserName { get; set; }
public int Score { get; set; }
}
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RankingManager : MonoBehaviour
{
public static RankingManager instance;
Dictionary<int, List<RankingEntry>> rankingMap = new Dictionary<int, List<RankingEntry>>();
private void Awake()
{
instance = this; // TODO 싱글톤은 개선 필요
}
public void AddRankingEntry(int songId, string userName, int record)
{
,,,생략,,,
}
,,,생략
}