사례

디펜스게임

결과물 새 탭 ↗
프로젝트 시작9월 27일 오전 10:06바로 개발 시작
개발 내용
디펜스게임을 만들거고 순서는 다음과 같아. 1. 내가 우선 기획 문서를 업로드 할거야. 2. 내가 올렸다고 말해주면 너는 그거 보고 개발하면돼.
실행결과 · 4초 소요
기획 문서를 업로드한 뒤 “올렸어”라고 알려주세요. 그때 문서를 확인하고 디펜스 게임 개발을 시작하겠습니다.
✅ 완료
다음은 기획 내용이다 보고 개발해 # 3D 타워 디펜스 — 새 프로젝트 재제작 명세서 기준일: 2026년 9월 27일 ## 1. 문서의 목적과 제작 요청 이 문서에 적힌 게임을 새 프로젝트에 구현한다. 원본 프로젝트나 이전 대화를 읽지 않아도 개발할 수 있도록 현재 확정된 규칙·수치·화면·조작과 계산 방식을 한 문서에 정리했다. 변경 이력과 향후 기능 제안은 제작 범위에 포함하지 않는다. 게임 이름은 **3D 타워 디펜스 / Tower Defense 3D**다. 밤하늘에 떠 있는 섬 위에 타워를 설치해 지그재그 길을 따라오는 적을 막는 싱글 플레이 웹 게임이다. 라이프가 남아 있는 동안 무한 라운드에 도전하며, 적 처치 골드로 건설·강화·회복을 선택한다. PC와 모바일 브라우저를 지원한다. React + Vite와 Three.js 0.185 계열을 사용한다. 게임 진행은 브라우저에서 처리하고 서버·DB는 필요하지 않다. 계정·온라인 순위·결제·멀티플레이·추가 맵·음향 기능은 현재 제공 범위에 포함하지 않는다. 1·2·4·8배속, 난이도 3종, 타워 4종, 적 6종, 강화 8종과 단일 슬롯 저장을 구현한다. 아래 수치를 임의로 재조정하지 않는다. 미술은 3D 미니어처와 판타지 정원 분위기로 제작하며, 구분을 위한 표식보다 맵 자체의 완성도를 우선한다. ## 2. 기본 플레이 흐름 1. 시작 화면에서 난이도를 고르거나 저장된 게임을 이어 한다. 2. 시작 골드로 타워를 배치하고 첫 라운드를 시작한다. 3. 적은 입구에서 출구로 이동하고, 타워는 사거리 안의 적을 자동 공격한다. 4. 처치한 적에게서 골드를 얻고, 새 타워 건설·강화·회복에 사용한다. 5. 해당 라운드의 적을 모두 처리하면 다음 라운드가 자동으로 시작된다. 6. 라이프가 0이 되면 게임이 끝난다. 정해진 최종 라운드나 승리 엔딩은 없다. 전투 중 ‘다음 라운드’를 누르면 다음 라운드를 즉시 시작한다. 현재 필드에 있는 적은 남고, 이전 라운드에서 아직 등장하지 않은 적의 대기 목록은 새 라운드 목록으로 교체된다. ## 3. 맵 구성 | 항목 | 현재 설정 | | --- | --- | | 크기 | 가로 13칸 × 세로 16칸 | | 전체 칸 | 208칸 | | 타워 건설 칸 | 120칸 | | 적 이동 칸 | 88칸 | | 경로 길이 | 칸 중심 사이 거리 기준 87칸 | | 이동 형태 | 가로 6줄을 오가는 지그재그 경로 | | 길 사이 공간 | 건설 칸 2줄 | 건설 칸에는 타워를 한 기씩 배치한다. 길과 이미 타워가 있는 칸에는 건설할 수 없다. 맵 좌표 기준 입구는 왼쪽 위, 출구는 왼쪽 아래에 있으며, 카메라를 돌리면 화면상 방향은 달라진다. ### 시각 디자인 - 건설 칸: 길보다 높게 솟은 잔디 블록. 깊은 초록색에 풀잎·양치잎·들꽃을 배치한다. - 이동 칸: 닳은 사암 판석을 엇갈리게 깔고, 틈과 가장자리에 이끼와 작은 자갈을 표현한다. - 맵 외곽: 돌 받침과 흙층, 아래로 이어지는 바위 및 주변의 떠 있는 돌로 공중 섬을 표현한다. - 입구와 출구: 포털과 코어 크리스탈로 장식한다. 디자인은 맵의 분위기와 완성도를 우선한다. 건설 칸에 안내용 모서리 표시는 넣지 않는다. ## 4. 타워 아래는 강화 전 기본 수치다. 사거리는 칸 단위, 연사는 게임 내 1초당 공격 횟수다. | 종류 | 가격 | 공격력 | 사거리 | 연사 | 최대 HP | 초당 HP 회복 | 역할 | | --- | ---: | ---: | ---: | ---: | ---: | ---: | --- | | 기본 타워 | 50 | 10 | 2.4 | 1.2 | 150 | 2 | 저렴한 초기 방어 | | 속사 타워 | 100 | 7 | 2.4 | 3.6 | 120 | 2 | 빠른 연속 공격 | | 저격 타워 | 180 | 55 | 3.4 | 0.5 | 160 | 2 | 긴 사거리와 강한 단발 공격 | | 대포 타워 | 240 | 90 | 2.6 | 0.6 | 320 | 3 | 밀집한 적에게 범위 피해 | ### 공통 전투 규칙 - 사거리 안에서 출구 쪽으로 가장 멀리 진행한 적을 우선 공격한다. - 건설 직후 게임 시간 기준 5초 동안 무적이다. - 적의 공격으로 HP가 0이 되면 파괴되고 해당 칸이 비워진다. - 골드를 내고 회복하거나, 회복 속도·최대 HP·방어력을 강화할 수 있다. - 직접 철거하면 건설과 강화에 사용한 누적 골드의 50%를 돌려받는다. 소수점은 버린다. - 누적 강화에 따라 브론즈·실버·골드·다이아 등급 장식이 표시된다. 즉시 회복 횟수는 등급에 포함하지 않는다. 대포의 기본 범위 반경은 0.8칸이다. 직접 맞은 적에는 공격력만큼, 주변 적에는 공격력의 50%를 가한다. 다른 타워도 범위 공격을 강화하면 주변 적에게 공격력의 30% 피해를 줄 수 있다. ## 5. 강화와 경제 적 처치 보상이 주요 골드 수입이다. 후반에는 적 체력 증가에 맞춰 처치 보상도 늘어난다. 골드는 건설·강화·즉시 회복에 사용한다. | 강화 항목 | 1회 효과 | 기본 비용 계수 | 다음 레벨 비용 배수 | | --- | --- | ---: | ---: | | HP 즉시 회복 | 최대 HP의 80%만큼 회복, 최대 HP를 넘지 않음 | 20 | 1.5 | | HP 회복 속도 | 회복량 ×1.25 | 30 | 1.7 | | 최대 HP | 최대 HP ×1.25, 현재 HP도 비율에 맞춰 증가 | 40 | 1.7 | | 방어력 | 받는 피해 ×0.85, 최소 원래 피해의 10% | 40 | 1.8 | | 공격력 | 공격력 ×1.25 | 45 | 1.85 | | 사정거리 | +0.4칸 | 50 | 1.8 | | 연사속도 | 초당 공격 횟수 ×1.25 | 50 | 1.85 | | 범위 공격 | 범위 반경 +0.2칸 | 60 | 2.5 | 현재 강화 비용은 `기본 비용 계수 × (타워 가격 ÷ 100) × 비용 배수^현재 레벨`을 반올림한 값이다. 같은 강화라도 타워 종류와 현재 레벨에 따라 가격이 다르다. 즉시 회복을 제외한 강화는 +1 또는 +5 단위로 구매할 수 있다. +5 비용은 각 단계의 비용을 합산한다. 강화 레벨에 정해진 상한은 없으며, 범위 반경과 사거리는 레벨마다 일정한 폭으로 늘어난다. ## 6. 적과 난이도 ### 적 6종 | 종류 | 주요 특징 | 플레이에 주는 압박 | | --- | --- | --- | | 기본형 | 기준이 되는 능력치 | 기본 화력과 배치 점검 | | 신속형 | 낮은 체력, 빠른 이동 | 빠른 처치와 넓은 사거리 요구 | | 탱커형 | 높은 체력, 느린 이동 | 지속 화력 요구 | | 재생형 | 높은 체력 회복 능력 | 회복을 넘는 집중 화력 요구 | | 공격형 | 높은 타워 공격력 | 타워의 방어·회복 관리 요구 | | 군집형 | 낮은 체력의 다수 적 | 범위 공격과 처리량 요구 | 적은 이동하면서 가까운 타워를 공격할 수 있다. 출구에 도달한 적은 종류와 관계없이 라이프를 1 감소시킨다. ### 난이도별 시작 조건 | 난이도 | 시작 라이프 | 시작 골드 | 특징 | | --- | ---: | ---: | --- | | 쉬움 | 1,000 | 300 | 적 능력치와 수량을 낮추고 등장 구성의 진행을 완만하게 설정 | | 보통 | 1,000 | 250 | 기본 기준 | | 어려움 | 1,000 | 240 | 적 능력치와 등장 구성 진행 속도 상승, 처치 골드 배수 1.2 | 라운드가 진행될수록 적 구성과 수량·체력이 강해진다. 증가량 일부를 체력으로 옮겨 적 수가 과도하게 늘지 않도록 하며, 한 라운드의 생성 수는 최대 1,000마리다. 여러 라운드를 수동으로 앞당기면 이전 적이 남을 수 있으므로 화면 전체 적 수의 상한과는 다르다. 적의 이동 속도는 종류와 난이도에 따라 정해지며 라운드마다 증가하지 않는다. ## 7. 화면 구성과 조작 ### 화면 구성 - 시작 화면: 게임 제목, 난이도 선택, 저장된 게임 이어하기. - 상단: 라이프·골드·라운드·난이도, 배속, 라운드 시작, 일시정지, 저장·불러오기. - 전투 화면: 3D 맵, 타워와 적, 체력 표시, 피해 숫자, 다음 등장 구성과 체력·골드 배수 안내. - 건설 패널: 타워 4종의 가격과 특성을 보고 선택. - 타워 상세: HP와 능력치, 강화 전후 수치, 강화 비용, 철거. - 종료 화면: 게임 종료와 재도전 안내. PC에서는 우측 패널을 사용한다. 세로 모바일에서는 하단 타워 목록과 화면 아래에서 열리는 타워 상세 패널을 사용한다. 상세 패널의 강화 목록은 별도로 스크롤하고, 패널 높이에 맞춰 맵이 보이는 영역을 조정한다. ### 조작 | 입력 | 동작 | | --- | --- | | 마우스로 타워 선택 후 빈 칸 클릭 | 건설 | | 터치로 타워 선택 후 빈 칸 탭 | 건설 위치·사거리 미리보기 | | 같은 칸 다시 탭 | 건설 확정 | | 설치된 타워 클릭·탭 | 상세 정보와 강화 패널 열기 | | 드래그 | 카메라 회전 | | 우클릭 또는 Shift를 누른 채 드래그 | 카메라 이동 | | 마우스 휠 / 두 손가락 핀치 | 확대·축소 | | 1~4 | 타워 종류 선택 | | Q / E | 시점 회전 | | Esc | 선택 해제 | | Space | 일시정지·재개 | 일시정지 중에는 건설과 강화가 제한되고 철거는 가능하다. 배속 버튼은 1·2·4·8배를 제공한다. ## 8. 저장과 서비스 범위 게임 진행은 브라우저 저장소에 수동으로 저장한다. 슬롯은 하나이며 다시 저장하면 기존 저장을 덮어쓴다. 불러온 직후에는 일시정지 상태로 시작한다. 이전 버전의 3배속 저장은 4배속으로 전환한다. 저장은 같은 브라우저·사이트 주소를 기준으로 하며, 다른 기기와 자동 동기화되지 않는다. 현재 계정, 온라인 순위, 서버 점수 기록, 결제, 멀티플레이 기능은 구현되어 있지 않다. 게임은 React 화면과 Three.js 3D 표현으로 구성되며, 게임 진행과 저장에 별도 서버나 DB를 사용하지 않는다. ## 9. 맵 좌표와 거리 행과 열은 0부터 센다. 경로의 꺾이는 지점은 다음 `(행, 열)` 순서다. 각 지점을 직선으로 연결하고 중복되는 모서리 칸은 한 번만 포함한다. ```text (0,0) → (0,12) → (3,12) → (3,0) → (6,0) → (6,12) → (9,12) → (9,0) → (12,0) → (12,12) → (15,12) → (15,0) ``` 게임 좌표에서 칸 중심은 `(x=열+0.5, y=행+0.5)`다. 사거리·범위 피해·적 공격 거리 모두 중심 사이의 직선 거리로 판정한다. 적 위치는 경로를 따라 진행한 거리로 계산하고 두 칸 중심 사이를 보간한다. 3D에서는 한 칸을 1단위로 사용한다. 보드 중심을 원점으로 두고 `월드 X=게임 x−6.5`, `월드 Z=게임 y−8`로 옮긴다. 건설 칸 윗면 높이는 0.34, 길 윗면은 0.1이다. ## 10. 난이도·적의 정확한 수치 ### 난이도 배수 | ID | 체력 | 공격력 | 이동 속도 | 회복 | 등장표 진행 growth | 수량 countMul | 골드 goldMul | | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | | easy | 0.6 | 0.6 | 0.9 | 0.5 | 0.8 | 0.8 | 1 | | normal | 1 | 1 | 1 | 1 | 1 | 1 | 1 | | hard | 1.2 | 1.1 | 1.05 | 1.2 | 1.1 | 1 | 1.2 | ### 적 종류 배수 | ID / 이름 | 체력 | 공격력 | 이동 속도 | 회복 | 골드 | 색 | | --- | ---: | ---: | ---: | ---: | ---: | --- | | basic / 기본형 | 1 | 1 | 1 | 1 | 1 | #dc2626 | | fast / 신속형 | 0.55 | 0.7 | 1.7 | 0.5 | 1 | #f59e0b | | tank / 탱커형 | 3.2 | 0.8 | 0.6 | 0.8 | 2 | #8b5cf6 | | regen / 재생형 | 1.5 | 0.9 | 0.9 | 5 | 1.6 | #10b981 | | bruiser / 공격형 | 1.6 | 2.3 | 0.85 | 1 | 1.8 | #ef4444 | | swarm / 군집형 | 0.3 | 0.4 | 1.25 | 0.3 | 0.45 | #fb7185 | `H`는 11절의 라운드 체력 배수, `G`는 라운드 골드 배수다. `round()`는 JavaScript의 Math.round를 뜻한다. ```text 최대 HP = round(34 × 종류 체력 × 난이도 체력 × H) 시작 HP = 최대 HP 공격력 = round(2 × 종류 공격력 × 난이도 공격력 × 10) / 10 이동 속도 = 1.1 × 종류 이동 속도 × 난이도 이동 속도 (칸/초) 초당 HP 회복 = 0.4 × 종류 회복 × 난이도 회복 공격 사거리 = 1.5칸 공격 간격 = 0.8초 처치 골드 = max(0.5, round(7 × 종류 골드 × 난이도 goldMul × G × 10) / 10) ``` ## 11. 라운드 생성 알고리즘 ### 기본 등장표 표의 행 번호는 난이도 보정 전 구성 단계다. 누락된 종류는 0마리다. | 단계 | 기본형 | 신속형 | 탱커형 | 재생형 | 공격형 | 군집형 | | --- | ---: | ---: | ---: | ---: | ---: | ---: | | 1 | 8 | 0 | 0 | 0 | 0 | 0 | | 2 | 8 | 2 | 0 | 0 | 0 | 0 | | 3 | 8 | 4 | 0 | 0 | 0 | 0 | | 4 | 6 | 4 | 2 | 0 | 0 | 0 | | 5 | 6 | 5 | 2 | 0 | 0 | 0 | | 6 | 6 | 5 | 2 | 2 | 0 | 0 | | 7 | 6 | 5 | 3 | 2 | 0 | 0 | | 8 | 6 | 6 | 3 | 0 | 2 | 0 | | 9 | 6 | 6 | 3 | 3 | 2 | 0 | | 10 | 6 | 8 | 4 | 3 | 3 | 0 | | 11 | 6 | 8 | 4 | 3 | 3 | 6 | | 12 | 8 | 8 | 5 | 4 | 4 | 8 | ### 수량·체력·보상 계산 1. `scaled = 1 + (라운드−1) × growth`를 계산한다. 2. 등장표 인덱스는 `floor(scaled−1+0.000001)`을 0~11로 제한한다. 3. 초과 진행량 `overflow = max(0, scaled−12)`를 구한다. 4. 종류별 원래 수량은 `등장표 수량 × countMul × 1.09^overflow`다. 탱커·재생·공격·군집형에는 추가로 `1+overflow×0.09`를 곱한다. 종류별 반올림 후 0인 항목을 제외한다. 5. 이 수량의 합을 `W`라 한다. 보정 수량 `C`는 W≤40이면 W, 그 외에는 `min(1000, 40×(W/40)^0.5)`다. 6. 실제 수량 목표 `T=round(C)`를 구한다. W≤T이면 원래 수량을 사용한다. 그 외에는 각 종류를 `max(1, floor(종류별 원래 수량×T/W))`로 줄인다. 합계가 T를 넘으면 가장 많은 종류에서 한 마리씩 줄인다. 합계가 T보다 작아도 부족분을 채우지 않는다. 7. 체력 배수 `H=W/C`다. 실제 반올림·배분 후 수량으로 나누지 않는다. 8. 골드 배수는 W≤40이면 `G=H`, 그 외에는 `G=(40/W)^0.25×H`다. ### 등장 시점 생성 목록은 유한한 Fisher–Yates 셔플로 섞는다. 한 라운드의 첫 적부터 마지막 적까지 기본 소환 기간은 게임 시간 6.3초이며, N>1이면 간격은 `6.3/(N−1)`초다. 라운드 시작 시 소환 타이머는 0이다. 현재 구현은 프레임마다 소환 타이머에서 진행 시간을 빼고, 소환 시각이 지난 적을 최대 200마리까지 처리한다. 단일 적처럼 간격이 0인 경우에는 기본 간격 0.9초를 적용한다. 소환 지연은 `min(1, 지연 시간×이동 속도)`만큼의 시작 진행 거리로 보정한다. 처리 후 타이머가 음수라면 0으로 둔다. ### 원본과 비교할 수치 예시 | 보통 난이도 | 실제 등장 구성 | 체력 배수 H | 골드 배수 G | 기본형 HP / 처치 골드 | | --- | --- | ---: | ---: | --- | | 1라운드 | 기본 8 | 1 | 1 | 34 / 7 | | 12라운드 | 기본 8, 신속 8, 탱커 5, 공격 4, 재생 4, 군집 8 | 1 | 1 | 34 / 7 | | 50라운드 | 기본 24, 신속 24, 탱커 68, 공격 55, 재생 55, 군집 110 | 약 8.477912479 | 약 2.911685505 | 288 / 20.4 | ## 12. 전투 처리와 원본의 동작 특성 화면 갱신마다 실제 경과 시간 `dt=min(경과 초, 0.1)`을 구하고, `step=dt×선택 배속`을 게임 진행 시간으로 쓴다. 일시정지 중에는 게임 갱신을 호출하지 않지만 카메라와 화면 렌더링은 계속한다. 처리 순서는 다음과 같다. 1. 누적 게임 시간 증가, 타워 회복·무적 시간·피격 제한 회복 및 효과 수명 갱신. 2. 전투 중이면 적 소환. 3. 적 이동·체력 회복·타워 공격. 4. 출구 도달 적 제거와 라이프 감소. 라이프가 0이면 게임 종료. 5. 타워 공격과 범위 피해. 6. HP가 0 이하인 적의 보상 지급·처치 수 증가·제거. 7. HP가 0 이하인 타워 제거. 8. 남은 적과 소환 대기열이 모두 비면 다음 라운드 자동 시작. 적은 사거리 안에서 가장 가까운 타워를 공격한다. 타워는 경로 진행 거리가 가장 큰 적을 공격한다. 거리가 같으면 기존 배열에서 먼저 발견한 대상을 유지한다. 공격은 즉시 피해를 적용하고 탄환은 시각 효과로 그린다. 타워 피격 제한은 단순히 적 4마리만 허용하는 방식이 아니다. 각 타워에 피격 누적값을 두고 게임 시간 1초마다 5씩 회복시킨다. 공격 1회당 누적값을 1 올리며 4를 넘는 공격은 보류하고 적이 0.1초 후 재시도한다. 건설 직후 무적이어도 공격 시도와 이 누적값은 소모한다. 방어 강화 후 피해는 `적 공격력×max(0.1, 0.85^방어 레벨)`이다. 공격 시 타워의 공격 대기 시간을 `1/초당 공격 횟수`로 설정한다. **원본 일치 시 주의:** 현재 공격은 프레임당 타워마다 최대 1회, 적마다 최대 1회다. 높은 배속·연사에서는 실제 처리량이 화면 갱신 빈도의 영향을 받는다. 이미 HP가 0 이하인 대상도 해당 프레임의 제거 단계 전까지 배열에 남아 있어 같은 프레임에 추가 공격 대상이 될 수 있다. 고정 시간 간격 처리 등으로 이 부분을 바꾸면 원본과 전투 결과가 달라질 수 있으므로 동일 재제작에서는 임의로 변경하지 않는다. ## 13. 강화 계산 세부 규칙 강화 수치는 직전 값에 반복해서 곱하지 않고 타워의 기본 수치와 해당 강화 레벨 L로 다시 계산한다. ```text 최대 HP = round(기본 최대 HP × 1.25^L) 현재 HP = min(새 최대 HP, 기존 현재 HP × 새 최대 HP / 기존 최대 HP) 회복 속도 = 기본 초당 회복 × 1.25^L 공격력 = round(기본 공격력 × 1.25^L) 사거리 = 기본 사거리 + 0.4×L 연사 = round(기본 연사 × 1.25^L × 10) / 10 범위 반경 = round((기본 범위 반경 + 0.2×L) × 100) / 100 ``` 강화 종류마다 레벨을 따로 관리한다. 대포의 기본 범위 반경만 0.8이고 다른 타워는 0이다. +5 구매는 5단계 전체 비용이 있을 때만 실행한다. 최대 HP에서는 즉시 회복을 구매할 수 없다. 회복 구매도 누적 투자금에 포함해 판매 환급을 계산한다. 등급은 즉시 회복을 제외한 강화 레벨의 합으로 정한다. 0~2는 없음, 3~9는 브론즈, 10~24는 실버, 25~49는 골드, 50 이상은 다이아다. 등급 자체에 별도의 공격력 배수는 없다. ## 14. 화면과 3D 미술 세부 명세 ### 공통 색감과 배치 - 배경은 #050816과 #0c1433 중심의 짙은 남색 밤하늘이다. 작은 별과 옅은 청색·보라색 광채를 더한다. - 패널은 반투명 남색 유리처럼 표현한다. 밝은 상단 테두리, 내부 음영, 바깥 그림자를 사용한다. - 주 글자는 #eef1ff, 보조 글자는 #9aa5d1이다. 골드는 #fcd34d, 라이프는 #fb7185, 라운드는 #7dd3fc로 강조한다. - 버튼은 위쪽 하이라이트와 아래쪽 그림자로 입체감을 주고, 누르면 눌리는 반응을 표현한다. - 게임 전체가 한 화면 안에 들어간다. 세로 모바일은 폭 860px 이하이면서 높이가 폭의 0.9배 이상일 때 적용한다. 타워 상세는 화면 높이 약 1/3이고 강화 목록만 내부 스크롤한다. 높이 560px 이하에서는 카드·메뉴를 압축한다. ### 타워 모델 모든 타워는 팔각 돌 받침 위에 세운다. 어두운 금속 포신, 금빛 띠·볼트, 종류별 테마색 몸체를 사용한다. 포탑은 표적 쪽으로 회전하고 발사 시 포신이 반동한다. | 종류 | 테마색 | 형태 | 대략적인 높이(칸 기준) | | --- | --- | --- | ---: | | 기본 | #3b82f6 | 원통 몸체, 둥근 포탑, 단일 포신 | 0.95 | | 속사 | #f59e0b | 육각 몸체, 둥근 사각 포탑, 쌍열 포신과 옆 탄창 | 0.9 | | 저격 | #8b5cf6 | 높고 가는 몸체, 긴 포신, 청록빛 렌즈의 조준경 | 1.3 | | 대포 | #ef4444 | 넓고 낮은 몸체, 큰 구형 포탑, 두꺼운 포신과 볼트 | 1.0 | 카드 썸네일은 실제 타워 모델을 사용한다. 건설 시 솟아오르는 연출, 강화 시 등급색 장식, 피격 시 점멸·흔들림, 파괴 시 파편을 표현한다. ### 적 모델과 효과 기본형은 구, 신속형은 앞이 뾰족한 삼각 쐐기, 탱커형은 둥근 상자, 재생형은 세로로 긴 팔면체, 공격형은 육각 기둥, 군집형은 작은 구다. 각각 흰자와 눈동자를 붙이고 이동 방향을 바라보며 종류별로 조금씩 통통 튀게 표현한다. 적 모델은 기본 형상 대비 1.3배로 렌더링한다. 기본형 구 반지름은 0.22, 군집형은 0.12다. 탱커는 0.44×0.38×0.44 상자, 신속형은 반지름 0.2·높이 0.5의 삼각뿔을 눕힌 형태, 재생형은 반지름 0.25 팔면체를 세로로 1.3배 늘린 형태, 공격형은 위 반지름 0.24·아래 반지름 0.27·높이 0.36 육각 기둥이다. 발사 궤적, 범위 공격 충격파, 적 처치 입자, 타워 파괴 파편, 피해 숫자, 체력 막대를 표시한다. 출구에 적이 도달하면 코어가 붉게 점멸한다. 건설 위치 미리보기에는 반투명 타워와 사거리 원을 표시한다. ### 카메라와 표면 시야각 30도의 원근 카메라로 맵을 비스듬히 내려다본다. 기본 앙각은 약 54도, 회전 앙각 범위는 약 26~86도다. 확대 배율 범위는 0.6~2.2다. 가로 화면에서는 맵의 긴 방향이 가로로 놓이도록 맞추고 화면 비율과 하단 패널 크기에 맞춰 자동으로 보드를 배치한다. 잔디 윗판은 모서리가 둥근 약 0.97칸 너비의 블록이다. 잔디는 약 HSL(111,44%,41~44%)에 옅은 색 차이와 식물 무늬를 더한다. 길은 #806c53 틈 위에 #c7ac83·#d5b88e·#bda47f·#cfb494·#ad9b7c 계열 판석을 엇갈려 배치한다. 판석은 약 0.43×0.31칸 크기로, 모서리를 닳게 하고 색과 위치에 작은 차이를 준다. 맵 표면은 칸당 80px 해상도의 캔버스 텍스처로 그릴 수 있다. 무늬는 고정 시드로 만들어 새로고침 때 바뀌지 않게 한다. 잔디·길 모두 빛과 그림자를 받아 입체감이 나도록 한다. ### 화면 세부 동작 타워 상세가 열려 있을 때 빈 칸을 누르면 우선 상세 패널만 닫는다. Esc는 상세나 건설 미리보기가 있으면 이를 닫고, 그 외에는 타워 종류 선택을 해제한다. 선택된 타워가 파괴되면 상세 선택도 해제한다. 강화 가격은 1만 미만이면 그대로 표시하고 그 이상은 유효숫자 3자리의 k·M·B·T 단위로 내림 표시한다. 1000조부터 지수 표기하며 버튼 설명에는 정확한 값을 제공한다. 게임 종료 화면에는 도달 라운드와 누적 처치 수, 다시 시작 버튼을 둔다. ## 15. 저장 데이터와 상태 상태는 메뉴(menu), 첫 라운드 준비(ready), 전투(playing), 종료(gameover)로 나누고 일시정지 여부를 별도로 관리한다. 처음 선택 전 내부 기본값은 라이프 1000·골드 200이지만 난이도 선택 즉시 6절의 시작 자원으로 바뀐다. 실제 시작 골드에 200을 적용하지 않는다. 저장 키는 `glidev.defense3d.save.v1`, 버전은 1이다. ready 또는 playing에서만 저장한다. 저장할 정보는 상태·난이도·라이프·골드·라운드·배속, 타워 목록, 현재 적 목록, 소환 대기열과 타이머, 다음 개체 ID, 처치 수, 게임 누적 시간이다. 타워마다 위치·종류·현재 능력치·각 강화 레벨·누적 투자금·공격 대기시간·무적 시간 등을 보존한다. 적마다 종류·현재 능력치·경로 진행 거리·공격 대기시간·소환 간격 등을 보존한다. 화면 선택과 일회성 연출은 저장하지 않는다. 불러오면 연출을 비우고 일시정지한다. 3배속은 4배속으로 옮기고, 허용 배속 이외의 값은 1배속으로 둔다. 예전 저장에서 길 위나 맵 밖에 놓인 타워는 제외하고 누적 투자금 전액을 돌려준다. 범위 공격 레벨이 없는 예전 타워는 해당 레벨을 0으로 취급한다. 새 프로젝트의 주소가 달라지면 기존 브라우저 저장은 자동으로 따라오지 않는다. 위 저장 형식은 기능 재현 기준이며 기존 데이터 자동 이전 기능은 포함하지 않는다. ## 16. 구현 구성과 완료 확인 게임 규칙·상태, 3D 장면·입력, 3D 모델, 화면 UI, 스타일을 분리한다. 장면 코드는 게임 상태를 읽어 표시하고 전투 수치를 직접 바꾸지 않는다. 많은 적은 같은 형상을 한꺼번에 그리는 인스턴싱을 사용하고, 공유 가능한 모델·재질을 재사용한다. 화면 정보 갱신 주기는 약 0.1초다. 새 프로젝트의 완료 기준은 다음과 같다. - 13×16 맵과 지정 경로, 건설 120칸·길 88칸이 일치한다. - 난이도 시작 자원, 타워 4종·적 6종, 강화 8종의 수치와 계산이 일치한다. - 11절의 1·12·50라운드 예시를 같은 값으로 생성한다. - 타워 건설·회복·강화·철거·파괴 및 골드 정산이 정의대로 처리된다. - 자동 라운드 진행과 수동 진행의 대기열 교체 규칙이 일치한다. - 1·2·4·8배속, 일시정지, 저장·이어하기가 동작한다. - PC 클릭과 모바일 두 번 탭 건설, 카메라 조작, 반응형 패널이 동작한다. - 밤하늘·공중 섬·판석 길·풍성한 잔디·종류별 3D 모델과 전투 연출을 구현한다. - 게임 종료 시 라운드와 처치 수가 표시되고 다시 시작할 수 있다. 이 문서의 수치와 동작을 재현한 뒤, 별도 요청이 있을 때만 밸런스나 기능을 바꾼다. 미술의 정확한 픽셀·모델 형상까지 복제해야 하는 경우에는 이 텍스트 명세 외에 원본 화면 또는 모델·스타일 소스도 필요하다.
9월 27일 오전 10:15
실행과정55개 작업
게임 데이터는 진행 상태·타워·적·라운드 대기열·저장 정보로 나누겠습니다. 지정하신 수치대로 브라우저에서 동작하는 3D 화면과 전투를 구현하고, 서버나 DB 없이 저장·이어하기까지 연결하겠습니다.
명령 실행
명령 실행
명령 실행
명령 실행
명령 실행
파일 수정
지정 경로와 라운드 계산을 구성했습니다. 공중 섬을 중심으로 오른쪽에 건설·강화 패널을 배치하고, 모바일에서는 패널이 아래로 이동하도록 만들고 있습니다.
파일 수정
파일 수정
파일 수정
타워 4종의 실제 3D 모델과 판석·잔디로 된 섬을 만들었습니다. 전투 수치와 강화 계산도 연결했으며, 지금은 공격 효과·카메라 조작·저장 후 일시정지 복원을 붙이고 있습니다.
파일 수정
파일 수정
파일 수정
파일 수정
시작 화면에서 난이도를 고르고 바로 배치·전투를 시작할 수 있도록 연결했습니다. 남은 작업은 작은 화면의 패널 정리와, 명세의 1·12·50라운드 수치 및 저장·강화 동작 검증입니다.
파일 수정
파일 수정
파일 수정
명령 실행
명령 실행
명령 실행
명령 실행
명령 실행
명령 실행
명령 실행
파일 수정
명령 실행
규칙 검증 11개를 모두 통과했습니다. 건설 120칸·이동 88칸, 50라운드의 적 구성과 보상, +5 강화 비용, 대기열 교체, 저장 복원까지 명세와 일치하며, 이제 실제 브라우저에서 화면과 터치 조작을 확인하고 있습니다.
파일 수정
파일 수정
명령 실행
명령 실행
명령 실행
명령 실행
명령 실행
명령 실행
명령 실행
명령 실행
파일 수정
명령 실행
명령 실행
파일 수정
실제 화면 검사용 브라우저에 필요한 구성 요소를 준비하느라 확인 단계가 조금 길어졌습니다. 게임 계산 검증은 완료됐고, 현재 PC·모바일 화면에서 버튼과 지도가 겹치지 않는지 점검 중입니다.
명령 실행
명령 실행
명령 실행
파일 수정
명령 실행
명령 실행
파일 수정
파일 수정
명령 실행
명령 실행
명령 실행
PC 화면의 3D 섬과 타워 렌더링은 정상 확인했습니다. 모바일 전환 시 지도 크기를 다시 맞추는 부분을 다듬고 있으며, 실제 저장·불러오기와 전투 버튼을 마지막으로 확인하고 있습니다.
파일 수정
명령 실행
명령 실행
파일 수정
명령 실행
⏸ 작업이 중간에 멈췄습니다. 지금까지 진행된 내용은 저장되어 있어요 — 이어서 실행하면 계속합니다.
실행중인지?
9월 27일 오전 10:48
실행과정7개 작업
네, 게임은 미리보기에서 실행 가능한 상태입니다. 전투·강화 계산과 저장·불러오기 검증을 마쳤고, 지금은 모바일 건설 조작과 화면 배치를 마지막으로 확인하고 있습니다.
명령 실행
명령 실행
파일 수정
명령 실행
실제 PC 조작으로 건설·강화·골드 차감·저장 복원까지 통과했습니다. 모바일에서는 첫 탭으로 위치를 미리 보고 두 번째 탭으로 건설되는지 확인하고 있습니다.
명령 실행
명령 실행
명령 실행
⏸ 챗지피티 사용 한도가 찼습니다. 9월 28일 00:05 이후 다시 이용할 수 있어요 — glidev AI 로 전환해 계속할 수도 있습니다.
챗지피티 사용 한도로 멈췄던 직전 작업을 이어서 계속 진행해 주세요.
9월 28일 오전 07:18
실행과정3개 작업
이어서 마무리하겠습니다. PC·모바일의 건설, 강화, 저장·불러오기 검증은 모두 통과했고, 타워 상세 화면에 겹쳐 나오는 배치 안내만 정리하면 완료됩니다.
명령 실행
파일 수정
명령 실행
실행결과 · 32초 소요
구현을 완료했습니다. 3D 공중 섬, 타워 4종·적 6종, 강화·무한 라운드·배속·저장 기능을 적용하고 PC·모바일 조작까지 검증했습니다. 미리보기에서 **‘방어 시작하기’**를 누르면 바로 플레이할 수 있습니다.
✅ 파일 1개 수정 · 명령 2개 실행
이 프로젝트는 AI 에이전트와의 대화만으로 만들어졌습니다
tower-defense.glidev.ai
↗
파일
왼쪽에서 파일을 선택하세요