Skip to content

sbbae0318/baebg

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

12 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Skull King - ์‹ค์‹œ๊ฐ„ ๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด ์›น ๋ณด๋“œ๊ฒŒ์ž„

ํ•ด์  ํ…Œ๋งˆ์˜ ํŠธ๋ฆญ ํ…Œ์ดํ‚น ์นด๋“œ ๊ฒŒ์ž„ **์Šค์ปฌํ‚น(Skull King)**์˜ ์›น ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

์Šคํฌ๋ฆฐ์ƒท

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ๐ŸŸข Connected    ๐Ÿ’€ Skull Kingโ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  [Player1] [Player2] [Me]   โ”‚
โ”‚   ๋ฒ ํŒ…:2     ๋ฒ ํŒ…:1    ๋ฒ ํŒ…:? โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚         ํ˜„์žฌ ํŠธ๋ฆญ            โ”‚
โ”‚    ๐Ÿ”ต7  โ†’  โšซ5  โ†’  ???     โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚        ๋‚ด ์นด๋“œ (3์žฅ)         โ”‚
โ”‚   [๐ŸŸก3] [๐Ÿ”ด8] [๐Ÿดโ€โ˜ ๏ธ]        โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  [๐ŸŽฎ Game]    [๐Ÿ’ฌ Chat]     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๋น ๋ฅธ ์‹œ์ž‘

# ์˜์กด์„ฑ ์„ค์น˜
npm install

# ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰ (์„œ๋ฒ„ + ํด๋ผ์ด์–ธํŠธ ๋™์‹œ)
npm run dev

๊ธฐ์ˆ  ์Šคํƒ

์˜์—ญ ๊ธฐ์ˆ 
ํ”„๋ก ํŠธ์—”๋“œ React 18 + Vite + TypeScript
๋ฐฑ์—”๋“œ Node.js + Express + WebSocket (ws)
์ƒํƒœ๊ด€๋ฆฌ ์„œ๋ฒ„ Authoritative + React Context
์Šคํ‚ค๋งˆ ๊ฒ€์ฆ Zod
ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ npm workspaces (monorepo)

ํ”„๋กœ์ ํŠธ ๊ตฌ์กฐ

skull-king/
โ”œโ”€โ”€ package.json          # ๋ฃจํŠธ (workspaces)
โ”œโ”€โ”€ shared/               # ๊ณต์œ  ํƒ€์ž…/์Šคํ‚ค๋งˆ
โ”‚   โ””โ”€โ”€ src/
โ”‚       โ”œโ”€โ”€ types/        # ์นด๋“œ, ํ”Œ๋ ˆ์ด์–ด, ๊ฒŒ์ž„ ์ƒํƒœ ํƒ€์ž…
โ”‚       โ””โ”€โ”€ schemas/      # Zod ์Šคํ‚ค๋งˆ (๋ฉ”์‹œ์ง€ ๊ฒ€์ฆ)
โ”œโ”€โ”€ server/               # ๋ฐฑ์—”๋“œ
โ”‚   โ””โ”€โ”€ src/
โ”‚       โ”œโ”€โ”€ game/         # ๊ฒŒ์ž„ ์—”์ง„ (๋ฑ, ํŠธ๋ฆญ, ์ ์ˆ˜)
โ”‚       โ”œโ”€โ”€ store/        # ๋ฉ”๋ชจ๋ฆฌ ๋ฃธ ์ €์žฅ์†Œ
โ”‚       โ””โ”€โ”€ websocket/    # WebSocket ํ•ธ๋“ค๋Ÿฌ
โ”œโ”€โ”€ client/               # ํ”„๋ก ํŠธ์—”๋“œ
โ”‚   โ””โ”€โ”€ src/
โ”‚       โ”œโ”€โ”€ components/   # UI ์ปดํฌ๋„ŒํŠธ
โ”‚       โ”œโ”€โ”€ context/      # ๊ฒŒ์ž„ ์ƒํƒœ Context
โ”‚       โ””โ”€โ”€ hooks/        # WebSocket, LocalStorage ํ›…
โ””โ”€โ”€ docs/                 # ์„ค๊ณ„ ๋ฌธ์„œ
    โ””โ”€โ”€ rules.md          # ๊ฒŒ์ž„ ๊ทœ์น™

๊ฒŒ์ž„ ๊ทœ์น™ (MVP)

