포스트

보드게임 9개를 엔진 하나로 — 10월 9일 출시까지 8일 회고

리버시·사목·고누·체커·점 잇기·만칼라·해전·윷놀이·장기, 보드게임 9개를 공용 엔진 하나 위에 만들어 10월 9일 토스에 출시했습니다. 실수로 난이도를 만드는 AI, 장기 빅장 규칙을 두고 한 결정, 홈 화면 옵션을 하루에 두 번 갈아엎은 일, 토스 게임 화면의 위쪽 여백, 상표를 피한 이름, 윷놀이가 숷놀이로 등록된 일까지 정리했습니다

보드게임 9개를 엔진 하나로 — 10월 9일 출시까지 8일 회고

10월 9일에 보드게임 9개를 토스에 출시했습니다. 리버시, 사목, 고누, 체커, 점 잇기, 만칼라, 해전, 윷놀이, 장기입니다. 구글 플레이에는 그보다 이틀 앞선 10월 7일에 모두 승인됐습니다.

만들기 시작한 건 10월 1일이고, 9개가 처음 한 커밋에 들어간 건 10월 2일 새벽입니다. 출시까지 8일 동안 한 일과, 다시 한다면 처음부터 다르게 할 것을 적어 둡니다.

엔진 하나에 게임 아홉

보드게임은 겉모습이 달라도 흐름이 같습니다. 홈에서 모드·난이도·선공을 고르고, 판을 두고, 결과를 보고, 전적을 남깁니다. 그래서 이 흐름을 공용 엔진으로 먼저 만들고, 게임마다 다른 부분만 따로 짰습니다.

  • 엔진이 맡는 것: 홈·게임·결과·전적 화면 흐름, 판 그리기(칸에 두는 판과 교차점에 두는 판), 탐색 AI, 9개 언어 공통 문구, 광고·알림·뒤로가기 같은 플랫폼 처리
  • 게임이 맡는 것: 규칙과 AI 평가 함수, 게임 고유 문구, 판 색과 말 모양

기준 구현은 리버시 하나로 정해 두고, 나머지 8개는 그 파일 구성을 그대로 따르게 했습니다. 게임마다 규칙 테스트가 있고, AI끼리 끝까지 두게 해서 판이 멈추지 않는지, 어려움이 쉬움을 이기는지도 테스트로 확인합니다.

9개를 AI 코딩 에이전트 여러 개에 나눠 맡겼더니, 한 시간쯤 만에 사용 한도에 걸려 절반 넘게 멈췄습니다. 한도가 풀린 뒤 멈춘 자리부터 이어서 시키니 처음부터 다시 할 필요는 없었습니다. 동시에 너무 많이 돌리면 오히려 늦어진다는 걸 배웠습니다.

AI는 ‘실수’로 난이도를 만든다

체커·고누·장기·만칼라처럼 두 사람이 번갈아 두는 게임은 공용 탐색 AI를 씁니다. 설계에서 정한 것은 세 가지입니다.

  1. 차례를 매 수마다 규칙에 다시 묻습니다. 만칼라는 마지막 씨앗이 내 창고에 들어가면 한 번 더 두고, 점 잇기는 상자를 완성하면 한 번 더 긋습니다. “번갈아 둔다”고 가정하면 이런 게임에서 AI가 틀립니다.
  2. 생각할 시간을 정해 둡니다. 얕은 깊이부터 점점 깊게 보다가 시간이 다 되면 마지막으로 끝까지 본 깊이의 답을 씁니다. 폰 성능이 달라도 기다리는 시간이 비슷합니다.
  3. 난이도는 깊이가 아니라 실수로 만듭니다. 깊이만 줄이면 어려움과 똑같아 보이는 수를 두다가 어느 순간 갑자기 집니다. 그래서 최선의 수와 점수 차가 조금 나는 수들 중에서 고르게 하고, 쉬움은 가끔 아무 수나 둡니다. 사람이 두는 것처럼 보이는 쪽이 더 재미있었습니다.

규칙을 정해야 했던 곳

보드게임은 지역마다, 대회마다 규칙이 조금씩 다릅니다. 앱은 하나를 골라야 합니다.

  • 장기 빅장. 두 장군(궁)이 가로막는 기물 없이 마주 보는 것을 빅장이라고 합니다. 처음에는 대회식으로, 빅장을 풀지 않으면 그 자리에서 점수로 승패를 가렸습니다. 그런데 집에서 두는 장기는 빅장이면 비기는 경우가 많습니다. 결국 전통 규칙대로 빅장은 무승부로 바꿨습니다. AI도 이 규칙에 맞춰, 지고 있을 때는 빅장으로 비기고 이기고 있을 때는 빅장을 풉니다. 스토어 설명 29개 언어에 있던 “비김 없음” 문장도 같이 고쳤습니다.
  • 고누. 고누는 종류가 많아서 우물고누·호박고누·참고누 세 가지를 넣었습니다.
  • 윷놀이 빽도. 빽도를 쓸지 말지는 홈에서 고르게 했습니다.

홈 화면 옵션을 하루에 두 번 갈아엎었다

10월 3일 하루에 홈 화면을 두 번 다시 만들었습니다.

