# Web Catan 게임 개발 진행 기록 ## 프로젝트 개요 - **목표**: 웹 브라우저에서 플레이 가능한 카탄 보드 게임 구현 - **기술 스택**: 순수 HTML/CSS/JavaScript (프레임워크 없음) - **URL**: `http://tkim.planitai.co.jp/blog/20251201-make-web-katan-game/project/index.html` ## 개발 일정 ### 2024-12-01 ~ 2024-12-02 #### 1. 초기 설계 및 문서화 (v1~v10.md) - 게임 요구사항 정의 - 아키텍처 설계 - 각 모듈별 구현 가이드 작성 #### 2. 프로젝트 구조 생성 ``` project/ ├── index.html ├── css/ │ ├── style.css │ ├── board.css │ └── ui.css └── js/ ├── main.js ├── utils/ │ ├── constants.js │ └── helpers.js ├── game/ │ ├── Tile.js │ ├── Board.js │ ├── Player.js │ ├── Building.js │ ├── BuildingManager.js │ ├── DevCard.js │ └── Game.js ├── ai/ │ ├── AIBase.js │ ├── AIEasy.js │ ├── AIMedium.js │ └── AIHard.js └── ui/ ├── BoardRenderer.js └── UIManager.js ``` #### 3. 버그 수정 이력 ##### 3.1 게임 초기화 오류 수정 - **문제**: `this.game.initialize is not a function` - **원인**: Game 클래스에 `initialize()` 대신 `startGame()` 메서드 사용 - **해결**: main.js에서 올바른 메서드 호출 및 `beginSetupPhase()` 추가 ##### 3.2 UI 업데이트 오류 수정 - **문제**: `this.uiManager.updateAll is not a function` - **원인**: 메서드명 불일치 - **해결**: `updateUI()` 로 변경 ##### 3.3 요소 ID 불일치 수정 - **문제**: `Cannot set properties of null (setting 'innerHTML')` - **원인**: UIManager.js와 index.html 간 요소 ID 불일치 - **해결**: - 버튼 ID: `roll-dice` → `roll-dice-btn` 등 - 자원 표시: 개별 요소 ID 사용 (`grain-count`, `brick-count` 등) ##### 3.4 보드 레이아웃 수정 - **문제**: Flat-top 헥사곤이 아닌 Pointy-top 헥사곤 필요 (오리지널 카탄과 동일) - **해결**: - Board.js: 헥사곤 크기 계산 수정 (`hexWidth = √3 × size`, `hexHeight = 2 × size`) - Board.js: `getHexCorners()` 시작 각도 -90도로 변경 - BoardRenderer.js: `createHexagon()` 각도 계산 수정 ##### 3.5 버리기 대화상자 오류 수정 (최신) - **문제**: 주사위 7을 굴렸을 때 `Cannot set properties of null (setting 'onclick')` at UIManager.js:418 - **원인**: `showDiscardDialog` 메서드에서 사용하는 요소 ID가 HTML과 불일치 - **해결**: - UIManager.js 수정: - `discard-confirm` → `confirm-discard-btn` - `classList.add('active')` → `classList.remove('hidden')` - `classList.remove('active')` → `classList.add('hidden')` - index.html 수정: - `discard-current` span 추가 - `picker-selected` div 추가 - `victim-modal` 전체 추가 - `showResourcePicker` 메서드도 동일하게 수정 - `selectVictim` 메서드도 동일하게 수정 ## 테스트 결과 ### Playwright MCP를 통한 자동화 테스트 1. 게임 시작 화면 표시 ✅ 2. AI 플레이어 수/난이도 선택 ✅ 3. 초기 배치 단계 (정착지, 도로) ✅ 4. AI 자동 배치 ✅ 5. 주사위 굴리기 ✅ 6. 자원 획득 ✅ 7. 7 굴렸을 때 버리기 대화상자 ✅ 8. 도둑 이동 (AI) ✅ ## 현재 상태 - 기본 게임 플레이 가능 - 보드 렌더링 정상 (Pointy-top 헥사곤) - 주사위 굴리기 및 자원 배분 정상 - 7 굴림 시 버리기/도둑 이동 정상 - AI 턴 자동 진행 정상 ## 추가 개발 필요 사항 - 거래 기능 테스트 - 개발 카드 사용 테스트 - 게임 종료 조건 테스트 - 최장 도로/최대 기사단 계산 테스트