Skip to content

writingdeveloper/Mini-Games

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

366 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŽฎ Mini Games Hub

์—ฌ๋Ÿฌ ๋ธŒ๋ผ์šฐ์ € ๊ฒŒ์ž„์„ ํ•œ๊ณณ์—์„œ ์ฆ๊ธฐ๋Š” ๊ฒŒ์ž„ ํ—ˆ๋ธŒ์ž…๋‹ˆ๋‹ค. Next.js ํ”„๋ก ํŠธ์—”๋“œ + ๋…๋ฆฝ Socket.io ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ์„œ๋ฒ„๋กœ ๊ตฌ์„ฑ๋œ ํ’€์Šคํƒ ํ”„๋กœ์ ํŠธ๋กœ, ์„œ๋กœ ๋‹ค๋ฅธ 4๊ฐœ์˜ ๋ Œ๋”๋ง ์—”์ง„(2D Canvas / Babylon.js / CesiumJS / Three.js + cannon-es)์œผ๋กœ ๋งŒ๋“  7๊ฐœ์˜ ๊ฒŒ์ž„์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

CI License: MIT Next.js TypeScript

๐Ÿ”— ๋ผ์ด๋ธŒ ๋ฐ๋ชจ: https://games.writingdeveloper.blog


๐Ÿ“ธ ์Šคํฌ๋ฆฐ์ƒท

Mini Games Hub

๐Ÿฌ JELLY CATCHER (์‹ค๋ฌผ๋ฆฌ ์ธํ˜•๋ฝ‘๊ธฐ) ๐Ÿœ ์—ญ์ „๊ตญ์ˆ˜ (๊ฐ€๋ฝ๊ตญ์ˆ˜ ์„œ๋น™)
JELLY CATCHER ์—ญ์ „๊ตญ์ˆ˜
๐Ÿœ๏ธ Dust Drifter (์‚ฌ๋ง‰ ์ž์œ  ์ฃผํ–‰) ๐Ÿ’ฃ ๋งˆํ‚ค๋งˆ says (๋‘ ๋ชฉ์†Œ๋ฆฌ ์‚ฌ์ด๋จผ)
Dust Drifter ๋งˆํ‚ค๋งˆ says

๐Ÿ“ฑ ๋ชจ๋ฐ”์ผ ํ„ฐ์น˜ ์กฐ์ž‘ โ€” ๋„์ฃผ ๊ฒŒ์ž„์€ ํ™”๋ฉด d-pad์™€ ์Šค์™€์ดํ”„๋กœ ํ”Œ๋ ˆ์ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„์ฃผ ๊ฒŒ์ž„ ๋ชจ๋ฐ”์ผ ํ„ฐ์น˜ ์กฐ์ž‘

โœจ ์ฃผ์š” ํŠน์ง•

  • 7๊ฐœ ๊ฒŒ์ž„ ยท 4๊ฐœ์˜ ๋…๋ฆฝ ๋ Œ๋”๋ง ์—”์ง„ โ€” 2D Canvas, Babylon.js(3D), CesiumJS(์‹ค์ œ ์ง€๊ตฌ๋ณธ), Three.js + cannon-es(๋ฌผ๋ฆฌ ์ธํ˜•๋ฝ‘๊ธฐ / ๋กœ์šฐํด๋ฆฌ 3D) ํ†ตํ•ฉ
  • ํ’€์Šคํƒ ์‹ค์‹œ๊ฐ„ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ตฌ์กฐ โ€” Socket.io ๊ธฐ๋ฐ˜ ๋ฃธ ๋งค์นญ/๋กœ๋น„ + ๊ถŒ์œ„ ์„œ๋ฒ„(authoritative server) ๊ตฌํ˜„ (๋„์ฃผยท์„œ๋ฐ”์ด๋ฒŒยท๋น„ํ–‰ ๋„ท์ฝ”๋“œ๋Š” server/ยทpublic/shared/์— ๊ตฌํ˜„. ํ˜„์žฌ ๋ผ์ด๋ธŒ ๋ฐ๋ชจ๋Š” ์‹ฑ๊ธ€ํ”Œ๋ ˆ์ด์–ด๋กœ ์„œ๋น™)
  • ๋ชจ๋…ธ๋ ˆํฌ ๊ตฌ์กฐ โ€” Next.js ์•ฑ๊ณผ ๊ฒŒ์ž„ ์„œ๋ฒ„๋ฅผ ํ•œ ์ €์žฅ์†Œ์—์„œ ๊ด€๋ฆฌ, ๊ฐ๊ฐ ๋…๋ฆฝ ๋ฐฐํฌ
  • ํ…Œ์ŠคํŠธ & CI โ€” Vitest ๋‹จ์œ„/ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ + Playwright E2E + GitHub Actions ์ž๋™ํ™”
  • ํƒ€์ž… ์•ˆ์ „์„ฑ โ€” TypeScript, ESLint, Prettier ์ผ๊ด€ ์ ์šฉ

