설계 판단

지우기만으로는 연쇄가 생기지 않는다

코어가 인접 칸을 날려도 최대 연쇄가 항상 1이었다. 블록이 이동하는 규칙이 함께 있어야 연쇄가 성립한다.

게임 설계 · 연쇄 · 차곡착

최대 연쇄가 항상 1이었다

낙하 퍼즐에 스파크 코어를 넣었습니다. 코어가 터지면 인접한 8칸이 날아가는 메커닉입니다. 의도는 연쇄였습니다. 코어가 터져 칸이 비면 줄이 완성되고, 그 줄이 지워지면서 다음 코어가 터지는 그림.

시뮬레이션을 돌려 보니 최대 연쇄가 언제나 1이었습니다. 한 번도 이어지지 않았습니다.

지우는 것만으로는 줄이 완성되지 않는다

초기 구현에는 이동 규칙이 하나뿐이었습니다. 줄이 지워지면 그 위의 줄들이 통째로 한 칸 내려오는 방식입니다. 이 방식에서 무슨 일이 일어나는지 생각해 보면 답이 나옵니다.

코어가 인접 8칸을 날립니다. 그 줄에 구멍이 8개 생깁니다. 하지만 같은 줄의 나머지 빈칸은 그대로입니다. 칸을 지웠을 뿐 아무것도 이동하지 않았으니까요. 다음 판정에서 완성된 줄이 나올 리가 없습니다.

줄 단위 낙하는 "줄이 지워진 뒤"에만 발동합니다. 그런데 연쇄를 만들려면 "줄이 지워지기 전에" 빈칸이 메워져야 합니다. 순서가 맞지 않았던 겁니다.

열 단위로 흘려보내기

코어 폭발 직후 열 단위로 블록을 아래로 흘려보내는 규칙을 넣었습니다. 폭발이 뚫은 구멍으로 위쪽 칸이 내려앉습니다. 줄 통째가 아니라 각 열이 따로 내려갑니다.

이러면 폭발 지점 위에 있던 블록들이 아래로 채워지면서 아래 줄이 완성될 수 있습니다.그때 연쇄가 성립합니다. 규칙 하나를 추가했을 뿐인데 최대 연쇄가 2 이상으로 올라갔고, 코어가 실제로 판을 뒤집는 수단이 됐습니다.

배운 것

연쇄나 콤보를 넣으려면 블록이 이동하는 규칙이 함께 있어야 합니다."지우면 연쇄가 되겠지"는 성립하지 않습니다. 지우는 것은 빈칸을 만들 뿐이고, 새로운 완성 조건은 무언가가 그 빈칸을 채워야 생깁니다.

그리고 이 문제는 플레이해 보기 전에 시뮬레이션으로 발견했습니다.엔진이 순수 함수라 브라우저 없이 수천 판을 돌려 볼 수 있었고, 최대 연쇄 값이 1에서 움직이지 않는다는 통계가 바로 나왔습니다. 사람이 손으로 플레이했다면 "연쇄가 잘 안 되네" 정도로 넘어갔을지도 모릅니다.

개발 노트 목록으로