๊ฐœ์š”

  • ํ”Œ๋ ˆ์ด์–ด: 2~6๋ช…
  • ๋ผ์šด๋“œ: 10๋ผ์šด๋“œ (๋ผ์šด๋“œ N์—์„œ N์žฅ์”ฉ ๋ฐฐ๋ถ„)
  • ๋ชฉํ‘œ: ๋ฒ ํŒ…ํ•œ ํŠธ๋ฆญ ์ˆ˜๋ฅผ ์ •ํ™•ํžˆ ๋งž์ถฐ ์ ์ˆ˜ ํš๋“

์นด๋“œ ๊ตฌ์„ฑ (66์žฅ)

  • ์ˆซ์ž ์นด๋“œ: 4์ƒ‰(๋…ธ๋ž‘/ํŒŒ๋ž‘/๋นจ๊ฐ•/๊ฒ€์ •) ร— 13์žฅ = 52์žฅ
  • ํŠน์ˆ˜ ์นด๋“œ: ๋„๋ง(5), ํ•ด์ (5), ์ธ์–ด(2), ์Šค์ปฌํ‚น(1), ํƒ€์ด๊ทธ๋ ˆ์Šค(1) = 14์žฅ

์นด๋“œ ๊ฐ•๋„

๐Ÿ’€ Skull King > ๐Ÿงœ Mermaid (์ธ์–ด๊ฐ€ ์Šค์ปฌํ‚น์„ ์žก์Œ!)
๐Ÿงœ Mermaid > ๐Ÿดโ€โ˜ ๏ธ Pirate (์ธ์–ด๊ฐ€ ํ•ด์ ์„ ์žก์Œ!)
๐Ÿดโ€โ˜ ๏ธ Pirate > ์ˆซ์ž ์นด๋“œ
โšซ Black(ํŠธ๋Ÿผํ”„) > ๋ฆฌ๋“œ ์ˆ˜ํŠธ > ๐Ÿƒ Escape

์ ์ˆ˜ ๊ณ„์‚ฐ

๊ฒฐ๊ณผ ์ ์ˆ˜
0 ๋ฒ ํŒ… ์„ฑ๊ณต +๋ผ์šด๋“œ๋ฒˆํ˜ธ ร— 10
0 ๋ฒ ํŒ… ์‹คํŒจ -๋ผ์šด๋“œ๋ฒˆํ˜ธ ร— 10
N ๋ฒ ํŒ… ์„ฑ๊ณต +20 ร— N
N ๋ฒ ํŒ… ์‹คํŒจ -10 ร—

์ž์„ธํ•œ ๊ทœ์น™์€ docs/rules.md ์ฐธ์กฐ.

๋„คํŠธ์›Œํฌ ํ”„๋กœํ† ์ฝœ

ํด๋ผ์ด์–ธํŠธ โ†’ ์„œ๋ฒ„

ํƒ€์ž… ์„ค๋ช…
JOIN ๋ฃธ ์ž…์žฅ
CHAT_SEND ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€
READY ์ค€๋น„ ์ƒํƒœ
GAME_START ๊ฒŒ์ž„ ์‹œ์ž‘ (๋ฐฉ์žฅ)
BID_SUBMIT ๋ฒ ํŒ… ์ œ์ถœ
CARD_PLAY ์นด๋“œ ์ œ์ถœ

์„œ๋ฒ„ โ†’ ํด๋ผ์ด์–ธํŠธ

ํƒ€์ž… ์„ค๋ช…
WELCOME ์ž…์žฅ ์™„๋ฃŒ + ๋ฃธ ์Šค๋ƒ…์ƒท
ROOM_SNAPSHOT ์ „์ฒด ์ƒํƒœ ์—…๋ฐ์ดํŠธ
ROUND_STARTED ๋ผ์šด๋“œ ์‹œ์ž‘ + ํ•ธ๋“œ
BID_PLACED ๋ฒ ํŒ… ์™„๋ฃŒ ์•Œ๋ฆผ
CARD_PLAYED ์นด๋“œ ์ œ์ถœ๋จ
TRICK_ENDED ํŠธ๋ฆญ ์ข…๋ฃŒ + ์Šน์ž
ROUND_ENDED ๋ผ์šด๋“œ ์ข…๋ฃŒ + ์ ์ˆ˜
GAME_ENDED ๊ฒŒ์ž„ ์ข…๋ฃŒ + ์ˆœ์œ„

๊ฐœ๋ฐœ ๋ช…๋ น์–ด