๐Ÿ•น๏ธ ๊ฒŒ์ž„ ๋ชฉ๋ก

๐Ÿฌ JELLY CATCHER (์ธํ˜•๋ฝ‘๊ธฐ)

  • Three.js 0.184 + cannon-es ๊ธฐ๋ฐ˜ ์‹ค์ œ ๋ฌผ๋ฆฌ ์ธํ˜•๋ฝ‘๊ธฐ (์ผ๋ณธ ์•„์ผ€์ด๋“œํ’)
  • ์Šคํ”„๋ง-๊ทธ๋ฆฝ ์ง‘๊ฒŒ ๋ฌผ๋ฆฌ (์ง„์งœ๋กœ ๋ฏธ๋„๋Ÿฌ์ง„๋‹ค!) ยท 3์ข… ๊ธฐ๊ณ„(์ ค๋ฆฌ ยท ์ธํ˜• ยท ๊ณต) ์ „ํ™˜
  • ์ฝค๋ณด ๋ฐฐ์œจ ยท ๋งˆ์ผ์Šคํ†ค ยท ๊ฒฐ๊ณผ/๋ฆฌํ”Œ๋ ˆ์ด ยท ๋™์ „/์นด๋“œ ๊ฒฐ์ œ ์—ฐ์ถœ
  • ์กฐ์ž‘: ์•„๋‚ ๋กœ๊ทธ ์กฐ์ด์Šคํ‹ฑ ยท ํ„ฐ์น˜ ์กฐ์ž‘ ยท ํœ /ํ•€์น˜ ์คŒ
  • ๋นŒ๋“œ ์—†๋Š” ์ž์ฒด์™„๊ฒฐํ˜• ESM (importmap CDN ๋กœ๋“œ)

๐Ÿ’ฃ ๋งˆํ‚ค๋งˆ says (๋‘ ๋ชฉ์†Œ๋ฆฌ ์‚ฌ์ด๋จผ)

  • ๋งˆํ‚ค๋งˆ(๋ณต์ข…) ยท ๋ ˆ์ œ(๊ฑฐ๋ถ€) ๋‘ ์•…๋งˆ์˜ ์Œ์„ฑ ๋ช…๋ น ์‚ฌ์ด๋จผ-says ๋ฐ˜์‘ ๊ฒŒ์ž„
  • ํ™”์ž๋ณ„ ๊ธ€๋ฆฌํ”„/๋ง ์ƒ‰ ์ด์ค‘ ๋ถ€ํ˜ธํ™” ยท ์ฝค๋ณด ยท ๋ผ์šด๋“œ๋ณ„ ๋‚œ์ด๋„
  • ์กฐ์ž‘: ๋ฐฉํ–ฅํ‚ค ยท ํ„ฐ์น˜ ์กฐ์ž‘

