게임2026. 8. 24.

3D FPS 아레나

3D FPS 아레나 - 1
3D FPS 아레나 - 2

Gemini를 이용해 만든 박진감 넘치는 3D 웹 FPS 슈팅 게임.

💡 만든 동기

이 3D FPS 슈팅 게임을 만들게 된 동기는 파이썬과 다양한 프로그래밍 개념을 꾸준히 배우고 직접 게임을 구현해 보는 과정에서 출발했습니다. 단순히 이론을 공부하는 것을 넘어, 평소에 즐겨하던 게임의 핵심 시스템—예를 들어 다양한 무기와 근접 무기 슬롯, 웨이브 형식의 적 등장, 그리고 화려한 UI와 몰입감 넘치는 플레이 요소들을 직접 내 손으로 코딩하고 구현해 보고 싶다는 열정에서 시작되었습니다. 특히 게임 속의 무기 시스템, 난이도 조절, 그리고 다양한 장애물과 스테이지 메커니즘을 하나씩 해결해 나가며 프로그래밍의 재미를 깊이 느끼게 된 것이 가장 큰 계기입니다.

🤔 어려웠던 점

복잡한 버그와 타이밍 조절: 게임이 특정 포인트 임계값에서 클리어되지 않거나, 움직이는 바닥(엘리베이터 등)과 같은 타이밍 기반의 장애물 및 상승 플로어 메커니즘을 정확히 동기화하는 데 어려움을 겪었습니다. 다양한 게임 시스템 구현: 적의 웨이브 등장 방식뿐만 아니라 이지(Easy)/하드(Hard) 난이도 선택 로직, 점수 체계, 보스 체력 바 등을 한 번에 유기적으로 연결하고 작동시키는 과정이 까다로웠습니다. 코드 오류 해결: 자바스크립트나 프로그래밍 코드를 작성하고 확장하는 과정에서 함수(예: createWall 등)가 정의되지 않았거나 변수 참조 오류(ReferenceError)가 발생할 때 이를 추적하고 수정하는 데 많은 노력이 필요했습니다.

🛠 해결한 방법

단계별 디버깅 및 함수 누락 수정: 오류가 발생했을 때 코드를 꼼꼼히 검토하며 누락된 함수(createWall 등)나 참조 오류(ReferenceError)가 난 부분들을 찾아 하나씩 정의하고 보완했습니다. 타이밍 및 상태 조건 세분화: 게임 클리어 조건이나 상승 플로어 메커니즘의 타이밍 문제를 해결하기 위해, 조건문과 이벤트 트리거의 수치를 조정하며 플레이 흐름이 어긋나지 않도록 맞추어 나갔습니다. 로직 모듈화 및 기능 분리: 무기 선택, 난이도(Easy/Hard), 점수 시스템 등 복잡하게 얽혀 있던 요소들을 기능별로 나누어 정리하고, 코드가 서로 충돌하지 않도록 유기적으로 연결했습니다.

✨ 배운 점

문제 해결 능력(디버깅)의 중요성: ReferenceError나 함수 누락 같은 코딩 오류를 마주했을 때, 당황하지 않고 에러 메시지를 차근차근 분석하며 원인을 찾아 수정하는 끈기를 배웠습니다. 논리적 사고와 구조화: 난이도 설정, 점수 시스템, 무기 슬롯, 장애물 타이밍 등 복잡한 요소를 구현하면서 프로그램을 기능별로 나누고 유기적으로 연결하는 설계 능력이 자랐습니다. 꾸준함과 성취감: 기획부터 버그 수정까지 직접 완성해 나가는 과정을 통해, 어려움이 생겨도 포기하지 않고 끝까지 해결했을 때 얻는 커다란 성취감과 프로그래밍의 재미를 깊이 깨달았습니다.