Emacs 환경에서 즐기는 도시 건설 시뮬레이션 게임 등장!
Emacs Lisp로 구현된 Micropolis/SimCity 클론 게임 개발 소식 공유
"함수형 코어 / 명령형 셸(Functional Core / Imperative Shell)" 아키텍처를 적용하여 확장성 및 테스트 용이성을 확보
ASCII 기반의 UI와 턴제(Turn-based) 게임 플레이 방식 채택
Emacs 환경 의존성(Emacs Dependency)에 대한 커뮤니티의 다양한 의견 제시
함수형 코어 / 명령형 셸(Functional Core / Imperative Shell) 아키텍처
개발자는 "함수형 코어 / 명령형 셸(Functional Core / Imperative Shell)" 아키텍처를 적용하여 게임을 설계했다. 핵심 로직은 순수 함수로 구현하여 테스트와 디버깅을 용이하게 하고, UI는 명령형 방식으로 구현하여 사용자 입력을 처리한다. 이러한 아키텍처는 코드의 가독성(Readability)을 높이고, LLM(Large Language Model) 기반 코드 생성에도 유리하다는 평가를 받는다. 특히, 상태와 효과를 명확하게 분리하여 확장성(Extensibility)을 확보했다.
Emacs 환경에서의 게임 개발
본 게임은 Emacs 환경에서 동작하며, ASCII 기반의 UI를 제공한다. Emacs 30.1+ 버전을 요구하며, Eask를 통한 의존성 관리를 지원한다. 터미널 Emacs 세션(Terminal Emacs Session)에 최적화되어 있으며, `elcity-start` 명령어를 통해 게임을 시작할 수 있다. 또한, 맵을 커스터마이징(Customizing)할 수 있는 기능을 제공하며, ERT 테스트(ERT Tests)를 통해 코드의 품질을 관리한다.
게임 플레이 및 핵심 기능
게임은 턴제 방식으로 진행되며, `n` 키를 눌러 턴을 진행한다. 자금은 인구수, 상업 레벨, 산업 레벨에 따라 증가하며, 도시의 주요 시설인 시청(City Hall)은 도로 연결의 핵심 역할을 한다. 플레이어는 주거(Residential), 상업(Commercial), 산업(Industrial) 구역을 건설하고, 도로와 전력을 연결하여 구역의 레벨을 성장시킬 수 있다. 구역 레벨(Zone Level)은 전력 공급 및 도로 연결 여부에 따라 변동하며, 최대 레벨은 3이다.
커뮤니티 반응 및 개선 방향
커뮤니티에서는 ASCII 기반의 게임에 대한 긍정적인 반응과 함께 Emacs 환경에 대한 의존성을 지적하는 의견이 제시되었다. 일부 사용자는 Emacs와의 결합(Coupling)을 줄여 다른 환경에서도 사용할 수 있도록 개선할 것을 제안했다. 또한, 코딩 에이전트를 활용하여 게임 플레이 피드백을 얻는 방안도 제시되었다. UI/UX 개선(UI/UX Improvement)에 대한 추가적인 논의가 필요하다.