๐Ÿœ ์—ญ์ „๊ตญ์ˆ˜ (๊ฐ€๋ฝ๊ตญ์ˆ˜ ์„œ๋น™)

  • Three.js ๊ธฐ๋ฐ˜ ๋Œ€์ „์—ญ ์‹ฌ์•ผ ํ”Œ๋žซํผ ๊ฐ€๋ฝ๊ตญ์ˆ˜ ์„œ๋น™ ๊ฒŒ์ž„
  • ๋ฐ์น˜๊ธฐ ํƒ€์ด๋ฐ ยท ์†๋‹˜ 5 ์•„ํ‚คํƒ€์ž… ยท ์ฆ๊ธฐโ†’๋””์ คโ†’๋ง‰์ฐจ 5์›จ์ด๋ธŒ ยท ์ฝค๋ณด ์Šค์ฝ”์–ด
  • ์ ˆ์ฐจ์  ์•„ํŠธ ยท ์‹œ๋Œ€๋ณ„ ๊ธฐ๊ด€์ฐจ ยท ์›น์˜ค๋””์˜ค ํšจ๊ณผ์Œ
  • ์กฐ์ž‘: WASD ยท ํ„ฐ์น˜ ์กฐ์ด์Šคํ‹ฑ ์ฃผ๋ฐฉ ์„œ๋น™

๐Ÿš— ๋„์ฃผ ๊ฒŒ์ž„ (Escape)

  • HTML5 Canvas ๊ธฐ๋ฐ˜ 2D ๊ฒŒ์ž„ (์Šค๋„ค์ดํฌ ๋ณ€ํ˜•)
  • ๊ฒฝ์ฐฐ์ฐจ๋กœ๋ถ€ํ„ฐ ์ž๋™์ฐจ๋ฅผ ์กฐ์ข…ํ•ด ๋„์ฃผ
  • ์กฐ์ž‘: ๋ฐฉํ–ฅํ‚ค/WASD ยท ํ„ฐ์น˜ d-pad ยท ์Šค์™€์ดํ”„ (๋ฐ˜์‘ํ˜• ์บ”๋ฒ„์Šค)
  • ์‹ค์‹œ๊ฐ„ 2โ€“4์ธ ๊ฒฝ์Ÿ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๋„ท์ฝ”๋“œ๊ฐ€ server/ยทpublic/shared/์— ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฉฐ, ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์‹œ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค(ํ˜„์žฌ ๋ผ์ด๋ธŒ๋Š” ์‹ฑ๊ธ€ํ”Œ๋ ˆ์ด์–ด).

๐ŸŒ 3D ์„œ๋ฐ”์ด๋ฒŒ (Survival)

  • Babylon.js ๊ธฐ๋ฐ˜ 3D ์˜คํ”ˆ ์›”๋“œ + Havok ๋ฌผ๋ฆฌ ์—”์ง„
  • ์„œ๋ฐ”์ด๋ฒŒ ์‹œ์Šคํ…œ (์ฒด๋ ฅ ยท ์Šคํƒœ๋ฏธ๋‚˜ ยท ๋ฐฐ๊ณ ํ”” ยท ๊ฐˆ์ฆ)
  • ์บ๋ฆญํ„ฐ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ยท ๋‚ฎ/๋ฐค ์‚ฌ์ดํด ยท ํƒˆ๊ฒƒ
  • ์กฐ์ž‘: WASD ์ด๋™ ยท ๋งˆ์šฐ์Šค ์‹œ์  (PC ๊ถŒ์žฅ)
  • ์‹ค์‹œ๊ฐ„ 2โ€“4์ธ ํ˜‘๋™ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๋„ท์ฝ”๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฉฐ, ์„œ๋ฒ„ ์—ฐ๊ฒฐ ์‹œ ํ™œ์„ฑํ™”๋ฉ๋‹ˆ๋‹ค(ํ˜„์žฌ ๋ผ์ด๋ธŒ๋Š” ์‹ฑ๊ธ€ํ”Œ๋ ˆ์ด์–ด).

