프로그래밍/기타
3매치 구조 회고 (4) : 효율적으로 힌트 찾기
3매치 구조 회고 (4) : 효율적으로 힌트 찾기
2023.09.25현재 회사에서 설계하고 유지보수한 3매치 코드는 이미 검증되었지만, 과거의 자신을 돌아보는 것이 늘 그렇듯 다시 읽어보면 구데기인 부분이 너무 많다. 그래서 이 시리즈는 과거의 설계를 돌아보며 더 확장성있는 코드를 고민해보는 글이 되겠다. 조건 1. 일정 시간동안 유저가 조작을 하지 않을 경우, 힌트를 보여 줄 것. 2. 이 때, 우선순위가 높은 힌트를 먼저 보여주어야 함. 3. 유저가 조작을 하기 전까지 랜덤한 힌트를 돌아가면서 보여주어야 함. 3-1) 3x1 이상의 우선순위 매치가 있을 경우, 그 매치들만 돌아가면서 보여 준다. 3-2) 일반 매치만 힌트 대상일 경우, 일반 매치만 돌아가면서 보여 준다. 과거의 나 1. 왼쪽 아래에서부터 위/오른쪽 방향으로 스왑한 결과의 매치를 조사한다. 1-1) 같..
3매치 구조 회고 (3) : 효율적으로 매치하기
3매치 구조 회고 (3) : 효율적으로 매치하기
2023.09.19현재 회사에서 설계하고 유지보수한 3매치 코드는 이미 검증되었지만, 과거의 자신을 돌아보는 것이 늘 그렇듯 다시 읽어보면 구데기인 부분이 너무 많다. 그래서 이 시리즈는 과거의 설계를 돌아보며 더 확장성있는 코드를 고민해보는 글이 되겠다. 으엄... 이번 글은 확장 관련 얘기는 없지만 말이다. 조건 1. 연속된 블록의 개수에 따라 다른 결과물을 만들어낼 것 과거의 나 1. BFS(너비 우선 탐색)으로 연속된 블록들을 모두 리스트로 가져온다. 2. 리스트의 블록들을 순회하면서 그 블록 기준으로 연속된 가로/세로 개수를 구한다. 3. 개수 조건에 들어맞는 매치를 수행한다. class ConnectInfo { List slots; //중복해서 계산하는 일이 없도록 캐싱함 Dictionary horizontal..
3매치 구조 회고 (2) : 타겟팅 로직
3매치 구조 회고 (2) : 타겟팅 로직
2023.09.18현재 회사에서 설계하고 유지보수한 3매치 코드는 이미 검증되었지만, 과거의 자신을 돌아보는 것이 늘 그렇듯 다시 읽어보면 구데기인 부분이 너무 많다. 그래서 이 시리즈는 과거의 설계를 돌아보며 더 확장성있는 코드를 고민해보는 글이 되겠다. 조건 블록을 4개 이상 매치하면 특수 블록이 만들어지는 모습은 이제는 흔한 장면이 되었다. 그 중에서도 똑똑하게 미션을 깰 수 있도록 도와주는 유도 미사일, 혹은 부메랑을 개발해야 했다. 1. 게임 목표에 있는 장애물을 우선적으로 타겟으로 할 것 2. 도중에 타겟이 된 블록이 파괴되거나 식별할 수 없게 되면 다른 타겟을 찾을 것 3. 장애물을 파괴하는 것이 목적이 아닌 경우도 있음 과거의 나 3매치를 만들면서 가장 공수를 많이 들인 부분이 타겟팅 로직이 아닐까 싶다. ..
3매치 구조 회고 (1) : 슬롯과 블록
3매치 구조 회고 (1) : 슬롯과 블록
2023.09.15현재 회사에서 설계하고 유지보수한 3매치 코드는 이미 검증되었지만, 과거의 자신을 돌아보는 것이 늘 그렇듯 다시 읽어보면 구데기인 부분이 너무 많다. 그래서 이 시리즈는 과거의 설계를 돌아보며 더 확장성있는 코드를 고민해보는 글이 되겠다. 조건 처음 입사했을 때, 새 3매치 프로젝트의 주요 사양에는 네 가지가 있었다. 1. 두 칸 이상의 크기를 가진 블록 기존 블록이 1x1이라면, 2x2 이상이나 5x1 등으로 이루어진 블록들을 만들 수 있어야 한다. 심지어 어떤 장애물 블록은 실시간으로 크기가 변경될 수도 있다. 2. 블록 위에 블록이 있을 수 있다 상자 블록이 있다고 하면, 그 블록을 가리는 꿀 블록이 있을 수도 있다. 이런 경우 꿀 블록이 사라질 때까지 상자 블록을 찾을 수 없다. (특수 블록의 대..