From f771a6b3e54f8d0a90bf49f1f1e8ce80086b6431 Mon Sep 17 00:00:00 2001 From: plpark Date: Fri, 11 Sep 2026 16:01:04 +0900 Subject: [PATCH] =?UTF-8?q?Add=20a=20=ED=9C=B4=EA=B2=8C=EC=8B=A4=20tank=20?= =?UTF-8?q?game=20tab=20under=20the=20literature=20list?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The crossword shell only carried literature tabs. Add a second nav section, 휴게실, holding a standalone canvas tank game: two stages (fortress with 4 enemies, maze with 6), arrow keys to move, space to fire, WebAudio for the shots and explosions. The page shares nothing with the crossword engine, so the Dockerfile's asset-hash stamp leaves it alone. Inside the shell's iframe a keydown only lands once the frame has focus, so the canvas takes a tabindex and the click handler focuses it; the start overlay says to click first. Co-Authored-By: Claude Opus 5 --- README.md | 14 +- site/index.html | 12 +- site/tank.html | 982 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1006 insertions(+), 2 deletions(-) create mode 100644 site/tank.html diff --git a/README.md b/README.md index 5bd669a..356d97f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,7 @@ # crossword 문학 가로세로 낱말풀이 — 정적 사이트. 왼쪽 탭에서 편을 골라 본 프레임에서 바로 푼다. +낱말풀이 목록 아래 **휴게실** 구획에는 곁들이로 탱크게임을 두었다. - 공개 주소: https://crossword.plpark.ectech.co.kr - 내부 주소: http://192.168.0.216:31380 (NodePort) @@ -17,7 +18,17 @@ | 일본 문학 | `/japanese.html` | 9 × 9 · 44칸 | 14 | 기본으로 열리는 탭은 한국 문학이다. 각 페이지는 단독으로 열어도 동작한다. 셸(`/`)의 탭은 해시로 상태를 남기므로 -`/#korean`, `/#russian`, `/#british`, `/#french`, `/#german`, `/#japanese` 로 바로 들어갈 수 있고, 탭을 다시 눌러도 풀던 내용은 유지된다. +`/#korean`, `/#russian`, `/#british`, `/#french`, `/#german`, `/#japanese`, `/#tank` 로 바로 들어갈 수 있고, 탭을 다시 눌러도 풀던 내용은 유지된다. + +## 휴게실 + +| 탭 | 경로 | 내용 | +|---|---|---| +| 탱크게임 | `/tank.html` | 2단계 구성 — 1단계 요새(적 4대) / 2단계 미로(적 6대). 방향키 이동, 스페이스 발사 | + +낱말풀이와 공유하는 자산이 없는 단독 페이지다. 캔버스와 WebAudio 만 쓰므로 자산 해시 +스탬프(아래 캐시 항목)의 영향도 받지 않는다. iframe 안에서는 **화면을 한 번 클릭해 +포커스를 준 뒤** 키를 눌러야 한다. ## 구성 @@ -30,6 +41,7 @@ | `site/french.html` | 프랑스 문학 편 (머리말 + 퍼즐 데이터) | | `site/german.html` | 독일 문학 편 (머리말 + 퍼즐 데이터) | | `site/japanese.html` | 일본 문학 편 (머리말 + 퍼즐 데이터) | +| `site/tank.html` | 휴게실 · 탱크게임 (단독 페이지 — 캔버스 + WebAudio) | | `site/assets/crossword.css` | 각 편이 공유하는 화면 양식 | | `site/assets/crossword.js` | 각 편이 공유하는 게임 엔진 (한글 IME 입력, 검사/힌트/타이머) | | `nginx/default.conf` | nginx 설정 (8080 리슨, `/healthz` 헬스체크) | diff --git a/site/index.html b/site/index.html index 7071251..aaee58d 100644 --- a/site/index.html +++ b/site/index.html @@ -51,6 +51,9 @@ body{ font-size:10px;font-weight:900;letter-spacing:.28em;color:var(--slate); padding:0 20px 10px; } +.nav .label.rest{ + margin-top:14px;padding-top:15px;border-top:1px solid var(--line); +} .nav a{ display:block;text-decoration:none;color:inherit; padding:12px 18px 12px 17px;border-left:3px solid transparent; @@ -147,6 +150,12 @@ body{ 일본 문학 日本文学 + +
휴게실
+ + 탱크게임 + Tank Battle +
@@ -167,7 +176,8 @@ var PAGES = { british: {file:'british.html', name:'영국 문학'}, french: {file:'french.html', name:'프랑스 문학'}, german: {file:'german.html', name:'독일 문학'}, - japanese:{file:'japanese.html', name:'일본 문학'} + japanese:{file:'japanese.html', name:'일본 문학'}, + tank: {file:'tank.html', name:'휴게실 · 탱크게임'} }; var DEFAULT = 'korean'; diff --git a/site/tank.html b/site/tank.html new file mode 100644 index 0000000..7ed1e37 --- /dev/null +++ b/site/tank.html @@ -0,0 +1,982 @@ + + + + + +탱크 대전 · TANK BATTLE + + + +
+
+ +
+ + +