블레츨리 — 전쟁은 이기지만 인간은 잃는 코드브레이커 게임

발행: (2026년 6월 11일 PM 03:26 GMT+9)
8 분 소요
원문: Dev.to

출처: Dev.to

이 작품은 6월 하지 게임잼에 제출된 작품입니다.
Bletchley는 1939‑1945년 베틀리 파크를 배경으로 한 웹 코드브레이킹 게임입니다. 당신은 Hut 6에 소속된 익명의 코드브레이커 역할을 맡게 됩니다. 임무는 제한 시간 안에 기계식 로터를 조정해 가로채진 에니그마 메시지를 복호화하는 것입니다.

게임은 두 가지 암호 방식—시저 암호와 로터 순열—을 활용한 4개의 레벨로 구성됩니다. 초반 레벨에서는 로터 하나와 넉넉한 시간이 주어져 메커니즘을 익히게 됩니다. 레벨 4에 이르면 이미 동료가 풀어 놓은 두 개의 로터를 포함해 총 세 개의 로터를 다루게 되며, 시계는 90초, 힌트는 클릭을 통해 얻어야 합니다.

힌트 시스템은 실제 코드브레이킹 기법인 cribs(평문에 들어 있을 것으로 예상되는 단어)를 모방합니다. 플레이어는 이 단어를 기준점으로 삼아 로터를 돌려가며 복호화된 출력에 해당 단어가 나타날 때까지 탐색합니다. 바로 튜링 팀이 사용했던 방식이죠.

각 레벨 사이마다 화면이 어두워지고 짧은 서술이 나타납니다. UI도 점수도 없이 오직 텍스트만이 등장합니다. 이 서술들은 알란 튜링의 이야기를 연대순으로 엮어 줍니다: 1939년 베틀리 파크에 도착한 순간, 1941년 해군 에니그마를 해독한 순간, 전쟁이 끝난 뒤 비밀리에 침묵된 시기, 그리고 1952년. 게임은 승리 후 바로 끝나지 않습니다. 이는 의도된 설계입니다.

테마 연결: 이 게임은 두 차원에서 튜링을 기립니다—메커니즘은 그가 팀과 함께 개발한 알려진 평문 공격을 재현하고, 서술은 역사가 잊고 싶어했던 그의 전체 이야기를 전합니다. 6월은 프라이드 달이기도 합니다. 이것도 우연이 아닙니다.


영상에 대한 참고: 치과 시술 때문에 보이스오버를 녹음하지 못했습니다. 내레이션은 AI가 생성했습니다. 게임플레이, 코드, 그리고 데모에 포함된 모든 요소는 전부 제가 직접 만든 것입니다.

 / 
        bletchley
      
    

bletchley — 튜링에게 바치는 찬가

코드브레이킹 게임 · 2026년 6월 하지 게임잼 · 알란 튜링에게 바치는 최고의 찬가
당신은 베틀리 파크의 코드브레이커입니다. 에니그마 로터를 조정해 가로채진 메시지를 제한 시간 안에 복호화하세요.
4 레벨 · 2 종류의 암호 · 역사적으로 정확한 crib
로컬에서 실행
npm install && npm run dev
스택
Phaser 3 · Vite · Tone.js · Vercel
GitHub에서 보기
실제 서비스: bletchley.crubio.fyi
스택: Phaser 3 · Vite · Tone.js · Vercel
암호 엔진 (src/logic/enigma.js) — 외부 암호 라이브러리 없이 처음부터 직접 구현했습니다. 각 로터는 메시지의 서로 다른 구간에 독립적인 변환을 적용하므로, 한 로터를 풀어도 다른 로터에 도움이 되지 않습니다. 메커니즘적으로는 구간별 오프셋을 가진 시저 암호와, 26요소 배열을 순차적으로 적용하는 순열 암호를 사용합니다. 엔진은 src/logic/levels.js를 통해 빌드 시 평문 + 로터 설정으로 암호문을 생성하므로, 미리 계산된 값이 하드코딩되지 않습니다.
오디오 — Tone.js를 활용한 100 % 절차적 사운드. 로터 클릭(타자기 신스), 배경 라디오 잡음(노이즈 + 필터), 성공 종소리(사인 + 엔벨로프), 타임아웃 알람. 오디오 파일은 번들에 포함되지 않으며, 모든 사운드스케이프가 런타임에 생성됩니다.
씬 흐름: BootScene → MenuScene → BriefingScene → GameScene → NarrativeScene → (루프) → EndScene
시각 디자인: 어두운 현대적 미니멀리즘 — 고의적으로 1940년대 레트로 스타일을 배제했습니다. 암호문과 로터는 JetBrains Mono, 브리핑과 내러티브는 Inter를 사용합니다. 로터는 부드러운 트윈 회전이 적용된 원형 다이얼이며, 상단을 클릭하면 증가, 하단을 클릭하면 감소합니다.
특히 언급할 만한 결정: 힌트 시스템은 “힌트를 드립니다”가 아닙니다. 힌트는 **crib**—플레이어가 이미 메시지에 포함될 것이라 아는 단어—를 제시합니다. 플레이어는 직관적으로 그 단어에 집중하고 로터를 돌려 복호화된 출력에 단어가 초록색으로 강조될 때까지 탐색합니다. 이 메커니즘은 에니그마가 실제로 어떻게 깨졌는지를 플레이어에게 가르쳐 줍니다.
알란 튜링에게 바치는 최고의 찬가
이 경의는 두 차원에서 작동합니다.
메커니즘: 플레이어는 베틀리에서 튜링 팀이 개척한 알려진 평문 공격(cribs)을 사용합니다. 게임은 단순히 그의 작업을 테마로 한 것이 아니라, 핵심 인터랙션 자체가 그것을 모델링합니다.
내러티브: 게임은 튜링의 이야기를 솔직히, 순서대로, 결말을 부드럽게 하지 않고 전달합니다. 최종 인터셉트를 해결한 뒤, 플레이어는 1952년에 일어난 일—체포, 화학적 거세, 보안 등급 박탈—을 읽게 됩니다. 이어 1954년, 41세에 사망한 사실을 확인하고 마지막 문장을 마주합니다.
그는 세계를 구했습니다. 게임은 그가 받은 대가를 잊
0 조회
Back to Blog

관련 글

더 보기 »