블록 퍼즐을 만들었습니다. 조각을 끌어다 끼우는 끼우기와, 위에서 떨어지는 조각을 쌓는 떨어뜨리기 두 모드로 시작했습니다(그 뒤에 중력이 하나 더 붙었습니다). 여기까지는 흔한 이야기이고, 이 게임의 다른 점은 스킨입니다 — 프리셋 말고 내 사진 여덟 장을 블록 여덟 색 자리에 직접 넣을 수 있습니다.
처음에는 판을 8x8 로 만들었습니다. 규칙을 다 짜고 며칠 해 보고 나서 크기를 바꿨는데, 이유는 이렇습니다.
즐거운 순간이 어디였나
한 줄을 지우는 것은 사실 별 감흥이 없습니다. 판이 조금 비고 점수가 조금 오릅니다. 그런데 조각 하나를 놓으면서 가로 두 줄과 세로 한 줄이 동시에 지워지는 순간은 전혀 다릅니다. 그 한 수를 만들려고 앞의 대여섯 수를 참았다는 사실이 거기서 보상됩니다.
이 형식의 축은 "줄을 지운다"가 아니라 "한꺼번에 지운다"입니다. 그렇다면 설계는 그 순간이 더 자주, 더 크게 오도록 밀어야 합니다.
판을 넓혔습니다
10x10 으로 갔습니다. 한 줄이 길어져 닫기는 어려워지지만, 교차점이 늘어 한 수에 여러 줄을 걸기 쉬워집니다. 8x8 에서는 두 줄을 겹치는 자리가 손에 꼽히는데 10x10 에서는 훨씬 흔합니다.
셀 크기는 판 크기에서 유도합니다(BOARD_PX / W). 그래서 상수 하나를 바꾸면 화면이 따라옵니다. 여기서 한 번 걸렸는데, 타이틀 화면 설명 문구만 "8x8"이라고 손으로 적혀 있어서 판은 넓어졌는데 게임이 스스로를 8x8 이라고 소개하고 있었습니다. 지금은 그 문구도 상수를 읽습니다.
조각 가중치를 다시 짰습니다
판을 넓히면 조각 구성이 그대로일 수 없습니다.
- 긴 직선을 후하게 줍니다. 1x4·1x5 가중치를 올리고 1x6 을 새로 넣었습니다. 10칸 줄은 긴 직선이 없으면 영영 안 닫힙니다.
- 뭉친 덩어리는 낮췄습니다. 3x3·2x3 은 10칸 줄에 기여가 적으면서 자리만 먹습니다.
특수 블록 셋 — 콤보가 낳습니다
한 수로 판을 크게 여는 수단을 넣었습니다. 전부 1칸이고 놓는 순간 사라집니다.
| 특수 | 하는 일 | 나오는 조건 |
|---|---|---|
| 폭탄 | 놓은 자리 3x3 | 콤보 3 |
| 레이저 | 놓은 자리의 가로줄과 세로줄 전체 | 콤보 5 |
| 무지개 | 판에서 가장 많은 색 전부 | 콤보 8부터 세 콤보마다 |
레이저를 십자로 만든 이유는 미적인 게 아닙니다. 1칸짜리 조각에는 방향을 그려 넣을 자리가 없습니다. 가로인지 세로인지 알 수 없는 조각을 주면 플레이어가 계획을 세울 수 없으니, 방향이라는 정보 자체를 없앴습니다.
무지개가 지울 색을 고를 때 같은 개수면 색 번호가 작은 쪽을 고릅니다. 무작위로 고르면 같은 시드가 다른 판이 되어 재현이 깨집니다.
그리고 특수가 나오는 타이밍을 한 번 바꿨습니다. 처음에는 콤보가 터지는 순간 트레이를 갈아 끼웠는데, 그러면 플레이어가 계획해 둔 수를 게임이 뺏어 갑니다. 지금은 다음 리필에 넣습니다. 보상이 방해가 되면 안 됩니다.
연출이 줄 수를 따라갑니다
축이 "한꺼번에"라면 여러 줄을 지웠을 때 화면이 그만큼 달라져야 합니다.
- 파편 양이 줄마다 늘어납니다(+0.35 × (줄-1))
- 3줄 이상이면 화면이 번쩍입니다
- 지워진 줄을 따라 빛이 훑고 지나갑니다
- 파티클 상한을 400 에서 900 으로 올렸습니다
레이저 빔은 파티클이 아니라 선을 직접 긋습니다. 처음에는 파티클로 직선을 흉내냈는데, 링이 줄줄이 늘어설 뿐 "훑고 지나갔다"로 읽히지 않았습니다. 캡처를 보고 갈아엎었습니다.
봇 수치는 오히려 나빠졌습니다
판을 넓힌 뒤 무작위 봇을 돌려 한 판에 지운 줄 수를 재 봤습니다. 1.2 에서 1.0 으로 줄었습니다. 넓혔더니 나빠진 것처럼 보입니다.
여기서 이 숫자를 잘못 읽으면 방향을 되돌리게 됩니다. 무작위 봇은 줄을 노리고 두지 않습니다. 아무 데나 놓는 쪽에게 10칸 줄이 8칸 줄보다 어려운 건 당연합니다. 사람은 줄을 노리고 두고, 노리는 사람에게는 교차점이 많은 쪽이 유리합니다.
그래서 이 숫자는 절대값이 아니라 다이얼을 바꿨을 때의 변화폭으로만 읽습니다. "직선 가중치를 올렸더니 봇 기준으로 얼마나 움직였나" 같은 비교에는 쓸 수 있지만, "이 게임이 재미있나"에는 아무 말도 해 주지 않습니다. 그건 실제로 해 봐야 압니다.
검사가 못 보는 자리
규칙은 렌더에서 완전히 갈라 뒀습니다. 그래야 창 없이 결정론적으로 검사할 수 있습니다. 셀프테스트가 820항목이고, 같은 시드는 항상 같은 판이 됩니다(언어 표준 셔플은 전역 난수를 써서 이 성질을 깨기 때문에 일곱 조각 묶음도 직접 섞습니다).
그런데 그 셀프테스트는 그리기 코드를 아예 로드하지 않습니다. 그리기 쪽 파싱 에러는 820/820 통과 상태에서도 살아남습니다. 그래서 그리기를 건드렸으면 화면 캡처 20장까지 반드시 돌립니다. 검사가 무엇을 보지 않는지를 적어 두지 않으면, 통과 표시가 안전하다는 착각을 만듭니다.
지금 상태
- /block_canvas/ 에서 바로 할 수 있습니다. 설치 없이 브라우저에서 돕니다.
- 안드로이드 앱은 구글 플레이 비공개 테스트 중입니다(2026-09-04). 테스터로 등록된 계정이면 스토어에서 받을 수 있습니다.
- 내장 이미지·오디오 파일이 하나도 없습니다. 블록도 효과음 열여덟 가지도 코드로 만듭니다.
- 내 사진 스킨은 기기 안에만 저장되고 서버로 올라가지 않습니다.
- 콤보 문턱(3/5/8), 특수 위력, 이벤트 간격, 얼음 개수는 전부 잠정값입니다.
덧붙임 (2026-09-04). 이 글을 쓴 뒤에 모드가 셋이 됐고(끼우기·중력·떨어뜨리기), 중력 전환이 일곱 조각에서 다섯 조각으로 줄었습니다. 안드로이드 앱에는 별 다섯 개와 광고가 붙었습니다 — 별은 안드로이드에서만 셉니다. 웹에는 광고가 없어서 별이 바닥나면 기다리는 것 말고 되찾을 길이 없기 때문입니다. 브라우저판에는 별 제한도 광고도 없습니다.
다음은 실제로 오래 해 보면서 한 판에 줄이 몇 개나 나오는지 보는 것입니다.