# ์ „์ฒด ์˜์กด์„ฑ ์„ค์น˜
npm install

# ๊ฐœ๋ฐœ ์„œ๋ฒ„ (์„œ๋ฒ„ + ํด๋ผ์ด์–ธํŠธ ๋™์‹œ)
npm run dev

# ์„œ๋ฒ„๋งŒ ์‹คํ–‰
npm run dev:server

# ํด๋ผ์ด์–ธํŠธ๋งŒ ์‹คํ–‰
npm run dev:client

# ๊ณต์œ  ํŒจํ‚ค์ง€ ๋นŒ๋“œ
npm run build:shared

# ํ…Œ์ŠคํŠธ
npm test

๐ŸŽฎ ํ”Œ๋ ˆ์ด ๋ฐฉ๋ฒ•

  1. npm run dev ์‹คํ–‰ (์„œ๋ฒ„: 8080ํฌํŠธ, ํด๋ผ์ด์–ธํŠธ: 3000ํฌํŠธ)
  2. ๋ธŒ๋ผ์šฐ์ € ์ฐฝ 2~3๊ฐœ๋กœ http://localhost:3000 ์ ‘์†
  3. ๊ฐ ์ฐฝ์—์„œ ๋‹ค๋ฅธ ๋‹‰๋„ค์ž„ ์ž…๋ ฅ ํ›„ ์ž๋™ ์ž…์žฅ
  4. ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด "์ค€๋น„ ์™„๋ฃŒ" ํด๋ฆญ
  5. ๋ฐฉ์žฅ์ด "๊ฒŒ์ž„ ์‹œ์ž‘" ํด๋ฆญ
  6. ๋ฒ ํŒ… โ†’ ํŠธ๋ฆญ ํ”Œ๋ ˆ์ด โ†’ ์ ์ˆ˜ ํ™•์ธ ๋ฐ˜๋ณต (10๋ผ์šด๋“œ)

๐Ÿ“ฑ ๋ชจ๋ฐ”์ผ ์ตœ์ ํ™” UX

ํ•ต์‹ฌ ๋™์„ : "์ฑ„ํŒ…ํ•˜๋‹ค๊ฐ€๋„ ๋‚ด ํ„ด์ด๋ฉด ๋ฐ”๋กœ ๊ฒŒ์ž„ ๋ณต๊ท€"

๐ŸŽฏ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ๋ฏธ๋‹ˆ ๊ฒŒ์ž„ HUD: ์ฑ„ํŒ… ํ™”๋ฉด ์ƒ๋‹จ์—์„œ ๊ฒŒ์ž„ ์ƒํƒœ ์‹ค์‹œ๊ฐ„ ํ™•์ธ
    • ํ˜„์žฌ ๋ผ์šด๋“œ/๋ผ์šด๋“œ ์ˆ˜, ๊ฒŒ์ž„ ํŽ˜์ด์ฆˆ, ๋‚ด ์ ์ˆ˜ ํ‘œ์‹œ
    • ๋‚ด ํ„ด์ผ ๋•Œ ๊ฐ•์กฐ ํ‘œ์‹œ + "๋‚ด ํ„ด!" ๋ฐฐ์ง€
  • ๊ฐ•ํ™” ์•Œ๋ฆผ ์‹œ์Šคํ…œ:
    • ๐Ÿ”Š ์‚ฌ์šด๋“œ ์•Œ๋ฆผ: ๋‚ด ํ„ด ์‹œ ๋น„ํ”„์Œ ์ž๋™ ์žฌ์ƒ
    • ๐Ÿ”” ๋ธŒ๋ผ์šฐ์ € ์•Œ๋ฆผ: ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ๋„ ํ‘ธ์‹œ ์•Œ๋ฆผ (๊ถŒํ•œ ํ—ˆ์šฉ ์‹œ)
    • ๐Ÿ“‹ ์ œ๋ชฉ ๋ณ€๊ฒฝ: ํƒญ์ด ๋ฐฑ๊ทธ๋ผ์šด๋“œ์ผ ๋•Œ "๐Ÿ”” ๋‚ด ํ„ด! - ์Šค์ปฌํ‚น"์œผ๋กœ ํ‘œ์‹œ
  • ์›ํ„ฐ์น˜ ๋ณต๊ท€: ์ฑ„ํŒ… ์ค‘ ๋‚ด ํ„ด์ด ๋˜๋ฉด "๊ฒŒ์ž„์œผ๋กœ" ๋ฒ„ํŠผ ์ž๋™ ํ‘œ์‹œ

๐Ÿ–ฑ๏ธ ๋ชจ๋ฐ”์ผ ์นœํ™”์  ํ„ฐ์น˜

  • 44px+ ํ„ฐ์น˜ ์˜์—ญ: ๋ชจ๋“  ๋ฒ„ํŠผ์ด ๋ชจ๋ฐ”์ผ ํ„ฐ์น˜ ๊ฐ€์ด๋“œ๋ผ์ธ ์ค€์ˆ˜
  • ๊ณ ์ • ํ•˜๋‹จ ํƒญ: Game | Chat ํƒญ์ด ํ•˜๋‹จ ๊ณ ์ •, ์—„์ง€๋กœ ์‰ฌ์šด ์ „ํ™˜
  • ์Šคํฌ๋กค ๊ฐ€๋Šฅํ•œ ์นด๋“œ: ๋งŽ์€ ์นด๋“œ๋„ ๊ฐ€๋กœ ์Šคํฌ๋กค๋กœ ํŽธ๋ฆฌํ•˜๊ฒŒ ์„ ํƒ
  • ์นด๋“œ ํ”ผ๋“œ๋ฐฑ: ํ„ฐ์น˜ ์‹œ ์ฆ‰๊ฐ์ ์ธ ์‹œ๊ฐ์ /ํ–…ํ‹ฑ ํ”ผ๋“œ๋ฐฑ

๐ŸŽฎ ๊ฒŒ์ž„ ํ”Œ๋กœ์šฐ

๐Ÿ“ฑ ์ฑ„ํŒ… ์ค‘ โ†’ ๐Ÿ”” ๋‚ด ํ„ด ์•Œ๋ฆผ โ†’ ๐Ÿ‘† ์›ํ„ฐ์น˜ ๊ฒŒ์ž„ ๋ณต๊ท€ โ†’ ๐ŸŽฏ ์นด๋“œ ์„ ํƒ โ†’ โœ… ์™„๋ฃŒ ํ›„ ์ž๋™์œผ๋กœ ์ฑ„ํŒ… ๋ณต๊ท€ ๊ฐ€๋Šฅ

๐Ÿ“ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ

  • ๋ฐ์Šคํฌํ†ฑ: ์™€์ด๋“œ ๋ ˆ์ด์•„์›ƒ, ํ˜ธ๋ฒ„ ํšจ๊ณผ
  • ํƒœ๋ธ”๋ฆฟ: ์ค‘๊ฐ„ ํฌ๊ธฐ ํ„ฐ์น˜ ์˜์—ญ, ์นด๋“œ ํฌ๊ธฐ ์ตœ์ ํ™”
  • ์Šค๋งˆํŠธํฐ: ์„ธ๋กœ/๊ฐ€๋กœ ๋ชจ๋“œ ์ง€์›, ์นด๋“œ ๊ฒน์นจ ๋ฐฉ์ง€

์ ‘๊ทผ์„ฑ ๊ฐœ์„ 

  • ์ƒ‰์ƒ ๋Œ€๋น„ WCAG AA ์ค€์ˆ˜
  • ํ„ฐ์น˜ ์˜์—ญ ์ตœ์†Œ 44px ๋ณด์žฅ
  • ์Šคํฌ๋ฆฐ ๋ฆฌ๋” ํ˜ธํ™˜์„ฑ
  • ํ‚ค๋ณด๋“œ ๋„ค๋น„๊ฒŒ์ด์…˜ ์ง€์›

MVP ์ œํ•œ์‚ฌํ•ญ

  • ๋‹จ์ผ public ๋ฃธ (ํ”„๋ผ์ด๋น— ๋ฃธ ์—†์Œ)
  • ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ (์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์‹œ ์ดˆ๊ธฐํ™”)
  • ํƒ€์ž„์•„์›ƒ ์—†์Œ (๋ฌด์ œํ•œ ๋Œ€๊ธฐ)
  • ๋ณด๋„ˆ์Šค ์ ์ˆ˜ ์—†์Œ

๐Ÿš€ ์„ฑ๋Šฅ ๋ฐ ํ˜ธํ™˜์„ฑ

  • ์ง€์› ๋ธŒ๋ผ์šฐ์ €: Chrome 90+, Safari 14+, Firefox 88+
  • ๋ชจ๋ฐ”์ผ ์ง€์›: iOS Safari, Android Chrome
  • ๋„คํŠธ์›Œํฌ: WebSocket ์‹ค์‹œ๊ฐ„ ํ†ต์‹  (์ž๋™ ์žฌ์—ฐ๊ฒฐ)
  • PWA ์ค€๋น„: ํ™ˆ ํ™”๋ฉด ์ถ”๊ฐ€, ์˜คํ”„๋ผ์ธ ์ค€๋น„

๋ฐ๋ชจ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

๋ฐ๋ชจ ์ „ ๋‹ค์Œ ํ•ญ๋ชฉ๋“ค์„ ํ™•์ธํ•˜์„ธ์š”:

ํ™˜๊ฒฝ ์ค€๋น„

  • Node.js 18+ ์„ค์น˜๋จ
  • npm install ์™„๋ฃŒ
  • npm run dev ์‹คํ–‰ (์„œ๋ฒ„ 8080, ํด๋ผ์ด์–ธํŠธ 3000)

๊ธฐ๋ณธ ๊ธฐ๋Šฅ

  • ๋‹‰๋„ค์ž„ ์ž…๋ ฅ ํ›„ ์ž๋™ ์ž…์žฅ
  • ์ฑ„ํŒ… ๋ฉ”์‹œ์ง€ ์‹ค์‹œ๊ฐ„ ์ „์†ก/์ˆ˜์‹ 
  • ๋ชจ๋“  ํ”Œ๋ ˆ์ด์–ด "์ค€๋น„ ์™„๋ฃŒ" โ†’ ๋ฐฉ์žฅ์ด "๊ฒŒ์ž„ ์‹œ์ž‘"
  • ๋ฒ ํŒ… โ†’ ์นด๋“œ ํ”Œ๋ ˆ์ด โ†’ ํŠธ๋ฆญ ๊ฒฐ๊ณผ โ†’ ๋ผ์šด๋“œ ์ ์ˆ˜

์•ˆ์ •์„ฑ (v2.0)

  • ์ƒˆ๋กœ๊ณ ์นจ ํ›„ ์ž๋™ ์žฌ์—ฐ๊ฒฐ (30์ดˆ ๋‚ด)
  • ์žฌ์—ฐ๊ฒฐ ์‹œ ๊ฒŒ์ž„ ์ƒํƒœ ์œ ์ง€
  • ์—ฐ๊ฒฐ ์ƒํƒœ ํ‘œ์‹œ (์—ฐ๊ฒฐ๋จ/์žฌ์—ฐ๊ฒฐ ์ค‘.../์—ฐ๊ฒฐ ๋Š๊น€)
  • ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ Toast ํ‘œ์‹œ
  • ๋น ๋ฅธ ์ค‘๋ณต ํด๋ฆญ ๋ฐฉ์ง€

๋ฉ€ํ‹ฐํ”Œ๋ ˆ์ด์–ด ํ…Œ์ŠคํŠธ

  1. ๋ธŒ๋ผ์šฐ์ € ์ฐฝ 2-3๊ฐœ ์—ด๊ธฐ
  2. ๊ฐ๊ฐ ๋‹ค๋ฅธ ๋‹‰๋„ค์ž„์œผ๋กœ ์ž…์žฅ
  3. ํ•œ ์ฐฝ์—์„œ ์ƒˆ๋กœ๊ณ ์นจ โ†’ ์ž๋™ ์žฌ์ ‘์† ํ™•์ธ
  4. ๊ฒŒ์ž„ ์ค‘ ํ•œ ํ”Œ๋ ˆ์ด์–ด ์ƒˆ๋กœ๊ณ ์นจ โ†’ ๊ฒŒ์ž„ ๊ณ„์† ๊ฐ€๋Šฅ ํ™•์ธ

์•Œ๋ ค์ง„ ์ œํ•œ์‚ฌํ•ญ

  • ๋‹จ์ผ public ๋ฃธ๋งŒ ์ง€์›
  • ์„œ๋ฒ„ ์žฌ์‹œ์ž‘ ์‹œ ๋ชจ๋“  ์ƒํƒœ ์ดˆ๊ธฐํ™”
  • ํƒ€์ž„์•„์›ƒ ์—†์Œ (ํ”Œ๋ ˆ์ด์–ด ๋Œ€๊ธฐ ๋ฌด์ œํ•œ)

๋ผ์ด์„ ์Šค

MIT

About

bae boardgame

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages