선수 강화 기능에 대해서..

김민재·2024년 9월 18일
0
post-custom-banner

오늘은 즐거운? 추석의 마지막날...
나는 풋살 장면 구현의 마지막 과제인 선수 강화에 대해서 생각을 해보고 있었다.

DB 구조


문제 착안점

  1. 강화를 어떻게 해야할까?
    이것은 그렇게 큰 문제가 되지 않는다.
    아이템의 강화방식과 마찬가지로 아이템의 정보를 불러와서 강화한다면 큰 문제가 없다. 라고 생각한다면 큰 오산이다.
  1. 어떻게 각각 나눠주어야만 할까?
    1에서 그저 단순히 아이템 정보를 불러와서 아이템을 강화하는 방식을 채용하게 된다면, 해당하는 모든 아이템을 가진 계정에서 전부다 강화가 되어버리는 말도 안되는 사태가 발생해버릴 것이다.

그렇다면 여기서 생각할 수 있는 부분은.. 각 계정마다 별도의 선수를 강화하게끔 하는 것인데 여기서도 또 여러개의 경우가 발생하기 나름이다.

  1. 선수와 자신의 인벤토리와 관계 맺기
    단순하게 선수와 자신의 계정의 인벤토리와 N대 1의 관계를 맺어서 자신의 계정에 여러명의 선수가 들어오게끔 한 후, 해당 선수들을 강화한다.
    문제점: 선수들은 무조건 어떤 인벤토리에 속해야만하는 단점이 생기며 이 방법으로는 각 계정마다 별도의 선수를 강화하게끔 분리하는 것은 불가능하다. ( 왜냐하면 무조건 해당 선수의 정보와 연결이 되어버리기 때문)
  1. 인벤토리에 json 타입의 칼럼을 선언하여 해당 값 안에다 다 넣고 처리한다.
    가능한 부분이긴 하다.
    json 타입을 통하여 자신의 Roster에 등록되는 모든 선수들의 id에서부터 모든 정보를 가져와서 저장한 후 이중에서 자신이 강화하고자 하는 타입의 playerId를 가진 선수만 꺼내어 강화할 수 있다. 있지만....
    이럴거면 대체 Player(선수) 테이블을 왜 쓰는 것일까?
    해당 테이블에서 모든 값을 저장하고 처리해버릴 거라면 선수 테이블은 필요 없는 것이 아닐까?

여기까지 생각했을 때 어느정도의 해답이 나왔다.
정답이라고 볼 수 있을지는 모르겠지만, 선수를 사서 자신의 인벤토리에 가져올 때 레벨을 붙이면 되는 것이었다.

이런식으로 playerLv을 각각 로스터에 붙임에 따라서 해당 선수를 강화할 때 Roster에 등록된 레벨을 강화하게되면 선수의 정보에 직접적으로 영향을 주지 않고 팀 전투력을 계산할 때 로스터에서 레벨을 찾아와서 별도의 처리를 해줄 수 있다.

(로스터를 불러와야하는 번거로움이 생기긴 한다.)
이런식으로 간단하게 플레이어의 레벨마다 하나의 스텟이 오르는 느낌으로 전투력을 다시 측정할 수 있게 될 것이다.

물론 문제점이 아예 없는건 아니다.
이런 방식으로 강화를 할 때 무조건 캐릭터의 레벨이 올라가있기떄문에, 새롭게 카드를 사더라도 그 카드는 강화되어있는 식으로 추가가 되어버린다.
그렇기에 새롭게 추가하는 방식으로 코드를 짠다면 어떨까 싶은 생각이 있는데
그렇게 되면 이제 여러모로 조건을 정말 많이 확인을 해야한다고 생각을 해서...
ex) 그 선수의 최대 레벨이 몇인지, 어떤 레벨의 선수를 강화를 할 것인지, 그 선수를 강화하기전에 그보다 하나 높은 레벨의 칼럼이 이미 존재하는지 존재한다면 그의 해당하는 행에 있는 amount를 증가시켜줘야하는 등...
정말 처리할게 많아져서 일단은 보류하기로 했습니다....

profile
ㅇㅇ
post-custom-banner

0개의 댓글