전차 방어 · SOURCE GUIDE

IRON OUTPOST

적 전차를 막으면서 기지를 지키는 방어 게임입니다. 캐릭터의 생존과 기지의 생존을 다른 상태로 관리하는 설계를 코드로 읽어봅니다.

AI Tools Lab · · 소스 v1.0.0

IRON OUTPOST 실제 실행 캔버스 화면
로컬 브라우저에서 실행한 게임 캔버스입니다. 주변 메뉴·점수판 등은 제외했으며, 게임 내 순간에 따라 화면이 달라집니다.

전차가 살아 있어도 지켜야 할 것이 남습니다

IRON OUTPOST의 목표는 적을 격파하는 것과 기지를 보호하는 것입니다. 플레이어가 포탄을 피하더라도 기지 쪽 통로가 열려 있으면 방어가 위험해집니다. 자신의 이동 공간과 적의 진입 경로를 동시에 읽어야 하는 구조입니다.

벽돌은 포탄으로 파괴할 수 있지만 강철은 통로로 만들 수 없습니다. 같은 장애물처럼 보이는 타일도 역할이 달라, 지형은 장식이 아니라 방어 전략의 일부입니다.

기지·전차·포탄을 나누는 엔진

dist/engine.js의 IronEngine은 게임 상태와 충돌을 처리하고 dist/game.js는 입력과 그리기를 연결합니다. 격자는 N=13, 타일 크기는 T=48로 정의됩니다.

reset()의 baseHP=6은 기지 내구도입니다. 플레이어 전차의 내구도는 makeTank()에서 따로 정합니다. 이 둘을 구분하면 한 대상의 피해가 다른 대상의 생존까지 잘못 바꾸는 설계를 피하는 데 도움이 됩니다.

점유 중인 칸도 장애물입니다

occupied()는 다른 전차가 현재 또는 이동 목표로 점유한 칸을 검사합니다. canMove()는 벽뿐 아니라 기지 위치와 생성 대기 위치도 함께 고려합니다. 이동 판정은 바닥이 비었는지만 보는 문제가 아니라 여러 객체가 같은 공간을 쓰지 않게 하는 규칙입니다.

스테이지별 적 수는 4 + this.stage * 2로 계산됩니다. 화면의 적 수를 직접 고치기보다 이 값을 만들고 소비하는 흐름을 따라가 보세요.

직접 바꿔볼 과제: 기지를 더 오래 버티게 하기

  1. baseHP만 조금 높여 방어 여유가 어떻게 달라지는지 살펴봅니다.
  2. 원래 값으로 돌린 뒤 첫 방어선의 적 수를 결정하는 식을 검토합니다.
  3. 같은 통로를 유지하고 포탄의 압박과 수리 시점이 어떻게 느껴지는지 비교합니다.

기지 내구도와 플레이어 전차 내구도를 한꺼번에 높이면 무엇이 플레이를 쉽게 했는지 구분하기 어렵습니다. 각각을 따로 조절해 보세요.

확인할 부분

포탄이 기지와 전차에 맞았을 때 서로 다른 표시가 바뀌는지 확인합니다. 재시작 후 기지 내구도·남은 전차·격파 수가 초기화되어야 합니다. 맵을 바꿀 때는 기지 주변의 출입 통로와 플레이어의 출발 칸을 막지 않도록 점검하세요.

내 컴퓨터에서 실행하기

  1. 소스 ZIP을 내려받고 압축을 풉니다.
  2. README.md와 dist가 있는 폴더에서 터미널을 엽니다.
  3. 아래 명령을 실행한 뒤 http://127.0.0.1:8080/에 접속합니다.
python3 -m http.server 8080 --bind 127.0.0.1 --directory dist

Windows에서는 python3 대신 py를 사용할 수 있습니다. Python이 없다면 코드 편집기의 로컬 정적 서버를 dist에 연결하세요. 종료는 Ctrl + C입니다.

HTML 파일 더블 클릭보다 로컬 서버를 권장합니다. 모듈·이미지 경로를 일관되게 읽을 수 있습니다. 포트가 사용 중이면 8081 등으로 바꾸고 접속 주소에도 반영하세요. npm 설치나 별도 게임 빌드는 필요하지 않습니다.

이 소스로 할 수 있는 일

이 ZIP에 포함된 AI Tools Lab 제작 소스와 게임 에셋은 개인·상업 목적으로 사용, 복제, 수정, 재배포할 수 있습니다. 저작권 소유권이 양도되는 것은 아닙니다. 이 허락은 AI Tools Lab 사이트의 다른 콘텐츠에는 적용되지 않습니다. 포함되지 않은 외부 폰트·상표 등 제3자 자료는 각 권리자의 조건을 따릅니다.

설명에 있는 수정 과제는 직접 비교해 볼 실습 제안입니다. 수행하지 않은 테스트 결과나 제작 당시의 경험을 의미하지 않습니다. 오류를 발견했다면 게임명·브라우저·조작 순서와 함께 알려주세요.