글 작성자: Doublsb

일단 기초적인 구현은 했다.

 

유저 추가, 유저 선호 반영, 랜덤 매칭, 유저 삭제 등의 기능이 구현되어 있는 것을 확인할 수 있다.

사이퍼즈 API와의 연동도 수행했는데, 내가 검색한 유저가 실제로 존재하는지 여부를 확인한다.

 

선호하는 유저끼리 매칭되게 하는 부분이 조금 골칫덩이였는데, 해당 유저들은 묶어서 그룹으로 만들었다.

인원이 많은 그룹부터 파티를 배정하는데, 현재 가장 인원이 적은 팀 쪽으로 이동하게 했다.

 

조건 중 아직 구현하지 못한 내용은 다음과 같다.


1. 탱커/근딜러/원딜러/서포터 포지션을 가능한 한 정조합으로 만들어 나누면 좋다.

2. 유저 이름과 포지션 정보를 설정할 수 있는 화면이 존재해야 한다.

3. 포지션 정보는 최근 플레이 정보를 수집하여 가져올 수도 있다. (사이퍼즈 오픈 API 사용)

4. 유저 검색 시 최근 플레이한 파티원을 같이 추가할 수도 있다. (사이퍼즈 오픈 API 사용)


사실, 2번의 경우는 UI는 이미 구현했는데 임시로 닫아 놓은 상태다.

어떻게 좋은 조합을 자동으로 맞춰낼 수 있게 구현하느냐, 그걸 잘 모르겠다.

 

기획에서는 최우선 조합의 리스트가 보여지는데, 처음에는 막연하게 점수제 구현을 생각했었다.

가능한 모든 팀의 경우의 수를 만들고, 해당하는 최우선 조합이 있을 때 1점씩 더하여, 가장 높은 점수인 조합을 사용하는 방식이었다.

 

그러나 이를 구현하려면 많은 연산이 필요할 뿐만 아니라, 결과 조합이 고정되어버리는 문제도 있었다.

랜덤 파티 메이커인데 그냥 늘 돌리던 사람들끼리만 돌리게 되는 것. 다른 방법을 생각해 보자.

 

으음... 지금에서야 떠오르는 방식인데, 이대로 구현해도 되는지는 잘 모르겠다.

 

1. 팀 인원을 랜덤한 수로 지정하여 나눈다.

2. 일반 유저 및 선호 유저들을 고려하여, 그룹의 포지션 정보를 숫자화한다.

(ex : 올라운더 1명, 원딜/서폿 유저 1명이라면 1, 1, 2, 2)

3. 모든 그룹들을 랜덤 매칭한다.

4. 최우선 조합의 숫자들을 비교하여, 매칭 숫자가 최우선 조합의 숫자보다 더 높은지 확인한다.

5. 만약 실패했을 경우, 다시 랜덤 매칭한다.

6. 일정 횟수 이상 실패했을 경우, 조합 맞추기를 중단하고, 일반 랜덤매칭을 돌린다.

 

...아니 그런데, 그렇게 탱커가 없을까?

굳이 조합 맞추기를 구현해야 하냐는 말이다. ^w^.....

 

천천히 고민해보자.

반응형