์ด ํ๋ก์ ํธ๋ ์ค์ง TypeScript์ ํ์ ์์คํ ๋ง์ผ๋ก ๊ตฌํ๋ "์์ฝ๋ฐ" ๊ฒ์์ ๋๋ค. ๋ฐํ์ JavaScript ๋ก์ง์ด ์ ํ ํฌํจ๋์ด ์์ง ์์ผ๋ฉฐ, ๋ชจ๋ ๊ฒ์ ๋ก์ง, ๋งต ๋ ๋๋ง, ์นํจ ํ์ ์ ์ปดํ์ผ ๋จ๊ณ์ ํ์ ๊ฒ์ฌ ์ค์ ์ํ๋ฉ๋๋ค.
| ๊ธฐํธ | ์๋ฏธ |
|---|---|
๐พ |
์ฃผ์ธ๊ณต (Player) |
๐ฝ |
๋ชฉํ ์ง์ ์์ ์ฃผ์ธ๊ณต (Player on Target) |
๐ |
์์ (Box) |
๐ |
๋ชฉํ ์ง์ ์์ ์์ (Box on Target) |
๐ถ๏ธ |
๋ชฉํ ์ง์ (Target) |
๐ |
๋ฒฝ (Wall) |
๐ |
๋ฐ๋ฅ (Floor) |
๊ฒ์์ TypeScript์ ์์ฑ ์ ๊ทผ(Dot Notation)์ ํตํด ์งํ๋ฉ๋๋ค. src/index.ts์์ ์ฐ์์ ์ธ ๋ง์นจํ ์ฐ์ฐ์ผ๋ก ์ฃผ์ธ๊ณต์ ์ ์ดํ ์ ์์ต๋๋ค:
- ์คํ
์ด์ง ์ ํ:
.stage1๋ถํฐ.stage100๊น์ง ์ฌ์ฉํ ์ ์์ต๋๋ค. - ์ด๋ ์ ์ด:
.w: ์๋ก ์ด๋.s: ์๋๋ก ์ด๋.a: ์ผ์ชฝ์ผ๋ก ์ด๋.d: ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋
- ํ๋ฉด ํ์ธ: ์ด๋ ๋ช
๋ น ๋ค์
.over๋ฅผ ์ถ๊ฐํ๋ฉด IDE์ ํ์ ํํธ(Hover)์ ํ์ฌ ๋งต์ ๋ ๋๋ง ๊ฒฐ๊ณผ๊ฐ ํ์๋ฉ๋๋ค. - ํด๋ฆฌ์ด ํ์ : ์คํ
์ด์ง ๋ด์ ๋ชจ๋ ์์๊ฐ ๋ชฉํ ์ง์ ์ผ๋ก ์ฎ๊ฒจ์ง๋ฉด(์ฆ, ๋งต์ ๋ ์ด์
๐๊ธฐํธ๊ฐ ๋จ์ง ์์ผ๋ฉด), ํ์ ์์คํ ์์.GameClear.WoW.MuchFun์ ์ ๊ทผํ ์ ์๊ฒ ๋ฉ๋๋ค.
TypeGame
.stage1 // 1์คํ
์ด์ง ์
์ฅ
.s.d.d.over // ์๋๋ก ํ ์นธ, ์ค๋ฅธ์ชฝ์ผ๋ก ๋ ์นธ ์ด๋ ํ ๋งต ํ์ธ๊ฒ์์ ํต์ฌ ๋ก์ง์ Step ํ์
์ ์บก์ํ๋์ด ์์ต๋๋ค. ์ด๋ ๋ฐฉํฅ์ ์๋ค ๋ ์นธ ์ํ(prev2, prev1, next1, next2)์ ๋ฐ๋ผ ํ์ฌ ์นธ์ด ๋ค์ ํด์ ์ด๋ค ์ํ๊ฐ ๋์ด์ผ ํ๋์ง ๊ฒฐ์ ํฉ๋๋ค.
๋ก์ง์ ๋จ์ํํ๊ธฐ ์ํด "์ผ์ชฝ ์ด๋" ํ๋จ ์ฝ๋๋ง ์์ฑ๋์์ต๋๋ค. ์, ์๋, ์ค๋ฅธ์ชฝ ์ด๋์ ๊ฒฝ์ฐ MatrixRotateAndScale ํ์
์ ํตํด 2์ฐจ์ ๋ฐฐ์ด(ํ๋ ฌ)์ ํ์ /์ ์น์์ผ ์ผ์ชฝ ์ด๋ ๋ฌธ์ ๋ก ๋ณํํ์ฌ ์ฒ๋ฆฌํ ๋ค, ๋ค์ ์๋ ์์น๋ก ํ์ ์ํต๋๋ค.
Join: ํํ ํ์ ์ ํ ํ ๊ธฐํธ๋ค์ ํ๋์ ๊ธด ๋ฌธ์์ด๋ก ์ฐ๊ฒฐํฉ๋๋ค.Render: 2์ฐจ์ ๋ฐฐ์ด์ ์ค์ฒฉ๋ ๊ฐ์ฒด ๊ตฌ์กฐ๋ก ๋ณํํ์ฌ IDE์ ํ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์์ ์ฌ๋ฌ ์ค ๋ฌธ์์ด๋ก ๋งต์ด ๋ํ๋๋๋ก ํฉ๋๋ค.
- VSCode ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค.
- TypeScript ๋ฒ์ 4.1 ์ด์(Template Literal Types ์ง์)์ด ํ์ํฉ๋๋ค.
src/index.ts์์.over์์ฑ์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ฆฌ๋ฉด ์ค์๊ฐ์ผ๋ก ๋ ๋๋ง๋ ๊ฒ์ ํ๋ฉด์ ๋ณผ ์ ์์ต๋๋ค.