โœˆ๏ธ Sky Explorer (๋น„ํ–‰)

  • CesiumJS ๊ธฐ๋ฐ˜ 3D ๋น„ํ–‰ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ (์‹ค์ œ ์œ„์„ฑ ์ง€๋„ ์œ„ ๋น„ํ–‰)
  • 6๊ฐœ ๋„์‹œ ์‹œ์ž‘ ์œ„์น˜ (์„œ์šธ ยท ๋‰ด์š• ยท ํŒŒ๋ฆฌ ยท ๋„์ฟ„ ยท ๋‘๋ฐ”์ด ยท ์‹œ๋“œ๋‹ˆ)
  • 3๊ฐ€์ง€ ๋ชจ๋“œ (์ž์œ  ๋น„ํ–‰ ยท ์ฒดํฌํฌ์ธํŠธ ๋ ˆ์ด์Šค ยท ์„œ๋ฐ”์ด๋ฒŒ)
  • ๋ฆฌ์–ผํ•œ ๋น„ํ–‰ ๋ฌผ๋ฆฌ (์–‘๋ ฅ ยท ํ•ญ๋ ฅ ยท ์Šคํ†จ) + HUD (์†๋„/๊ณ ๋„/์—ฐ๋ฃŒ/๋‚˜์นจ๋ฐ˜)
  • ์กฐ์ž‘: W/S ํ”ผ์น˜ ยท A/D ๋กค ยท Q/E ์š” ยท Shift/Ctrl ์Šค๋กœํ‹€ (PC ๊ถŒ์žฅ)

๐Ÿœ๏ธ Dust Drifter (์‚ฌ๋ง‰ ์ž์œ  ์ฃผํ–‰)

  • Three.js ๊ธฐ๋ฐ˜ 3D ๋กœ์šฐํด๋ฆฌ ์‚ฌ๋ง‰ ์˜คํ”ˆ ์›”๋“œ (์‹ฑ๊ธ€ํ”Œ๋ ˆ์ด์–ด)
  • ์ž์œ  ์ฃผํ–‰ + ์‹ ๊ธฐ๋ฃจ ํƒํ—˜(7) + ๋น›๋‚˜๋Š” ์ˆ˜์ง‘๋ฌผ(20) + ๋‚ฎโ†”๋ฐค ์ˆœํ™˜
  • ๋จผ์ง€ ํŒŒํ‹ฐํด ๋“œ๋ฆฌํ”„ํŠธ ยท ๋“„ ๋น…์—์–ด ยท 3์ธ์นญ/ํ•˜๋Š˜๋ทฐ ์นด๋ฉ”๋ผ
  • ๋นŒ๋“œ ์—†๋Š” ์ž์ฒด์™„๊ฒฐํ˜• ESM (Three.js๋ฅผ importmap CDN์œผ๋กœ ๋กœ๋“œ)
  • ์กฐ์ž‘: โ†‘โ†“โ†โ†’/WASD ์ฃผํ–‰ ยท Space ๋“œ๋ฆฌํ”„ํŠธ ยท C ์นด๋ฉ”๋ผ ยท R ๋ฆฌ์…‹ (PC ๊ถŒ์žฅ)

๐Ÿ—๏ธ ์•„ํ‚คํ…์ฒ˜

