๋ฐ์์ ๋ง์ถฐ ์์์ง๋ ์งง์ ๋ฏธ์ ์ ํด๊ฒฐํ๊ณ , ๋ชฉ์จ์ ์งํค๋ฉฐ ๋ ๋์ ์ธต๊น์ง ์ฌ๋ผ๊ฐ๋ ์น ๋ง์ดํฌ๋ก๊ฒ์์ ๋๋ค.
์บฃํ์ ์ค๋ฅด๊ธฐ๋ WarioWare ์คํ์ผ์ ์ด๋จ๊ธฐ ๋ฏธ์ ์ Next.js์ Canvas๋ก ๊ตฌํํ ๋ฆฌ๋ฌํ ์น ๊ฒ์์ ๋๋ค. ๋งค ๋ผ์ด๋๋ง๋ค ์กฐ์๋ฒ์ด ๋จผ์ ์ ์๋๊ณ , ํ๋ ์ด์ด๋ ์ ํ๋ ๋ฐ์ ์์ ๊ณผ์ ์ ์ถ, ์ค์นด๋ฆฌ๋ ์ฐ์ฃผ, ์๊น๊ธฐ, ํฌ์ผ๋ชฌ ์ด๋ฆ ๋งํ๊ธฐ, ์ ์ ์ฐ๊ฒฐ, ๊ฐ์ ํผํ๊ธฐ ๊ฐ์ ๋ฏธ์ ์ ํด๊ฒฐํด์ผ ํฉ๋๋ค.
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ์ฅ๋ฅด | ๋ฐ์ ๊ธฐ๋ฐ ๋ง์ดํฌ๋ก๊ฒ์ |
| ํ๋ซํผ | Web |
| ๋ผ์ด๋ ๊ตฌ์กฐ | ์กฐ์๋ฒ ์๋ด -> ๋ฏธ์ -> ์ฑ๊ณต/์คํจ ํ์ |
| ์ ํ ๊ท์น | ์ธ์ ๋๋ค bag, ์ง์ ๊ฒ์ ์ฆ์ ๋ฐ๋ณต ๋ฐฉ์ง |
| ๋ณด์ค ๊ท์น | 12๋ผ์ด๋๋ง๋ค ๋ณด์ค microgame pool์์ ๋ผ์ด๋ ์ ํ |
| ์ ์ฅ | localStorage ์ต๊ณ ๊ธฐ๋ก ๋ฐ ๋๊ฐ ๋ฐ๊ฒฌ ๊ธฐ๋ก ์ ์ฅ |
| ์์ | public/games/*/images, public/games/*/sounds |
์์
ํ๋ฆฌ๋ก๋
-> ๋ฉ์ธ ํ๋ฉด
-> ์กฐ์๋ฒ ์๋ด
-> ์์ ํ๋กฌํํธ
-> ๋ฐ์ ์ ํ ๋ฏธ์
-> ์ฑ๊ณต / ์คํจ ํ์
-> ์๋ ์ฆ๊ฐ ๋๋ ๋ชฉ์จ ํ๋ณต
-> 12๋ผ์ด๋๋ง๋ค ๋ณด์ค ๋ผ์ด๋
-> ๊ฒ์ ์ค๋ฒ ๋ฐ ์ต๊ณ ๊ธฐ๋ก ์ ์ฅ| ๊ฒ์ | ๋ฏธ์ | ์กฐ์ | ๋ฐ์ | ์ข ๋ฅ |
|---|---|---|---|---|
| ๊ณผ์ ์ ์ถ | ๊ณผ์ ๋ฅผ ์ ์ถํด๋ผ! |
๋ง์ฐ์ค ํด๋ฆญ | 8 | ์ผ๋ฐ |
| ๋ ์ดํผ ๊ต์์ ์ด์ํ ๋ง์ | ๊ฐ์ ๋ชจ์์ ์ฐพ์๋ผ! |
์ซ์ํค | 8 | ์ผ๋ฐ |
| ๋ฆฌ๊ทธ ์ค๋ธ ๋ ์ ๋ | ์ฑํผ์ธ์ ๋ฐดํด๋ผ! |
๋ง์ฐ์ค ํด๋ฆญ | 12 | ์ผ๋ฐ |
| ๋ฆฌ๋ฌ ์ธ์ | ์ ๋ ๋ฉ์ถฐ๋ผ! |
๋ง์ฐ์ค hold | 8 | ์ผ๋ฐ |
| ๋ง์ธํฌ๋ํํธ | ๋ค์ด์๋ชฌ๋๋ฅผ ์บ๋ผ! |
๋ง์ฐ์ค hold | 8 | ์ผ๋ฐ |
| ๋ง๋๋ง๋ ๋๋๊ต์ค | ๋ธ๋ก์ ๋ช ๊ฐ? |
์ซ์ํค | 12 | ์ผ๋ฐ |
| ๋ฉ์ดํ์คํ ๋ฆฌ | ์
๋ ฅํด๋ผ! |
ํ๊ธ ํค๋ณด๋ | 12 | ์ผ๋ฐ |
| ๋ฉ์ดํ์คํ ๋ฆฌ ๋ฃฌ | ์์๋๋ก ์
๋ ฅํด๋ผ! |
๋ฐฉํฅํค | 8 | ์ผ๋ฐ |
| ๋ชจ๋์ ๋ง๋ธ | ํฐ ์๋ฅผ ๊ตด๋ ค๋ผ! |
๋ง์ฐ์ค hold | 8 | ์ผ๋ฐ |
| ๋ชจ์ฌ๋ด์ ๋๋ฌผ์ ์ฒ | ์ฐ์ด๋ผ! |
๋ง์ฐ์ค ํด๋ฆญ | 8 | ์ผ๋ฐ |
| ๋ฏธ๋๊ฒ์EX | ๊ณฐ์ ์๋ด๋ผ! |
์ซ์ํค | 16 | ์ผ๋ฐ |
| ๋ณ์ ์ปค๋น: ์ธํธ๋ผ ์ํผ ๋๋ญ์ค | ๋นจ์๋ค์ฌ๋ผ! |
๋ง์ฐ์ค hold | 8 | ์ผ๋ฐ |
| ๋ถ๊ณผ ์ผ์์ ์ถค | ๋ฐ์์ ๋ง์ถฐ ๋๋ฌ๋ผ! |
์คํ์ด์ค๋ฐ | 8 | ์ผ๋ฐ |
| ์ฌ๊ณผ๊ฒ์ | 10์ ๋ง๋ค์ด๋ผ! |
๋ง์ฐ์ค ๋๋๊ทธ | 12 | ์ผ๋ฐ |
| ์๋ฐ๊ฒ์ | ์๋ฐ์ ๋ง๋ค์ด๋ผ! |
๋ฐฉํฅํค + ์คํ์ด์ค๋ฐ | 8 | ์ผ๋ฐ |
| ์ํผ ๋ง๋ฆฌ์ค | ์ฝ์ธ์ ์ ํํ ๋ชจ์๋ผ! |
์คํ์ด์ค๋ฐ | 8 | ์ผ๋ฐ |
| ์ํผ๋ง๋ฆฌ์ค ๊ฐค๋ญ์ | ์คํ๊ตฌ์ฌ์ ๋ชจ์๋ผ! |
๋ง์ฐ์ค ๋๋๊ทธ | 12 | ์ผ๋ฐ |
| ์ค๋์ฟ | ๋น์นธ์ ์ฑ์๋ผ! |
์ซ์ํค | 12 | ์ผ๋ฐ |
| ์๊น๊ธฐ | ์ ๋์ ๋ฐ์ด๋ด๋ผ! |
๋ง์ฐ์ค ๋๋๊ทธ | 8 | ์ผ๋ฐ |
| ์ด๋ชฝ์ด์ค | ์ฐ๊ฒฐํด๋ผ! |
๋ง์ฐ์ค ๋๋๊ทธ | 14 | ์ผ๋ฐ |
| ์ธ๋ํ ์ผ | ํผํด๋ผ! |
๋ฐฉํฅํค | 8 | ์ผ๋ฐ |
| ์ค๋ชฉ | ํฐ๋์ ๋์ ์ด๊ฒจ๋ผ! |
๋ง์ฐ์ค ํด๋ฆญ | 8 | ์ผ๋ฐ |
| ์ ค๋ค์ ์ ์ค: ์ค์นด์ด์๋ ์๋ | ๋๊ทธ๋ผ๋ฏธ๋ฅผ ๊ทธ๋ ค๋ผ! |
๋ง์ฐ์ค ๋๋๊ทธ | 12 | ์ผ๋ฐ |
| ์ ค๋ค์ ์ ์ค: ์๊ฐ์ ์ค์นด๋ฆฌ๋ | ์ฐ์ฃผํด๋ผ! |
๋ฐฉํฅํค + ์คํ์ด์ค๋ฐ | 12 | ์ผ๋ฐ |
| ์ง์ค๋ฉํธ๋ฆฌ ๋์ | ๊ฐ์๋ฅผ ํผํด๋ผ! |
์คํ์ด์ค๋ฐ | 12 | ์ผ๋ฐ |
| ์ฟ ํค๋ฐ: ์ค๋ธ๋ธ๋ ์ดํฌ | ๋ฌ๋ ค๋ผ! |
๋ฐฉํฅํค + ์คํ์ด์ค๋ฐ | 12 | ์ผ๋ฐ |
| ์ฟ ํค๋ฐ: ํน๋ค | ์คํฌ์ ๋ฐ๋ํด๋ผ! |
์ซ์ํค | 8 | ์ผ๋ฐ |
| ํฌ๋ ์ด์ง ์์ผ์ด๋ | ๋ฌผํ์ ์ ์ค์นํด๋ผ! |
๋ฐฉํฅํค + ์คํ์ด์ค๋ฐ | 12 | ์ผ๋ฐ |
| ํฌ๋กฌ ๊ณต๋ฃก๊ฒ์ | ์ ํํด๋ผ! |
์คํ์ด์ค๋ฐ | 8 | ์ผ๋ฐ |
| ํ ํธ๋ฆฌ์ค | 4์ค ์์ ๋ผ! |
๋ฐฉํฅํค + ์คํ์ด์ค๋ฐ | 12 | ์ผ๋ฐ |
| ํฌ์ผ๋ชฌ์คํฐ | ์ด ํฌ์ผ๋ชฌ์ ์ด๋ฆ์? |
ํ๊ธ ํค๋ณด๋ | 12 | ์ผ๋ฐ |
| ํฌ์ผ๋ชฌ ์นด๋ ๊ฒ์ Pocket | ๋ง๋ ํ์
์นด๋๋ฅผ ๋ด๋ผ! |
๋ง์ฐ์ค ๋๋๊ทธ | 12 | ์ผ๋ฐ |
| ํ | ๋ฒํ
จ๋ผ! |
๋ฐฉํฅํค | 8 | ์ผ๋ฐ |
| ํ๋ํผ๋ฒ๋ | ํ์ดํ๋ฅผ ํผํด๋ผ! |
์คํ์ด์ค๋ฐ | 8 | ์ผ๋ฐ |
| ํผ์๋ ธ | ์ฐ์ฃผํด๋ผ! |
์ซ์ํค | 10 | ์ผ๋ฐ |
| ํ์ปด ํ์์ฐ์ต | ๋จ์ด๋ฅผ ์
๋ ฅํด๋ผ! |
ํ๊ธ ํค๋ณด๋ | 12 | ์ผ๋ฐ |
| Baba Is You | ๊น๋์ ๋๋ฌํด๋ผ! |
๋ฐฉํฅํค | 8 | ์ผ๋ฐ |
| Fire Boy and Water Girl | ๊ฑด๋๊ฐ๋ผ! |
๋ฐฉํฅํค | 8 | ์ผ๋ฐ |
| Wii Sports | A์ B๋ฅผ ๋๋ฌ๋ผ! |
ํ๊ธ ํค๋ณด๋ | 8 | ์ผ๋ฐ |
| 2048 | 32๋ฅผ ๋ง๋ค์ด๋ผ! |
๋ฐฉํฅํค | 36 | ๋ณด์ค |
| ๋๋ฌผ๋์ฅ | ๋จ์ด๋ฅผ ๊ฑฐ๊พธ๋ก ์จ๋ผ! |
ํ๊ธ ํค๋ณด๋ | 36 | ๋ณด์ค |
| ์นดํธ๋ผ์ด๋ | ์์ฃผํด๋ผ! |
๋ฐฉํฅํค | 36 | ๋ณด์ค |
| ํ ๋ฆฌ๊ฐ๋ฆฌ | ๊ณผ์ผ์ด 5๊ฐ์ผ ๋ ์ข
์ ์ณ๋ผ! |
๋ง์ฐ์ค ํด๋ฆญ | 36 | ๋ณด์ค |
- ๊ฒ์๋ณ BGM์ด ๋ผ์ด๋ ๋ฐ์์ ๋ง์ถฐ ์ฌ์๋ฉ๋๋ค.
- ์ฑ๊ณต, ์คํจ, ์ฑ๊ตด, ์ ์ ์ฐ๊ฒฐ, ์ ํ ๊ฐ์ ํ๋์ SFX๊ฐ ๋ถ์ต๋๋ค.
- ๋ชฉ์จ์ด ์ฌ๋ผ์ง๊ฑฐ๋ ์๋ก ์๊ธธ ๋ ์ค์ ๊ฐ ๋ณํ์ ๋ง์ถฐ ์ ๋๋ฉ์ด์ ์ด ์ฌ์๋ฉ๋๋ค.
- ํ๊ธ IME ์ ๋ ฅ์ ๊ณ ๋ คํด Pokemon, Maplestory, Hancom, AnimalFarm typing game์ด ๋์ํฉ๋๋ค.
- ์ ์ฉ ๊ฒฝ๋ ๋ฌผ๋ฆฌ ์๋ฎฌ๋ ์ด์ ์ผ๋ก ์๊น๊ธฐ ์ถฉ๋์ ์ฒ๋ฆฌํฉ๋๋ค.
- canvas ๊ฒ์์ ๊ฐ ๋ผ์ด๋๋ง๋ค remount๋์ด ์ด์ ์ํ๊ฐ ๋ค์ ๋ผ์ด๋๋ก ์์ง ์์ต๋๋ค.
- ํ๋ ์ดํ ๋ง์ดํฌ๋ก๊ฒ์์ ๋๊ฐ์ ๋ฐ๊ฒฌ ์ํ๋ก ์ ์ฅ๋ฉ๋๋ค.
- ๋ฐ๊ฒฌํ์ง ์์ ๊ฒ์์ ์ ๋ชฉ, ์กฐ์๋ฒ, ์ค๋ช ์ ๊ฐ๋ ค์ง ์ํ๋ก ํ์๋ฉ๋๋ค.
- ๋ฐ๊ฒฌํ ๊ฒ์์ ๋๊ฐ ์นด๋์์ ์ ํํด ์ฐ์ตํ ์ ์์ต๋๋ค.
- ๋๊ฐ ์นด๋๋ ํ๋ฉด ๋๋น์ ๋ฐ๋ผ 1~3์ด grid๋ก ๋ฐฐ์น๋์ด ๊ธด ๋ชฉ๋ก์ ์คํฌ๋กค์ ์ค์ ๋๋ค.
| ์กฐ์ ํ์ | ๊ธฐ๋ณธ ์กฐ์ |
|---|---|
space |
์คํ์ด์ค๋ฐ๋ฅผ ๋๋ฌ ์ ํ, flap, ํ์ด๋ฐ ์ ๋ ฅ์ ์ฒ๋ฆฌํฉ๋๋ค. |
arrowKeys |
๋ฐฉํฅํค๋ก ์ด๋ํ๊ฑฐ๋ ํ๋ฉด์ ๋ฐฉํฅ ์ง์๋ฅผ ์ ๋ ฅํฉ๋๋ค. |
arrowAndSpace |
๋ฐฉํฅํค์ ์คํ์ด์ค๋ฐ๋ฅผ ํจ๊ป ์ฌ์ฉํฉ๋๋ค. |
mouseClick |
๋ง์ฐ์ค๋ก ์ ๋ต, ๋ฒํผ, ์ข , ๋ง ์์น๋ฅผ ํด๋ฆญํฉ๋๋ค. |
mouseDrag |
๋ง์ฐ์ค๋ฅผ ๋๋ฅธ ์ฑ ๋์ด์ ์ฐ๊ฒฐ, ์ ํ, ์กฐ์ค, ๊ทธ๋ฆฌ๊ธฐ๋ฅผ ํฉ๋๋ค. |
mouseHold |
๋ง์ฐ์ค๋ฅผ ๋๋ฅธ ์ฑ ์ ์งํด ๊ฒ์ด์ง๋ ์งํ๋๋ฅผ ์ฑ์๋๋ค. |
koreanKeyboard |
ํ๊ธ IME ์ ๋ ฅ์ผ๋ก ์ ์๋ ๊ธ์๋ ๋จ์ด๋ฅผ ์ ๋ ฅํฉ๋๋ค. |
numberKeys |
์ซ์ํค๋ก ๋ณด๊ธฐ ๋ฒํธ, ๊ณฐ ๋ฒํธ, ๋ฉ๋ก๋ ์์ ์ ๋ ฅํฉ๋๋ค. |
| ์์ญ | ์ฌ์ฉ ๊ธฐ์ |
|---|---|
| App | Next.js App Router, React 19 |
| Language | TypeScript |
| Style | Tailwind CSS 4 |
| Gameplay | Canvas 2D, custom React hooks |
| Audio | Web Audio API ๊ธฐ๋ฐ BGM/SFX library |
| Assets | ์ ์ image/sound files under public/ |
| State | ๋ผ์ด๋ ์งํ hook, ์ ๋ ฅ hook, ๊ธฐ๋ก ์ ์ฅ hook |
์ต๋ช
๋ญํน์ ๋ธ๋ผ์ฐ์ ์์ submit_score RPC๋ฅผ ํธ์ถํ๊ณ , /ranking ์๋ฒ
ํ์ด์ง์์ 60์ด ์บ์๋ Top 10์ ์กฐํํฉ๋๋ค. ๋ค์ ํ๊ฒฝ ๋ณ์๋ฅผ ์ค์ ํ์ธ์.
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=Supabase์ anonymous role์ rankings ์กฐํ์ submit_score ์คํ๋ง ํ์ฉํด์ผ
ํฉ๋๋ค. ํ
์ด๋ธ ์ง์ ์ฐ๊ธฐ๋ ์ฐจ๋จํ๊ณ , RPC์์ (game_id, player_id)๋ณ ์ต๊ณ
์ ์๋ง ๊ฐฑ์ ํ๋๋ก ๊ตฌ์ฑํด์ผ ํฉ๋๋ค.
app/ Next.js route์ ์ ์ญ ์คํ์ผ
components/game-flow/ ๋ฉ์ธ ํ๋ฉด, ๋ผ์ด๋ ํ๋ฉด, ๊ฒฐ๊ณผ ํ๋ฉด, ๋ชฉ์จ UI
data/ ๋ง์ดํฌ๋ก๊ฒ์ registry, ์กฐ์๋ฒ, preload asset ๋ชฉ๋ก
games/ ๊ฐ microgame React canvas์ hook ๊ตฌํ
hooks/ ๋ผ์ด๋ ์งํ, ์
๋ ฅ, ๋ฆฌ๋ฌ, ๊ธฐ๋ก ์ ์ฅ hook
lib/ canvas helper์ BGM/SFX library
public/games/ ๊ฒ์๋ณ image/sound asset
types/ ๊ณต์ ํ์
์ ์ธnpm install
npm run dev๊ฐ๋ฐ ์๋ฒ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ ์ฃผ์์์ ์ด๋ฆฝ๋๋ค.
http://localhost:3000npm run dev # Next.js ๊ฐ๋ฐ ์๋ฒ
npm run build # ํ๋ก๋์
๋น๋
npm run start # ํ๋ก๋์
์๋ฒ
npm run lint # ESLint
npm run format # Prettier ํฌ๋งทํ
npm run format:check # Prettier ๊ฒ์ฌgames/์<GameName>Game.tsx์use<GameName>Game.ts๋ฅผ ์ถ๊ฐํฉ๋๋ค.data/microgames.ts์canvas,control,beatCount,startPrompt๋ฅผ ๋ฑ๋กํฉ๋๋ค.components/game-flow/MicrogameCanvas.tsx์ canvas route๋ฅผ ์ฐ๊ฒฐํฉ๋๋ค.- ํ์ํ asset์
public/games/<game>/images๋๋public/games/<game>/sounds์ ์ถ๊ฐํฉ๋๋ค. data/preloadAssets.ts์lib/bgmLibrary.ts์ preload, BGM, SFX ํญ๋ชฉ์ ๋ฑ๋กํฉ๋๋ค.- custom input game์ด๋ฉด
hooks/useMicrogameInput.ts์ generic clear ์ฒ๋ฆฌ์ ์ถฉ๋ํ์ง ์๊ฒ ์ ์ธํฉ๋๋ค. MICROGAMES๋ ์ผ๋ฐ ๊ฒ์์ ๊ฐ๋๋ค์์ผ๋ก ๋จผ์ ๋๊ณ , ๋ณด์ค ๊ฒ์์ ๋งจ ์๋์์ ๊ฐ๋๋ค์์ผ๋ก ๋ฌถ์ต๋๋ค.
์ด ํ๋ก์ ํธ๋ ๊ฐ์ธ ์คํ์ฉ ๋น๊ณต๊ฐ ํ๋ก์ ํธ์ ๋๋ค.











