설계 판단
지우기만으로는 연쇄가 생기지 않는다
코어가 인접 칸을 날려도 최대 연쇄가 항상 1이었다. 블록이 이동하는 규칙이 함께 있어야 연쇄가 성립한다.
최대 연쇄가 항상 1이었다
낙하 퍼즐에 스파크 코어를 넣었습니다. 코어가 터지면 인접한 8칸이 날아가는 메커닉입니다. 의도는 연쇄였습니다. 코어가 터져 칸이 비면 줄이 완성되고, 그 줄이 지워지면서 다음 코어가 터지는 그림.
시뮬레이션을 돌려 보니 최대 연쇄가 언제나 1이었습니다. 한 번도 이어지지 않았습니다.
지우는 것만으로는 줄이 완성되지 않는다
초기 구현에는 이동 규칙이 하나뿐이었습니다. 줄이 지워지면 그 위의 줄들이 통째로 한 칸 내려오는 방식입니다. 이 방식에서 무슨 일이 일어나는지 생각해 보면 답이 나옵니다.
코어가 인접 8칸을 날립니다. 그 줄에 구멍이 8개 생깁니다. 하지만 같은 줄의 나머지 빈칸은 그대로입니다. 칸을 지웠을 뿐 아무것도 이동하지 않았으니까요. 다음 판정에서 완성된 줄이 나올 리가 없습니다.
줄 단위 낙하는 "줄이 지워진 뒤"에만 발동합니다. 그런데 연쇄를 만들려면 "줄이 지워지기 전에" 빈칸이 메워져야 합니다. 순서가 맞지 않았던 겁니다.
열 단위로 흘려보내기
코어 폭발 직후 열 단위로 블록을 아래로 흘려보내는 규칙을 넣었습니다. 폭발이 뚫은 구멍으로 위쪽 칸이 내려앉습니다. 줄 통째가 아니라 각 열이 따로 내려갑니다.
이러면 폭발 지점 위에 있던 블록들이 아래로 채워지면서 아래 줄이 완성될 수 있습니다.그때 연쇄가 성립합니다. 규칙 하나를 추가했을 뿐인데 최대 연쇄가 2 이상으로 올라갔고, 코어가 실제로 판을 뒤집는 수단이 됐습니다.
배운 것
연쇄나 콤보를 넣으려면 블록이 이동하는 규칙이 함께 있어야 합니다."지우면 연쇄가 되겠지"는 성립하지 않습니다. 지우는 것은 빈칸을 만들 뿐이고, 새로운 완성 조건은 무언가가 그 빈칸을 채워야 생깁니다.
그리고 이 문제는 플레이해 보기 전에 시뮬레이션으로 발견했습니다.엔진이 순수 함수라 브라우저 없이 수천 판을 돌려 볼 수 있었고, 최대 연쇄 값이 1에서 움직이지 않는다는 통계가 바로 나왔습니다. 사람이 손으로 플레이했다면 "연쇄가 잘 안 되네" 정도로 넘어갔을지도 모릅니다.