ํ”„๋ก ํŠธ์—”๋“œ(Vercel)์™€ ๊ฒŒ์ž„ ์„œ๋ฒ„(์ปจํ…Œ์ด๋„ˆ)๋ฅผ ๋ถ„๋ฆฌํ•ด, ์ •์  ๊ฒŒ์ž„์€ CDN์—์„œ ์„œ๋น™ํ•˜๊ณ  ์‹ค์‹œ๊ฐ„ ํ†ต์‹ ๋งŒ WebSocket์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”         WebSocket (WSS)        โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   Vercel โ€” Frontend      โ”‚  <โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€> โ”‚  Game Server (Docker)     โ”‚
โ”‚   Next.js + ์ •์  ๊ฒŒ์ž„     โ”‚         Socket.io              โ”‚  Node.js + Socket.io      โ”‚
โ”‚   (App Router, iframe)   โ”‚                                โ”‚  โ”œโ”€ LobbyManager / Room   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜                                โ”‚  โ”œโ”€ GameSession (๊ฒŒ์ž„๋ณ„)   โ”‚
            โ”‚                                               โ”‚  โ””โ”€ SocketManager         โ”‚
   ๊ฐ ๊ฒŒ์ž„์€ /public ์—์„œ                                     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
   ์ •์ ์œผ๋กœ ์„œ๋น™๋˜๊ณ ,                                          ๋ฃธ ๋งค์นญ ยท ๊ถŒ์œ„ ์ƒํƒœ ๋™๊ธฐํ™”
   ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ์‹œ ๋™์ ์œผ๋กœ
   socket.io-client ๋กœ๋“œ
  • ํด๋ผ์ด์–ธํŠธ ๊ณต์œ  ์ฝ”๋“œ (public/shared/): GameClient(Socket.io ๋ž˜ํผ), StateBuffer/InputBuffer(๋ณด๊ฐ„ยท์˜ˆ์ธก), LobbyUI
  • ์„œ๋ฒ„ (server/): ๋ฃธ ์ฝ”๋“œ ์ƒ์„ฑยท๋งค์นญ, ๊ฒŒ์ž„๋ณ„ ์„ธ์…˜ ๋กœ์ง(escape/flight/survival), ํ•‘/์—ฐ๊ฒฐ ๊ด€๋ฆฌ, /health ์—”๋“œํฌ์ธํŠธ
  • ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋งŒ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์„œ๋ฒ„์—์„œ socket.io-client๋ฅผ ๋™์  ๋กœ๋“œํ•˜๋ฏ€๋กœ, ์‹ฑ๊ธ€ํ”Œ๋ ˆ์ด๋Š” ์„œ๋ฒ„ ์—†์ด ๋™์ž‘

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

์˜์—ญ ๊ธฐ์ˆ 
ํ”„๋ ˆ์ž„์›Œํฌ Next.js 16 (App Router) ยท React 19
์–ธ์–ด TypeScript 5
์Šคํƒ€์ผ Tailwind CSS 4
๊ฒŒ์ž„ ์—”์ง„ HTML5 Canvas ยท Babylon.js ยท CesiumJS ยท Three.js
๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด Socket.io (์„œ๋ฒ„/ํด๋ผ์ด์–ธํŠธ)
์„œ๋ฒ„ Node.js ยท better-sqlite3 ยท Docker
ํ…Œ์ŠคํŠธ Vitest ยท Playwright
CI/CD GitHub Actions ยท Vercel

๐Ÿš€ ์‹œ์ž‘ํ•˜๊ธฐ

์‚ฌ์ „ ์ค€๋น„

  • Node.js 20+
  • (์„ ํƒ) Cesium Ion ํ† ํฐ โ€” ๋น„ํ–‰ ๊ฒŒ์ž„์˜ 3D ์ง€๋„์šฉ (๋ฌด๋ฃŒ)

1. ์„ค์น˜

git clone https://github.com/writingdeveloper/Mini-Games.git
cd Mini-Games
npm install

2. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ (์„ ํƒ)

ํ† ํฐ ์—†์ด๋„ ํ—ˆ๋ธŒ์™€ ๋„์ฃผยท์„œ๋ฐ”์ด๋ฒŒ ๊ฒŒ์ž„์€ ์ •์ƒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋น„ํ–‰ ๊ฒŒ์ž„ ์ง€๋„์™€ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์— .env.local์„ ๋งŒ๋“œ์„ธ์š” (.env.example ์ฐธ๊ณ ):

# ๋น„ํ–‰ ๊ฒŒ์ž„ 3D ์ง€๋„์šฉ (https://cesium.com/ion/tokens)
CESIUM_TOKEN=your_cesium_ion_token_here

# ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ์„œ๋ฒ„ ์ฃผ์†Œ (๋ฏธ์„ค์ • ์‹œ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๋ฒ„ํŠผ ๋น„ํ™œ์„ฑํ™”)
NEXT_PUBLIC_GAME_SERVER_URL=https://your-game-server.example.com

3. ๊ฐœ๋ฐœ ์„œ๋ฒ„

npm run dev

๋ธŒ๋ผ์šฐ์ €์—์„œ http://localhost:3000 ์ ‘์†.

4. ๋นŒ๋“œ / ํ”„๋กœ๋•์…˜

