관리 메뉴

LC Studio

Nexon OpenApi를 활용하여 11명의 선수 Random으로 불러오기(FIFAONLINE RandomSquadMaker #1) 본문

프로젝트/FIFAONLINE4 RandomSquadMaker

Nexon OpenApi를 활용하여 11명의 선수 Random으로 불러오기(FIFAONLINE RandomSquadMaker #1)

Leopard Cat 2022. 5. 22. 11:46

서론

목표한 RandomSquadMaker을 만들기 위해선 크게 3가지 과정을 해내야 한다.

 

1. Random한 선수 데이터 불러오기

2. "포지션"별 Random한 선수 데이터 불러오기

3. "시즌"별 Random한 선수 데이터 불러오기

 

이번에는 "Random한 선수 데이터 불러오기" 부분을 해보겠다.


본론

우선 Nexon OpenApi의 선수 데이터는 214,246줄의 JSON 파일 형태로 되어있다.

그 안에는 선수의 고유(spid)식별자와 이름이 들어가 있다.

[ 
	{ 
    	"id": 101000001, 
        "name": "데이비드 시먼" 
    },
    { 
    	"id": 101000195,
        "name": "로비 파울러"
    }
]

위와 같은 형태이다.

위와같은 형태가 약 53,561번 반복된다고 생각하면 된다.

 

지나 포스트에서도 설명했듯이, 나는 JSON파일을 받아와 줄별로 읽었다.

- 각 선수의 이름은 4의배수 -1번째 줄에 존재한다.

- Random한 값을 발생시켜 4를 곱해준다.(4의 배수로 만들어준다)

- 값에 해당하는 줄까지 반복하며 읽는다.

- 해당하는 줄의 이름값을 받아온다. 

BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line = null; // 줄별로 읽어오기
int loopNum = 0; //반복횟수
int Num = 0; // 랜덤 숫자

for(int i=0; i<11; i++) {
    Random random = new Random();
    Num = random.nextInt(50000); // random 수 Num에 저장
    if(Num != 0){
        Num = Num*4;
    }
    else{ //0인 경우 4로 처리
        Num = 4;
    }

    loopNum = 0;
    while (true){
        line = reader.readLine();
        if(loopNum == Num-1){
            System.out.println(line);
            String[] nameArr = line.split(":");
            name[i] = nameArr[1];
            break;
        }
        loopNum++;
    }
}

결론

실행 예시

위와같이 랜덤으로 선수 11명을 불러와 보았다.

몇가지 문제가 있는데,

 

1. 약 200,000줄까지의 데이터를 살펴보아야하니, 소요되는 시간이 너무 오래 걸렸다.

- 현재는 약 20,000줄까지만 Random하게 생성하여 괜찮지만, 그 수가 커지니 렉이 걸리는 듯 선수가 5명 밖에 호출되지 않았다. 다른 방식으로 JSON을 불러오든, 시간지연을 통해 처리하든 방법을 찾을 것이다.

 

2. 운이 아주아주 좋다면 같은 이름이 중복 호출될 수 있다.

- Random한 값이 동일하게 나온다면, 똑같은 선수가 호출될 것이고, 다른 시즌이지만 이름이 동일한 경우도 나올 수 있다. 이 2가지의 경우도 예외처리 해주어야 한다.

 

이상! 

반응형