github

던전 & 데스크톱: GitHub Copilot CLI로 절차적으로 생성되는 로그라이크 만들기 (새 탭에서 열림)

GitHub Dungeons는 GitHub 저장소를 터미널에서 플레이할 수 있는 로그라이크 던전으로 변환한 Go 기반 GitHub CLI 확장이다. 저장소의 최신 커밋 SHA를 시드로 삼아 BSP(Binary Space Partitioning) 방식으로 방과 통로를 생성하므로, 같은 커밋에서는 같은 맵이 만들어지고 코드가 변경되면 던전도 달라진다. 저자는 GitHub Copilot CLI의 /delegate와 에이전트를 활용해 구현과 문서화를 위임하고, 게임 설계와 플레이 경험에 집중했다.

코드 저장소가 로그라이크 던전이 되는 방식

  • 저장소의 코드 구조를 바탕으로 방, 통로, 적, 출구가 있는 던전을 생성한다.
  • 플레이어는 터미널에서 화살표 키로 이동하며 버그와 싸우고 출구를 찾아야 한다.
  • HP가 0이 되면 처음부터 다시 시작하는 영구 사망(permadeath) 구조를 따른다.
  • 저장소마다 맵의 구조가 달라지고, 커밋이 바뀔 때마다 새로운 레이아웃이 만들어진다.
  • 최신 커밋 SHA를 난수 생성의 시드로 사용한다.
    • 같은 커밋은 항상 같은 던전을 생성한다.
    • 서로 다른 저장소는 구조적으로 서로 다른 맵을 만든다.
    • 코드 변경은 던전의 변화로 이어진다.

로그라이크와 절차적 생성

  • 로그라이크는 1980년대 게임 Rogue에서 시작된 장르다.
  • 주요 특징은 다음과 같다.
    • 실행할 때마다 달라지는 절차적 생성 맵
    • 죽으면 다시 시작하는 영구 사망
    • 텍스트 기반 인터페이스
  • 절차적 생성은 콘텐츠를 사람이 하나씩 설계하는 대신, 규칙과 무작위성을 이용해 알고리즘으로 생성하는 방식이다.
  • 하나의 던전을 직접 만드는 것이 아니라, 여러 던전을 생성할 수 있는 시스템을 만든다는 점이 핵심이다.
  • 이러한 구조 덕분에 매 플레이마다 레이아웃과 상황이 달라져 반복 플레이가 가능해진다.

BSP 기반 던전 생성

  • BSP(Binary Space Partitioning)는 큰 공간을 반복해서 더 작은 영역으로 나누는 알고리즘이다.
  • 기본 흐름은 다음과 같다.
    • 전체 던전을 하나의 큰 직사각형 공간으로 설정한다.
    • 공간을 두 영역으로 분할한다.
    • 각 영역을 재귀적으로 다시 나눈다.
    • 충분히 작은 영역 안에 방을 배치한다.
    • 방들을 통로로 연결한다.
  • BSP가 로그라이크에 적합한 이유는 다음과 같다.
    • 직사각형 방을 만들기 쉽다.
    • 방 사이의 연결 구조를 보장하기 쉽다.
    • 완전히 무작위인 맵보다 구조적으로 이해하기 쉽다.
    • 일정한 규칙 안에서 무작위성이 생겨 매번 다른 맵을 만들 수 있다.
  • 결과적으로 맵은 무질서하지 않으면서도 반복 플레이에 적합하고, 막다른 길이나 이동 불가능한 구조를 줄일 수 있다.

GitHub Copilot CLI를 활용한 개발

  • 저자는 Go 문법을 모두 직접 작성하기보다, Copilot CLI에 원하는 동작을 자연어로 설명하는 방식으로 개발했다.
  • /delegate 명령은 작업을 클라우드에서 실행되는 Copilot 코딩 에이전트에 위임한다.
    • 개발자는 요구사항을 평문으로 작성한다.
    • 에이전트가 비동기적으로 코드를 구현한다.
    • 작업이 끝나면 결과가 Pull Request로 생성된다.
    • 개발자는 PR을 검토하고 수정해 완성도를 높인다.
  • 예를 들어 다음과 같은 요구를 위임했다.
    • 레벨이 올라갈수록 적을 늘리고, 대신 체력 회복 아이템도 추가하기
    • 플레이어를 무적으로 만드는 치트 코드 추가하기
  • Copilot이 초기 구현과 보일러플레이트를 맡는 동안 저자는 난이도 조정, 게임 메커니즘, 이스터 에그 등 플레이 경험에 집중했다.

에이전트를 통한 문서화

  • 저자는 Copilot으로 “dungeon scribe”라는 별도 에이전트도 생성했다.
  • 이 에이전트는 다음 작업을 수행했다.
    • 던전 생성 방식에 대한 문서 작성
    • ASCII 아트 다이어그램 생성
    • BSP 기반 레이아웃 생성 과정 설명
  • 이를 통해 구현 코드뿐 아니라 알고리즘의 동작 원리와 프로젝트 구조도 함께 문서화할 수 있었다.

실용적인 결론

절차적 생성과 커밋 기반 시드를 결합하면 코드 저장소 자체를 재현 가능하면서도 변화하는 게임 세계로 만들 수 있다. 또한 Copilot CLI의 /delegate처럼 구현 작업을 에이전트에 위임하고 결과를 PR 단위로 검토하는 방식은, 개발자가 반복적인 코딩보다 기능 설계와 사용자 경험에 집중하는 데 유용하다.