npm run build   # ์ •์  ๋นŒ๋“œ
npm start       # ํ”„๋กœ๋•์…˜ ์‹คํ–‰

๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ์„œ๋ฒ„ ์‹คํ–‰ (์„ ํƒ)

cd server
npm install
npm run dev     # ๊ฐœ๋ฐœ (tsx watch)
# ๋˜๋Š” Docker
docker compose up -d --build

์ž์„ธํ•œ ๋ฐฐํฌ ๊ฐ€์ด๋“œ๋Š” server/DEPLOY.md ์ฐธ๊ณ .


๐Ÿงช ํ…Œ์ŠคํŠธ

npm run test          # Vitest ๋‹จ์œ„ + ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
npm run test:coverage # ์ปค๋ฒ„๋ฆฌ์ง€ ๋ฆฌํฌํŠธ
npm run test:e2e      # Playwright E2E
npm run lint          # ESLint
npm run type-check    # TypeScript ํƒ€์ž… ๊ฒ€์‚ฌ

CI(.github/workflows/ci.yml)์—์„œ push/PR ์‹œ lint ยท type-check ยท ๋‹จ์œ„ ํ…Œ์ŠคํŠธ ยท E2E ยท ์„œ๋ฒ„ ๊ฒ€์ฆ์„ ์ž๋™ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“ ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

Mini-Games/
โ”œโ”€โ”€ app/                       # Next.js App Router
โ”‚   โ”œโ”€โ”€ page.tsx               # ๋ฉ”์ธ ํ—ˆ๋ธŒ ํŽ˜์ด์ง€
โ”‚   โ”œโ”€โ”€ layout.tsx             # ๋ฃจํŠธ ๋ ˆ์ด์•„์›ƒ
โ”‚   โ”œโ”€โ”€ error-boundary.tsx     # ๊ฒŒ์ž„ ๋กœ๋“œ ์—๋Ÿฌ ์ฒ˜๋ฆฌ
โ”‚   โ”œโ”€โ”€ escape-game/page.tsx   # ๋„์ฃผ ๊ฒŒ์ž„ ๋ผ์šฐํŠธ (๋ชจ๋“œ ์„ ํƒ)
โ”‚   โ”œโ”€โ”€ survival-game/page.tsx # ์„œ๋ฐ”์ด๋ฒŒ ๋ผ์šฐํŠธ (๋ชจ๋“œ ์„ ํƒ)
โ”‚   โ”œโ”€โ”€ flight-game/page.tsx   # ๋น„ํ–‰ ๊ฒŒ์ž„ ๋ผ์šฐํŠธ
โ”‚   โ”œโ”€โ”€ desert-game/page.tsx   # Dust Drifter ๋ผ์šฐํŠธ
โ”‚   โ”œโ”€โ”€ ppopgi/page.tsx        # JELLY CATCHER ๋ฝ‘๊ธฐ(์ธํ˜•๋ฝ‘๊ธฐ) ๋ผ์šฐํŠธ
โ”‚   โ”œโ”€โ”€ makima-says/page.tsx   # ๋งˆํ‚ค๋งˆ says ๋ผ์šฐํŠธ
โ”‚   โ””โ”€โ”€ garak-guksu/page.tsx   # ์—ญ์ „๊ตญ์ˆ˜ ๋ผ์šฐํŠธ
โ”œโ”€โ”€ public/
โ”‚   โ”œโ”€โ”€ escape-game/           # 2D Canvas ๊ฒŒ์ž„
โ”‚   โ”œโ”€โ”€ survival-game/         # Babylon.js 3D (game-modular.js + src/)
โ”‚   โ”œโ”€โ”€ flight-game/           # CesiumJS 3D (game.js + src/)
โ”‚   โ”œโ”€โ”€ desert-game/           # Three.js 3D ๋กœ์šฐํด๋ฆฌ (src/ ESM, importmap)
โ”‚   โ”œโ”€โ”€ ppopgi/                # Three.js 0.184 + cannon-es ๋ฌผ๋ฆฌ ์ธํ˜•๋ฝ‘๊ธฐ (src/ ESM, importmap)
โ”‚   โ”œโ”€โ”€ makima-says/           # ๋งˆํ‚ค๋งˆ says ๋‘ ๋ชฉ์†Œ๋ฆฌ ์‚ฌ์ด๋จผ (src/ ESM)
โ”‚   โ”œโ”€โ”€ garak-guksu/           # ์—ญ์ „๊ตญ์ˆ˜ ๊ฐ€๋ฝ๊ตญ์ˆ˜ ์„œ๋น™ (Three.js, src/ ESM)
โ”‚   โ””โ”€โ”€ shared/                # ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ๊ณต์œ  ํด๋ผ์ด์–ธํŠธ
โ”‚       โ”œโ”€โ”€ networking/        # GameClient ยท State/InputBuffer ยท MessageTypes
โ”‚       โ””โ”€โ”€ lobby/             # LobbyUI
โ”œโ”€โ”€ server/                    # Socket.io ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ์„œ๋ฒ„ (TypeScript)
โ”‚   โ”œโ”€โ”€ src/
โ”‚   โ”‚   โ”œโ”€โ”€ index.ts           # ์„œ๋ฒ„ ์—”ํŠธ๋ฆฌ + /health
โ”‚   โ”‚   โ”œโ”€โ”€ lobby/             # LobbyManager ยท Room ยท RoomCodeGenerator
โ”‚   โ”‚   โ”œโ”€โ”€ games/             # escape / flight / survival ๊ฒŒ์ž„ ์„ธ์…˜
โ”‚   โ”‚   โ””โ”€โ”€ network/           # SocketManager ยท MessageTypes
โ”‚   โ”œโ”€โ”€ Dockerfile
โ”‚   โ””โ”€โ”€ docker-compose.yml
โ”œโ”€โ”€ __tests__/                 # Vitest ๋‹จ์œ„/ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ
โ”œโ”€โ”€ e2e/                       # Playwright E2E ํ…Œ์ŠคํŠธ
โ”œโ”€โ”€ scripts/                   # ๋นŒ๋“œ ์‹œ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ฃผ์ž… ์Šคํฌ๋ฆฝํŠธ
โ””โ”€โ”€ .github/workflows/ci.yml   # CI ํŒŒ์ดํ”„๋ผ์ธ