처음에는 모드·변형·난이도·선공을 줄마다 버튼 묶음으로 늘어놓았습니다. 옵션이 많은 게임은 이 줄이 서너 줄이 돼서, 정작 시작 버튼과 다른 앱 소개가 첫 화면 밖으로 밀려났습니다. “토글로 할 수 있는 건 토글로, 돌려 가며 바꿀 수 있는 건 돌리는 버튼으로” 줄이자는 의견이 나와 칩 한 줄로 바꿨습니다. 칩에는 지금 값 하나와 점(●○○)만 보이고, 누를 때마다 다음 값으로 넘어갑니다.

그날 밤 다시 지적을 받았습니다.

  • 점만 있어서 무엇을 고르는 칩인지 알 수 없다.
  • 2인 대전으로 바꾸면 난이도·선공 칩이 사라져서 줄이 흐트러진다.
  • 글자 길이에 따라 한 줄에 칩이 2개였다 3개였다 한다.

그래서 2열 고정 칸으로 다시 만들었습니다. 한 줄에 왼쪽·오른쪽 두 칸만 두고, 칸 위에 이름(모드·난이도·선공), 아래에 값을 씁니다. 지금 의미가 없는 칸은 숨기지 않고 흐리게 둡니다. 2인 대전이면 난이도 칸이 흐려질 뿐 자리는 그대로입니다. 값은 반 칸에 들어가도록 짧게 줄였고, 9개 언어 × 폭 3가지로 넘치는 곳이 없는지 확인했습니다. 이미 출시돼 있던 오목도 같은 칸으로 바꿨습니다.

다시 한다면 처음부터 칸으로 만들겠습니다. 옵션을 숨기면 화면이 움직이고, 화면이 움직이면 사람이 헷갈립니다.

토스 게임 화면의 위쪽

비게임 앱을 고칠 때 토스 화면 위아래 여백을 없애는 처방을 쓴 적이 있어서, 보드게임에도 똑같이 적용했습니다. 이게 틀렸습니다. 토스의 게임 카테고리는 전체 화면이라, 웹뷰가 상태바 밑까지 그리고 오른쪽 위의 닫기·더보기 버튼이 그 위를 덮습니다. 실제 폰에서 보니 화면 위쪽 정보가 버튼에 가려 있었습니다.

토스가 알려 주는 안전 영역 값을 받아서 그만큼 위를 띄우고, 오른쪽 위 버튼 자리는 비워 두는 것으로 고쳤습니다. 같은 토스 안에서도 게임과 비게임의 화면 규칙이 다르다는 것을 이번에 확실히 알았습니다.

이름은 상표를 피해서

익숙한 이름 중 몇 개는 상표입니다. 그래서 리버시(오셀로가 아니라), 사목(커넥트 포가 아니라), 해전(배틀십이 아니라)으로 지었습니다. 해전은 영어판 배 이름에도 그 단어를 쓰지 않았고, 사목의 포르투갈어 이름도 현지에서 팔리는 상품명을 피해 따로 정했습니다. 스토어 문구에 이런 이름이 섞이지 않도록 점검하는 검사도 출시 과정에 넣어 두었습니다.

출시 — 그리고 숷놀이

플레이에는 10월 3일 밤에 9개를 모두 제출했습니다. 해전은 콘텐츠 등급 설문에서 폭력 문항을 “아니요”로 답했습니다. 격자 위에 불꽃과 점이 표시될 뿐, 사람이나 피는 나오지 않기 때문입니다.

토스는 플레이 승인으로 게임 등급 인증 번호가 나온 뒤에 냈습니다. 마침 10월 1일부터 첫 등록을 앱 정보와 번들을 한 번에 검수받는 방식으로 바뀌어서, 그 과정은 따로 정리해 두었습니다.

하나 부끄러운 일도 적어 둡니다. 10월 2일 토스에 앱을 처음 만들 때 윷놀이 제목이 ‘숷놀이’로 등록됐습니다. 한글을 코드 값으로 바꿔 넣다가 한 글자를 잘못 친 것입니다. 첫 등록 전에는 제목을 고치는 길이 막혀 있어서, 첫 등록 때까지 테스트 알림이 ‘숷놀이’로 왔습니다. 첫 등록 화면에서 ‘윷놀이’로 직접 입력해 바로잡았습니다. 이 사고 뒤로 한글 문구는 손으로 변환하지 않고 원문 그대로 넣는 것을 규칙으로 못박았습니다.

다시 한다면

  • 옵션은 처음부터 고정 칸으로. 숨기지 말고 흐리게.
  • 토스 게임은 전체 화면이라는 것부터 확인. 비게임 처방을 그대로 가져오지 않기.
  • 규칙이 갈리는 곳은 먼저 정하고 시작. 빅장처럼 나중에 바꾸면 스토어 설명 29개 언어까지 같이 고쳐야 합니다.
  • 에이전트는 적게, 오래. 한꺼번에 많이 돌리면 한도에 걸려 더 늦어집니다.

9개 모두 AI와 혼자 둘 수 있고, 함대 위치를 숨겨야 하는 해전을 빼면 한 폰으로 둘이서도 둘 수 있습니다. 가족끼리 윷놀이나 장기를 한 판 두실 때 써 보셔도 좋겠습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.