
장기까지 만들고 나니 이번에는 규칙 설명이 짧은 게임을 해보고 싶었다. 말을 어디에 놓을지 고민하는 대신, 누르면 올라가고 손을 떼면 내려오는 게임. 앞서 만들 게임 목록에 넣어 둔 플래피 버드풍 게임을 골랐다.
이름은 ‘구름새’로 정했다. 원작의 새나 파이프 이미지를 가져오지 않고, 작은 새와 둥근 문을 직접 그리는 방식이다. 이번에도 Sonnet을 썼고, 파일 하나를 내려받아 브라우저에서 여는 HTML5 게임으로 만들었다.
처음에는 점프 높이와 장애물 간격을 살펴볼 생각이었다. 그런데 실제로 멈춰서 들여다본 것은 화면 위의 숫자 두 개였다.

스페이스를 한 번 누르고 추가 입력을 하지 않았다. 새가 올라갔다가 내려왔고, 첫 문을 통과하기 전에 바닥에 닿았다. 점수는 0. 시작 버튼만 눌러 놓고 보는 게임이 아니라는 게 바로 드러났다.
누르고 있는 동안 계속 올라가는 방식도 아니다. 한 번 누를 때마다 위쪽 속도를 다시 주고, 그 뒤에는 중력이 새를 끌어내린다. 그래서 길게 누르는 것과 짧게 여러 번 누르는 것을 구분해야 했다. 키를 누른 채로 있을 때 운영체제가 보내는 반복 입력은 무시하도록 했다.
현재 값은 중력 1,500, 날갯짓 속도 −430이다. 게임 안의 좌표로 계산하면 한 번에 약 62픽셀 올라간다. 문의 위아래 틈은 200픽셀로 시작했다. 숫자만 보면 여유가 있지만, 날아오르는 순간과 내려오는 순간 중 언제 문에 도착하느냐가 달라진다. 이번 버전은 이 값으로 시작하고, 먼저 입력과 기록이 의도대로 동작하는지 확인했다.
1점을 얻었는데 최고 기록은 0이었다
일정한 간격으로 날갯짓 입력을 넣어 첫 문을 통과시킨 뒤 P를 눌렀다. 게임은 멈췄고 점수는 1이 됐다. 그런데 바로 옆의 최고 기록은 0이었다.

처음 코드는 게임이 끝날 때 최고 기록을 갱신하고 저장했다. 끝까지 한 판을 마치면 숫자가 맞아지지만, 중간에 멈춰서 다시 시작하면 방금 얻은 기록을 놓칠 수 있었다. 이번 게임에는 일시정지 화면에도 ‘다시 시작’ 버튼이 있으니, 충분히 생길 수 있는 일이었다.
Sonnet에는 “새 기록을 얻는 순간 표시와 저장을 함께 갱신하고, 일시정지에서 다시 시작해도 남겨 달라”고 요청했다. 죽었을 때의 처리만 고치면 되는 문제가 아니었다. 점수를 얻는 시점에 기록을 남기도록 옮겨야 했다.
한 가지는 더 구분했다. 이미 최고 점수가 갱신된 상태에서 게임이 끝나더라도 ‘새 기록’이라는 안내가 사라지면 안 된다. 그 판을 시작하기 전의 최고 점수를 따로 기억하고, 이번 점수가 그보다 높은지를 비교하도록 했다. 기존 기록과 동점인 경우는 새 기록으로 표시하지 않는다.

수정본에서는 점수 1 옆에 최고 1이 바로 나타났다. 일시정지에서 다시 시작한 뒤 새로고침도 해봤다. 현재 점수는 0으로 돌아갔지만 최고 기록은 1로 남았다. 이번에 바꾼 것은 새가 날아가는 감각이 아니라, 한 번 얻은 기록이 남는 시점이었다.
잠깐 멈추는 것도 게임의 일부였다
일시정지 상태에서 스페이스를 눌러도 새가 움직이거나 게임이 재개되지 않게 했다. 다시 날아갈 준비가 됐을 때 P나 ‘계속하기’를 눌러야 한다. 재개 직후에는 약 0.9초의 준비 시간을 두었다. 게임 오버 뒤에도 날갯짓 키로 바로 새 판이 시작되지 않고, R이나 다시 하기 버튼을 사용한다.
작은 화면에서는 안내 문구도 손봤다. 처음에는 마지막 ‘요’ 한 글자만 다음 줄로 내려가 있었다. 시작 안내를 짧게 줄이고 한글 단어가 중간에서 끊기지 않게 했다. 브라우저 화면 폭을 320픽셀과 390픽셀로 바꿔 배치를 확인했다. 실제 휴대폰에서의 터치 감각까지 확인한 것은 아니다.
마지막으로 문 하나에 점수가 한 번만 붙는지, 문과 바닥에 닿으면 끝나는지, 일시정지 중 위치가 그대로인지, 다시 시작해도 최고 기록이 유지되는지를 검사했다. 엔진 테스트는 수정 후 29개를 통과했다. 이런 검사는 규칙이 어긋나는 부분을 찾는 데 유용하지만, 오래 해도 재미있는지는 별도로 더 플레이해 봐야 한다.
버튼 하나로 조작하는 게임을 골랐는데, 첫 문을 넘은 뒤에야 눈에 들어온 것이 있었다. 플레이 도중 잠깐 멈추거나 새 판을 열어도 방금 한 일이 사라지지 않아야 한다는 점이다. 오늘은 난이도 숫자를 더 만지는 대신, 그 1점부터 제대로 남기기로 했다.