๐Ÿ—บ๏ธ ๋กœ๋“œ๋งต

  • ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ์„œ๋ฒ„ ์žฌ๊ฐ€๋™ (๋„์ฃผ ยท ์„œ๋ฐ”์ด๋ฒŒ ยท ๋น„ํ–‰ ๋Ÿฐํƒ€์ž„ ํ†ตํ•ฉ)
  • ๊ฒŒ์ž„๋ณ„ ์Šคํฌ๋ฆฐ์ƒท/GIF ์ถ”๊ฐ€
  • ๋ชจ๋ฐ”์ผ ํ„ฐ์น˜ ์กฐ์ž‘ โ€” ์ธํ˜•๋ฝ‘๊ธฐ ยท ๋งˆํ‚ค๋งˆ ยท ์—ญ์ „๊ตญ์ˆ˜ ยท ๋„์ฃผ ์ง€์›
  • ๋ชจ๋ฐ”์ผ ํ„ฐ์น˜ ์กฐ์ž‘ โ€” ์„œ๋ฐ”์ด๋ฒŒ ยท ๋น„ํ–‰ ยท ์‚ฌ๋ง‰(3D ํ‚ค๋ณด๋“œ ๊ฒŒ์ž„) ํ™•์žฅ
  • ๊ฒŒ์ž„๋ณ„ ๋ฒ ์ŠคํŠธ ๊ธฐ๋ก/๋„์ „๊ณผ์ œ ํ—ˆ๋ธŒ ํ†ตํ•ฉ

๐Ÿ“„ ๋ผ์ด์„ ์Šค

MIT ยฉ 2026 Si Hyeong Lee

About

๐ŸŽฎ Game hub โ€” 5 browser games across 4 rendering engines (Canvas ยท Babylon.js ยท CesiumJS ยท Three.js) with Socket.io real-time multiplayer. Next.js monorepo.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors