TL;DR

  • 클래식 1990년 MS-DOS용 Microsoft QBasic 게임 Nibbles를 C#과 .NET 10으로 충실히 재현하고, 원작의 9개 레벨, 동시 2인 플레이, PC 스피커 사운드를 구현함.
  • CP437/유니코드 반블록 렌더링으로 표준 80x25 터미널에서 80x50 가상 해상도를 표현하고, 컬러·흑백 모드를 지원함.
  • 원작 QBasic PLAY 매크로 문자열을 해석하는 8비트 사각파 사운드 엔진이 Windows winmm.dll과 Console.Beep 대체 경로를 사용함.
  • BFS 경로 탐색과 플러드 필 생존 AI를 이용하는 자동 데모 모드와 18개 자동 단위 테스트를 포함함.
  • 일반 실행, 빠른 시작, 플레이어·난이도 설정, 음소거 등 명령줄 옵션을 제공하며 .NET 10 SDK 또는 .NET 8·9와 UTF-8 터미널이 필요함.

개요

  • Rick Raddatz가 작성한 원작 NIBBLES.BAS를 바탕으로 클래식 1990년 MS-DOS Microsoft QBasic 게임 Nibbles를 현대적으로 충실히 재현한 C# 게임임.
  • 터미널에서 깜빡임 없이 실행되며, PC 스피커 사운드 효과, 서브픽셀 텍스트 렌더링, 원작의 9개 레벨을 제공함.

기능

  • QBasic 시각 효과와 텍스트 모드 시뮬레이션
  • 원작 CP437/유니코드 반블록 렌더링 방식인 ▀, ▄, █을 사용해 표준 80x25 터미널 텍스트 모드에서 80x50 가상 해상도를 구현함.
  • 클래식 QBasic 색상 구성은 남색 플레이 영역, 노란색 Sammy, 밝은 자홍색 Jake, 밝은 빨간색 벽, 밝은 흰색·빨간색 대화창임.
  • 컬러 및 흑백 모니터 모드, 애니메이션으로 반짝이는 테두리가 있는 타이틀 화면, 뱀이 충돌할 때의 클래식 10단계 인터레이스 디졸브 사망 애니메이션을 제공함.
  • IBM PC 스피커 사운드 엔진
  • 원작 QBasic PLAY 매크로 문자열을 위한 내장 인터프리터를 제공함.
  • 빈티지 Intel 8253 PIT PC 스피커 버저와 일치하는 8비트 사각파 오디오를 합성함.
  • Windows에서는 winmm.dll을 통해 비동기 재생하고, 대체 경로로 Console.Beep을 사용함.
  • 네 가지 대표 음악·효과음은 인트로 테마 MBT160O1L8CDEDCDL4ECC, 라운드 시작 T160O1>L20CDEDCDL10ECC, 숫자 먹기 MBO0L16>CCCE, 충돌 사운드 MBO0L32EFGEFDC임.
  • M 키로 음소거를 전환함.
  • 1인 및 동시 2인 플레이
  • 플레이어 1 Sammy는 방향키(↑, ↓, ←, →)를 사용함.
  • 플레이어 2 Jake는 W, S, A, D 키를 사용함.
  • 클래식 레벨 미로 9개와 무한 모드
  • 모든 벽 좌표, 플레이어 시작 위치, 초기 방향이 원작 Microsoft 소스 코드와 수학적으로 동일함.
  • 레벨 1은 개방형 경기장, 레벨 2는 중앙 가로 장벽, 레벨 3은 두 개의 세로 기둥, 레벨 4는 서로 마주 보는 모서리 장벽, 레벨 5는 모서리에 틈이 있는 중앙 폐쇄 상자임.
  • 레벨 6은 중앙 통로가 있는 세로 막대 7개, 레벨 7은 점선 세로 분할선, 레벨 8은 엇갈린 세로 빗살, 레벨 9는 대각선 장벽임.
  • 레벨 10 이후에는 엇갈린 장애물 필드가 이어짐.
  • 자율 AI 데모 모드
  • --demo 옵션으로 내장 BFS 경로 탐색 및 플러드 필 생존 AI가 게임을 자율적으로 진행함.
  • 키보드 조작 없이 게임플레이를 관찰하고 확인할 수 있으며, Esc 또는 아무 키를 눌러 종료함.
  • 자동 단위 테스트
  • PLAY 문자열 파서, 사운드 주파수, 경기장 경계, 좌표 변환, 레벨 맵, AI 경로 탐색을 검증하는 자동 테스트 18개를 포함함.

요구 사항

  • .NET 10 SDK 또는 .NET 8·9가 필요함.
  • Windows Terminal, PowerShell, CMD, VS Code Terminal 등 UTF-8을 지원하는 터미널이 필요함.

실행 방법

  • 기본 대화형 게임은 dotnet run으로 실행함.
  • 실행 후 클래식 QBasic 프롬프트에서 플레이어 수(1 또는 2), 실력 수준(1~100), 게임 중 속도 증가 여부(Y 또는 N), 컬러·흑백 모니터 모드(C 또는 M)를 선택함.
  • 자율 AI 데모는 dotnet run -- --demo로 실행함.
  • 인트로 프롬프트를 건너뛰고 1인 플레이어와 실력 수준 50으로 빠르게 시작하려면 dotnet run -- --quick --players 1 --skill 50을 실행함.

명령줄 옵션

  • 사용 형식은 dotnet run [options]임.
  • --demo: 자율 AI 데모 모드를 실행하며 Esc 또는 키 입력으로 종료함.
  • --quick: 인트로와 설정 화면을 건너뛰고 기본값으로 바로 시작함.
  • --players <1|2>: 플레이어 수를 1명 또는 2명으로 설정함.
  • --skill <1-100>: 게임 속도·실력 수준을 설정하며 1은 초보, 90은 전문가, 100은 Twiddle Fingers임.
  • --color: 컬러 모드를 활성화하며 기본 색상은 파란 배경과 노란색·자홍색 뱀임.
  • --mono: 흑백 모니터 모드를 활성화함.
  • --mute: 음소거 상태로 시작함.
  • --no-accel: 레벨 진행에 따른 게임 속도 가속을 비활성화함.
  • -h, --help: 도움말을 표시함.

게임 조작

  • 위로 이동은 플레이어 1이 ↑, 플레이어 2가 W를 사용함.
  • 아래로 이동은 플레이어 1이 ↓, 플레이어 2가 S를 사용함.
  • 왼쪽 이동은 플레이어 1이 ←, 플레이어 2가 A를 사용함.
  • 오른쪽 이동은 플레이어 1이 →, 플레이어 2가 D를 사용함.
  • 일시 정지·재개는 두 플레이어 모두 P를 사용함.
  • 음소거 전환은 두 플레이어 모두 M을 사용함.
  • 게임 종료는 두 플레이어 모두 Esc를 사용함.

단위 테스트 실행

  • dotnet test를 실행하면 핵심 게임 로직과 사운드 시스템을 다루는 자동 테스트 18개가 실행됨.