예능식 퀴즈와 추억의 플래시 게임을 웹에서 즐기는 심심오락실(simsim-arcade) 팀 프로젝트.
Cloudflare Pages + Workers + D1, React + Hono, pnpm 모노레포로 만들고 있다.
오늘은 힌트 퀴즈를 크게 손보고, 두 번째 게임 국기 퀴즈를 새로 만들었다.
| PR | 내용 |
|---|---|
| #31 | 힌트 퀴즈 — 외국 선수 이름을 국내 통용 표기로 보정, 발음 기호 입력 인정 |
| #32 | 게임 카드 번호를 4명이 돌아가며 자동 배정 |
| #33 | 축구선수 문제를 FC온라인 인기 선수 위주로 교체 |
| #34 | 한 글자 성(요나탄 타, 루크 쇼)도 부분 정답 인정 |
| #35 | 힌트 퀴즈에 ⚾ 야구선수(KBO) 장르 추가 |
| #36 | 🏳️ 새 게임 국기 퀴즈 (카드 5) |
| #38 | 힌트 퀴즈 동물·음식 50문제씩, 나라 195문제로 확대 |
(#37 스카이 에이스는 팀원 신영의 새 게임 — 오늘 main 에 같이 들어왔다)
힌트 퀴즈 축구선수 문제는 위키데이터에서 자동으로 만든다. 그런데 정답이 위키데이터 한국어 이름 그대로라
"하칸 칼하노글루" 처럼 국내에서 잘 안 쓰는 표기가 정답으로 나오는 문제가 있었다. (보통은 "찰하놀루")
Çalhanoğlu, Modrić, Özil 처럼 발음 기호가 붙은 이름이 별칭 필터에 걸려 빠지고 있었다.// 라틴 문자만 바꾼다 — 문자열 전체를 NFD 로 바꾸면 한글이 자모로 풀려 버린다
text.replace(/[À-ɏḀ-ỿ]/g, (ch) =>
ch.normalize('NFD').replace(/[̀-ͯ]/g, ''));
배운 점:
normalize('NFD')를 한글이 섞인 문자열 전체에 걸면 "가" 가 "ㄱ+ㅏ" 로 쪼개진다. 범위를 좁혀서 써야 한다.
팀원 4명이 1인 1게임으로 카드 1~4번을 맡고 있었는데, 이제 두 번째 게임을 만들 차례.
몇 개를 추가하든 자기 번호가 정해지도록 4명이 돌아가며 번호를 받는 규칙으로 바꿨다.
내 n번째 게임의 카드 번호 = (n − 1) × 4 + 내 순번
| 순번 | 담당 | 카드 번호 |
|---|---|---|
| 1 | 혁 | 1, 5, 9, … |
| 2 | 경수 | 2, 6, 10, … |
| 3 | 신영 | 3, 7, 11, … |
| 4 | 동한 | 4, 8, 12, … |
메인 화면 카드 칸도 고정 4칸 대신, 등록된 가장 큰 번호가 속한 4장 묶음까지 자동으로 생기게 했다.
(5번이 등록되면 5~8 칸이 생기고 비어 있는 칸은 "준비 중")
문제를 풀어 보니 옛날 레전드 선수가 너무 많았다. 위키백과 문서 수로 유명도를 매기다 보니
1979년 이전 출생이 36%나 됐다.
그래서 FC온라인에서 인기 있는 선수를 기준으로 바꿨다.
제일 까다로웠던 건 두 데이터를 잇는 일이었다. 위키데이터에 EA 선수 ID 가 없어서 한국어 이름으로 맞춰야 했다.
후속으로 "요나탄 타", "루크 쇼" 처럼 성이 한 글자인 선수는 성만 입력하면 오답이던 것도 고쳤다 (#34).
두 글자 이상 성("포든")은 되는데 한 글자만 안 되는 게 어색했다. 앞쪽 한 글자 이름("존", "벤")은 너무 흔해서 계속 오답.
배운 점: 이름으로 두 데이터를 잇는 건 생각보다 틀리기 쉽다. 자동 연결 결과를 사람이 검토하는 단계가 꼭 필요했다.
축구와 같은 방식으로 위키데이터에서 KBO 선수 295명을 만들었다.
작은 함정도 하나 있었다. 축구 시드가 "위키데이터로 만든 문제"를 전부 지우고 다시 넣고 있었는데,
시드는 파일 이름 순서로 적용되니 hint-quiz-baseball.sql 이 먼저 들어가고 hint-quiz-football.sql 이 야구 문제를 지워 버린다.
→ 각 시드가 자기 장르만 지우도록 삭제 조건에 장르를 추가했다.
내 두 번째 게임 (카드 5).
신경 쓴 부분
import.meta.glob 으로 불러서 화면에 나올 때만 내려받는다.| 장르 | 전 | 후 | 방식 |
|---|---|---|---|
| 🐾 동물 | 8 | 50 | 직접 작성 |
| 🍜 음식 | 6 | 50 | 직접 작성 (한식 22 · 세계 음식 22) |
| 🌏 나라 | 8 | 195 | 위키데이터 자동 생성 |
그리고 테스트에서 재밌는(?) 버그를 찾았다. 외래어 표기 차이를 봐주려고 만든 "비슷한 표기도 정답" 규칙 때문에
…이런 게 14건이나 나왔다. 선수 이름에서는 유용한 규칙이 나라 이름에서는 독이 됐다.
→ 나라 장르는 정확히 일치(별칭 포함)만 인정하고, 대신 "한국·남한·남아공·usa·uk" 같은 줄임말을 별칭으로 넣었다.
배운 점: 같은 판정 규칙이라도 데이터 성격에 따라 맞고 틀리다. 장르를 추가할 때마다 "다른 문제의 정답이 이 문제에서 정답 처리되는지" 교차 검사를 돌린 게 큰 도움이 됐다.
오늘의 교훈 세 줄
다음엔 팀원들의 두 번째 게임이 들어올 차례!