"๋๋ ๋ด๊ฐ ์๋ฌด๊ฒ๋ ๋ชจ๋ฅธ๋ค๋ ๊ฒ์ ์๋ค" ์ํฌ๋ผํ ์ค
๋๊ตฌ๋ฅผ ์ํด: ๋ชจ๋ ๊ฐ๋ฐ์์๊ฒ ์นจ์ ๋ฑ๊ณ ๊ทธ๋ค์ ๊ฒ์์ ํ๊ณ ์ถ์ดํ๋ IT ์ฌ๋๋ค์ ์ํด!
๋ฌด์์ ๋ํด: ํ์ํ ๊ฒฝ์ฐ C/C++๋ก ๊ฒ์ ์์ฑ์ ์์ํ๋ ๋ฐฉ๋ฒ!
์ด๊ฒ์ ์ฝ์ด์ผ ํ๋ ์ด์ : ์ฑ ๊ฐ๋ฐ์ ์ ์ ๋ฌธ ๋ถ์ผ๋ ์๋์ง๋ง ๋งค์ฃผ ์ฝ๋ฉ์ ํ๋ ค๊ณ ํฉ๋๋ค. ๋๋ ๊ฒ์์ ์ข์ํ๊ธฐ ๋๋ฌธ์!
์๋
๋ด ์ด๋ฆ์
์ปดํจํฐ ๊ฒ์ ์ฐ์
์ ๊ฑฐ๋ํ๊ณ ์ค๋๋ ์ํ ์ฐ์
๋ณด๋ค ๋ ๋ง์ ์๋ฌธ์ด ์์ต๋๋ค. ๊ฒ์์ ํ๋ ํ์ค์ ๋ฐ๋ผ ๋ณต์กํ๊ณ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ฐ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์ปดํจํฐ ๊ฐ๋ฐ ์ด๊ธฐ๋ถํฐ ์์ฑ๋์์ต๋๋ค. ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ด๋ฏธ ํ๋ก๊ทธ๋๋ฐ๋ ๊ทธ๋ํฝ, ๋ฌผ๋ฆฌํ ๋ฐ ์ฌ์ด๋๋ฅผ ๊ฐ์ถ ๊ฒ์ ์์ง์ด ๋ฑ์ฅํ๊ธฐ ์์ํ์ต๋๋ค. ์ด๋ฅผ ํตํด ๊ฒ์ ์์ฒด์ ๊ฐ๋ฐ์ ์ง์คํ ์ ์์ผ๋ฉฐ ๊ฒ์์ ๊ธฐ์ด์ ์ ๊ฒฝ์ฐ์ง ์์๋ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ค๊ณผ ํจ๊ป ์์ง๊ณผ ํจ๊ป ๊ฐ๋ฐ์๋ "๋์ด ๋ฉ๊ณ "์ ํํฉ๋๋ค. ๊ฒ์์ ์์ฐ ์์ฒด๊ฐ ์ปจ๋ฒ ์ด์ด์ ์ฌ๋ ค์ง๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ฐ๋์ด ํ์ง๋ณด๋ค ์ฐ์ธํ๊ธฐ ์์ํฉ๋๋ค.
๋์์ ๋ค๋ฅธ ์ฌ๋๋ค์ ๊ฒ์์ ํ ๋ ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์๊ฐํด ๋ธ ์์น, ํ๋กฏ, ์บ๋ฆญํฐ, ๊ฒ์ ๋ฉ์ปค๋์ฆ์ ์ํด ๋์์์ด ์ ํ์ ๋ฐ์ต๋๋ค. ๊ทธ๋์ ๊นจ๋ฌ์์ต๋๋ค...
... ๋์๊ฒ๋ง ์ข ์๋๋ ์์ ์ ์ธ๊ณ๋ฅผ ๋ง๋ค ๋์ ๋๋ค. ๋ด๊ฐ ์ฑ๋ถ, ์ฑ์, ์ฑ๋ น์ธ ์ธ์!
๊ทธ๋ฆฌ๊ณ ์ ๋ ์ง์ฌ์ผ๋ก ์์ ์ ๊ฒ์ ์์ง๊ณผ ๊ฒ์์ ์์ฑํจ์ผ๋ก์จ ๋์ ๋จ๊ณ , ์ฐฝ๋ฌธ์ ๋ฆ๊ณ , ์ค๋๋ง์ ํํํ์ฌ ๊ฒฝํ์ด ํ๋ถํ๊ณ ์์ ํ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋ ์ ์๋ค๊ณ ์ง์ฌ์ผ๋ก ๋ฏฟ์ต๋๋ค.
์ด ๊ธฐ์ฌ์์๋ C / C ++๋ก ์์ ๊ฒ์์ ์์ฑํ๊ธฐ ์์ํ ๋ฐฉ๋ฒ, ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ ๋ฌด์์ด๋ฉฐ ๋ฐ์ ํ๊ฒฝ์์ ์ทจ๋ฏธ ์๊ฐ์ ์ฐพ๋ ๊ณณ์ ์๋ ค ๋๋ฆฌ๊ฒ ์ต๋๋ค. ์ฃผ๊ด์ ์ด๋ฉฐ ๊ฐ๋ณ ์์ ํ๋ก์ธ์ค๋ฅผ ์ค๋ช ํฉ๋๋ค. ๋ฌด์ง์ ๋ฏฟ์์ ๊ดํ ์๋ฃ, ํ์ฌ ์ธ๊ณ์ ๋ํ ๋์ ๊ฐ์ธ์ ์ธ ๊ทธ๋ฆผ์ ๊ดํ ์๋ฃ. ์ฆ, "ํ์ ๋ถ๋ ๊ฐ์ธ์ ๋๋๋ฅผ ์ฑ ์์ง์ง ์์ต๋๋ค!"
์ฐ์ต
"์ค์ฒ ์๋ ์ง์์ ์ธ๋ชจ๊ฐ ์๊ณ , ์ง์ ์๋ ์ค์ฒ์ ์ํํ๋ค." ๊ณต์
๋ด ๋ ธํธ๋ ๋ด ์ธ์!
๊ทธ๋์ ์ค์ ๋ก๋ ๋ชจ๋ ๊ฒ์ด ๋
ธํธ๋ถ์์ ์์๋๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ๊ทธ๊ณณ์์ ์ผ์์ ์ธ ์์
์ ๊ธฐ๋กํ ๋ฟ๋ง ์๋๋ผ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๊ณ ํ๋ก๊ทธ๋๋ฐํ๊ณ ์์๋๋ฅผ ๋์์ธํ๊ณ ์ํ์ ๋ฌธ์ ๋ฅผ ํฌํจํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค. ํญ์ ๋ฉ๋ชจ์ฅ์ ์ฌ์ฉํ๊ณ ์ฐํ๋ก๋ง ์์ฑํ์ญ์์ค. ๊นจ๋ํ๊ณ ํธ์ํ๋ฉฐ ์ ๋ขฐํ ์ ์๋ IMHO์
๋๋ค.
๋ด (์ด๋ฏธ ์ฑ์์ง) ๋
ธํธ๋ถ. ์ด๊ฒ์ด ์ด๋ป๊ฒ ๋ณด์ด๋์ง์
๋๋ค. ์ฌ๊ธฐ์๋ ์ผ์์ ์ธ ์์
, ์์ด๋์ด, ๊ทธ๋ฆผ, ๋ค์ด์ด๊ทธ๋จ, ์๋ฃจ์
, ๋ธ๋ ๋ถ๊ธฐ, ์ฝ๋ ๋ฑ์ด ํฌํจ๋ฉ๋๋ค.
์ด ๋จ๊ณ์์ ์ ๋ XNUMX๊ฐ์ ํ๋ก์ ํธ๋ฅผ ์๋ฃํ์ต๋๋ค(์ด๋ค ์ ํ์ด๋ ์๋์ ์ผ๋ก ๋์์ด ๊ฐ๋ฐํ ์ ์๊ธฐ ๋๋ฌธ์ "์ต์ข ์ฑ"์ ๋ํ ์ดํด์ ์์ต๋๋ค).
- ํ๋ก์ ํธ 0 : ์ด๊ฒ์ Unity ๊ฒ์ ์์ง์ ์ฌ์ฉํ์ฌ C#์ผ๋ก ์์ฑ๋ Architect Demo 3D ์ฅ๋ฉด์ ๋๋ค. macOS ๋ฐ Windows ํ๋ซํผ์ฉ.
- ๊ฒ์ 1 : Windows์ฉ ์ฝ์ ๊ฒ์ Simple Snake(๋ชจ๋์๊ฒ "Snake"๋ก ์๋ ค์ง). C๋ก ์์ฑ.
- ๊ฒ์ 2 : ์ฝ์ ๊ฒ์ Crazy Tanks(๋ชจ๋ ์ฌ๋์๊ฒ "Tanks"๋ก ์๋ ค์ง)๋ ์ด๋ฏธ C++(ํด๋์ค ์ฌ์ฉ) ๋ฐ Windows์์๋ ์์ฑ๋์์ต๋๋ค.
ํ๋ก์ ํธ 0 ๊ฑด์ถ๊ฐ ๋ฐ๋ชจ
- ํ๋ซํผ : Windows(Windows 7, 10), Mac OS(OS X El Capitan v. 10.11.6)
- ์ธ์ด : C#
- ๊ฒ์ ์์ง:
ํต์ผ - ์๊ฐ:
๋๋ฆฐ ๋ผ์ผ - ์ ์ฅ์:
GitHub์
3D ์ฅ๋ฉด ์ค๊ณ์ ๋ฐ๋ชจ
์ฒซ ๋ฒ์งธ ํ๋ก์ ํธ๋ Unity ๊ฒ์ ์์ง์ ์ฌ์ฉํ์ฌ C/C++๊ฐ ์๋ C#์ผ๋ก ๊ตฌํ๋์์ต๋๋ค. ์ด ์์ง์ ํ๋์จ์ด๋ฅผ ๋ง์ด ์๊ตฌํ์ง ์์์ต๋๋ค.
์ ์๊ฒ ์์ด Unity์ ๋ชฉํ๋ ์ด๋ค ์ข ๋ฅ์ ๊ฒ์์ ๊ฐ๋ฐํ๋ ๊ฒ์ด ์๋์์ต๋๋ค. ์ผ์ข ์ ์บ๋ฆญํฐ๋ก 3D ์ฅ๋ฉด์ ๋ง๋ค๊ณ ์ถ์์ต๋๋ค. ๊ทธ, ๋๋ ์คํ๋ ค ๊ทธ๋ (๋๋ ๋ด๊ฐ ์ฌ๋์ ๋น ์ง ์๋ ๋ฅผ ๋ชจ๋ธ๋ก ์ผ์๋ค =)๋ ์์ง์ด๊ณ ์ธ๋ถ ์ธ๊ณ์ ์ํธ ์์ฉํด์ผ ํ์ต๋๋ค. Unity๊ฐ ๋ฌด์์ธ์ง, ๊ฐ๋ฐ ํ๋ก์ธ์ค๊ฐ ๋ฌด์์ธ์ง, ๋ฌด์ธ๊ฐ๋ฅผ ๋ง๋๋ ๋ฐ ์ผ๋ง๋ ๋ง์ ๋ ธ๋ ฅ์ด ํ์ํ์ง ์ดํดํ๋ ๊ฒ์ด ์ค์ํ์ต๋๋ค. ์ด๊ฒ์ด Architect Demo ํ๋ก์ ํธ๊ฐ ํ์ํ ๋ฐฉ๋ฒ์ ๋๋ค(์ด๋ฆ์ ๊ฑฐ์ ํ์๋ฆฌ์์ ๋ฐ๋ช ๋์์ต๋๋ค). ํ๋ก๊ทธ๋๋ฐ, ๋ชจ๋ธ๋ง, ์ ๋๋ฉ์ด์ , ํ ์ค์ฒ๋ง์ ๋งค์ผ ์์ ํ๋ ๋ฐ ๋ ๋ฌ ์ ๋ ๊ฑธ๋ ธ์ต๋๋ค.
์์ 3D ๋ชจ๋ธ์ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํ YouTube์ ์์ต์ ๋น๋์ค๋ก ์์ํ์ต๋๋ค.
์ ๋๋ฉ์ด์ ์ด ์์ฐ์ค๋ฝ๊ฒ ๋ณด์ด๋๋ก ์๊ณจ, ์ถ๊ฐ ๋ผ ๋ ๋ฒ๋ฅผ ๋ชจ๋ธ๋งํฉ๋๋ค. ์์ ์ ๋ฃ๊ณ ๋๋ฉด 30์ด ๋ถ๋์ ๋น๋์ค๋ฅผ ๋ง๋๋ ๋ฐ ์ ๋๋ฉ์ด์ ์ํ ์ ์์๊ฐ ์ผ๋ง๋ ํฐ ์ผ์ ํ๋์ง ๊นจ๋ซ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ 3D ์ํ๋ ๋ช ์๊ฐ ๋์ ์ง์๋ฉ๋๋ค! ๊ทธ๋ฐ ๋ค์ ๊ทน์ฅ์์ ๋์ ์ด๋ ๊ฒ ๋งํฉ๋๋ค. โ๋ฐ, ์๋ฑํ ๋งํ / ์ํ! ๊ทธ๋ค์ ๋ ์ํ ์ ์์๋๋ฐโฆ โ๋ฐ๋ณด๋ค!
๊ทธ๋ฆฌ๊ณ ์ด ํ๋ก์ ํธ์์ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด ํ ๊ฐ์ง ๋. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ ์๊ฒ ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ๋ถ๋ถ์ ์ํ์ ๋ถ๋ถ์ด์์ต๋๋ค. ์ฅ๋ฉด์ ์คํํ๋ฉด(ํ๋ก์ ํธ ์ค๋ช ์ ๋ฆฌํฌ์งํ ๋ฆฌ ๋งํฌ) ์นด๋ฉ๋ผ๊ฐ ๊ตฌํ์ ์๋ ์บ๋ฆญํฐ ์ฃผ์๋ฅผ ํ์ ํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค. ์ด๋ฌํ ์นด๋ฉ๋ผ ํ์ ์ ํ๋ก๊ทธ๋๋ฐํ๋ ค๋ฉด ๋จผ์ ์(2D)์์ ์์น ์ง์ ์ ์ขํ๋ฅผ ๊ณ์ฐํ ๋ค์ ๊ตฌ(3D)์์ ์ขํ๋ฅผ ๊ณ์ฐํด์ผ ํ์ต๋๋ค. ์๊ธด๊ฑด ๋ด๊ฐ ํ๊ต์์ ์ํ์ ์ซ์ดํด์ ๋ง์ด๋์ค๋ก ์๊ณ ์์๋ค๋ ๊ฒ์ด๋ค. ๋ถ๋ถ์ ์ผ๋ก๋ ์๋ง๋ ํ๊ต์์ ์ด ์ํ์ด ์ด๋ป๊ฒ ์ถ์ ์ ์ฉ๋๋์ง ์ค๋ช ํ์ง ์๊ธฐ ๋๋ฌธ์ผ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ชฉํ, ๊ฟ์ ์ง์ฐฉํ๋ฉด ๋ง์์ด ๋ง์์ง๊ณ ๋๋ฌ๋ฉ๋๋ค! ๊ทธ๋ฆฌ๊ณ ๋ณต์กํ ์์ ์ ํฅ๋ฏธ์ง์งํ ๋ชจํ์ผ๋ก ์ธ์ํ๊ธฐ ์์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ ์๊ฐํฉ๋๋ค: "๊ธ์, ์ *์ฌ๋ํ๋* ์ํ์๋ ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฌํ ๊ณต์์ด ์ด๋์ ๊ธฐ์ธ์ด์ง ์ ์๋์ง ๋งํ ์ ์์ต๋๊น?"
์๊ณผ ๊ตฌ์ ์ ์ขํ๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํ ๊ณต์ ๊ณ์ฐ(๋ด ๊ณต์ฑ
์์)
๊ฒ์ 1
- ํ๋ซํผ : Windows(Windows 7, 10์์ ํ ์คํธ)
- ์ธ์ด : ์์ํ C๋ก ์์ฑ๋์๋ค๊ณ ์๊ฐํฉ๋๋ค.
- ๊ฒ์ ์์ง: ์๋์ฐ ์ฝ์
- ์๊ฐ:
์๋น๋x9 - ์ ์ฅ์:
GitHub์
๊ฐ๋จํ ๋ฑ ๊ฒ์
3D ์ฅ๋ฉด์ ๊ฒ์์ด ์๋๋๋ค. ๋ํ 3D ๊ฐ์ฒด(ํนํ ์บ๋ฆญํฐ)๋ฅผ ๋ชจ๋ธ๋งํ๊ณ ์ ๋๋ฉ์ด์ ํํ๋ ์์ ์ ๊ธธ๊ณ ์ด๋ ต์ต๋๋ค. Unity๋ฅผ ๊ฐ์ง๊ณ ๋๋ค ๋ณด๋ ๊ธฐ๋ณธ๋ถํฐ ์์ํด์ผ ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ๊ฒ์์ ๊ตฌ์กฐ ์์ฒด๋ฅผ ์ดํดํ๊ธฐ ์ํด ๊ฐ๋จํ๊ณ ๋น ๋ฅด์ง๋ง ๋์์ ๊ธ๋ก๋ฒํฉ๋๋ค.
๊ฐ๋จํ๊ณ ๋น ๋ฅธ ๊ฒ์ ๋ฌด์์ ๋๊น? ๋ง์ต๋๋ค, ์ฝ์๊ณผ 2D์ ๋๋ค. ๋ณด๋ค ์ ํํ๊ฒ๋ ์ฝ์๊ณผ ๊ธฐํธ๊น์ง. ๋ค์ ๋งํ์ง๋ง ์ ๋ ์ธํฐ๋ท์์ ์๊ฐ์ ์ฐพ๊ธฐ ์์ํ์ต๋๋ค(์ผ๋ฐ์ ์ผ๋ก ์ ๋ ์ธํฐ๋ท์ด XNUMX์ธ๊ธฐ์ ๊ฐ์ฅ ํ์ ์ ์ด๊ณ ์ํํ ๋ฐ๋ช ํ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค). ์ฝ์ ํ ํธ๋ฆฌ์ค๋ฅผ ๋ง๋ ํ ํ๋ก๊ทธ๋๋จธ์ ์์์ ์ฐพ์๋ดค์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ์ ๊ฒ์์ฒ๋ผ ๊ทธ๋ "๋ฑ"์ ์๋ฅด๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๋น๋์ค์์ ๊ฒ์ ๋ฃจํ(XNUMX๊ฐ์ ๊ธฐ๋ณธ ๊ธฐ๋ฅ/ํํธ ํฌํจ)์ ๋ฒํผ๋ก์ ์ถ๋ ฅ์ด๋ผ๋ ๋ ๊ฐ์ง ๊ธฐ๋ณธ์ ์ธ ์ฌํญ์ ๋ํด ๋ฐฐ์ ์ต๋๋ค.
๊ฒ์ ๋ฃจํ๋ ๋ค์๊ณผ ๊ฐ์ ์ ์์ต๋๋ค.
int main()
{
Setup();
// a game loop
while (!quit)
{
Input();
Logic();
Draw();
Sleep(gameSpeed); // game timing
}
return 0;
}
์ด ์ฝ๋๋ ์ ์ฒด main() ํจ์๋ฅผ ํ ๋ฒ์ ํ์ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋น ๋๊ธ ์ดํ์ ๊ฒ์ ์ฃผ๊ธฐ๊ฐ ์์๋ฉ๋๋ค. ๋ฃจํ์๋ Input(), Logic(), Draw()์ ์ธ ๊ฐ์ง ๊ธฐ๋ณธ ํจ์๊ฐ ์์ต๋๋ค. ๋จผ์ ์ ๋ ฅ ๋ฐ์ดํฐ ์ ๋ ฅ (์ฃผ๋ก ํค ์ ๋ ฅ ์ ์ด) ์ ๋ ฅ ๋ ๋ฐ์ดํฐ ๋ก์ง์ ์ฒ๋ฆฌ ํ ๋ค์ ํ๋ฉด์ ํ์-๊ทธ๋ฆฌ๊ธฐ. ๊ทธ๋์ ๋ชจ๋ ํ๋ ์. ์ ๋๋ฉ์ด์ ์ ์ด๋ฐ ์์ผ๋ก ๋ง๋ค์ด์ง๋๋ค. ๋งํ๊ฐ์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ๊ฐ์ฅ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฉฐ ๋ด๊ฐ ์๋ ํ ๊ฒ์์ ํ๋ ์ ์๋๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ Logic() ํจ์๋ ๋งค์ฐ ๋น ๋ฆ ๋๋ค. ๋ฐ๋ผ์ ํ๋ ์ ์๋๋ ์ด ์๋๋ฅผ ๊ฒฐ์ ํ๋ gameSpeed โโ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ Sleep() ํจ์๋ก ์ ์ดํด์ผ ํฉ๋๋ค.
๊ฒ์ ์ฃผ๊ธฐ. ๋ฉ๋ชจ์ฅ์์ ์ค๋ค์ดํฌ ํ๋ก๊ทธ๋๋ฐ
์ฌ๋ณผ๋ฆญ ์ฝ์ ๊ฒ์์ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ ์ผ๋ฐ์ ์ธ ์คํธ๋ฆผ ์ถ๋ ฅ 'cout'์ ์ฌ์ฉํ์ฌ ํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ํ์ํ๋ ๊ฒ์ ์๋ํ์ง ์์ต๋๋ค. ๋งค์ฐ ๋๋ฆฝ๋๋ค. ๋ฐ๋ผ์ ํ๋ฉด ๋ฒํผ์์ ์ถ๋ ฅ์ ์ํํด์ผ ํฉ๋๋ค. ํจ์ฌ ๋น ๋ฅด๊ณ ๊ฒ์์ด ๊ฒฐํจ ์์ด ์๋ํฉ๋๋ค. ์์งํ ๋งํด์ ํ๋ฉด ๋ฒํผ๊ฐ ๋ฌด์์ด๋ฉฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ทธ๋ฌ๋ ์ฌ๊ธฐ์ ์ฝ๋ ์์ ๋ฅผ ์ ๊ณตํ ๊ฒ์ด๋ฉฐ ์ฃผ์์ ์๋ ๋๊ตฐ๊ฐ๊ฐ ์ํฉ์ ๋ช ํํ ํ ์ ์์ ๊ฒ์ ๋๋ค.
ํ๋ฉด ๋ฒํผ ๊ฐ์ ธ์ค๊ธฐ(๊ทธ๋ ๊ฒ ๋งํ ์ ์๋ ๊ฒฝ์ฐ):
// create screen buffer for drawings
HANDLE hConsole = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0,
NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
DWORD dwBytesWritten = 0;
SetConsoleActiveScreenBuffer(hConsole);
ํน์ ๋ผ์ธ scoreLine(์ ์๋ฅผ ํ์ํ๋ ๋ผ์ธ)์ ํ๋ฉด์ ์ง์ ์ถ๋ ฅ:
// draw the score
WriteConsoleOutputCharacter(hConsole, scoreLine, GAME_WIDTH, {2,3}, &dwBytesWritten);
์ด๋ก ์ ์ผ๋ก ์ด ๊ฒ์์๋ ๋ณต์กํ ๊ฒ์ด ์์ผ๋ฉฐ ์ํธ๋ฆฌ ๋ ๋ฒจ ๊ฒ์์ ์ข์ ์์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ฝ๋๋ ํ๋์ ํ์ผ์ ์์ฑ๋๊ณ ์ฌ๋ฌ ๊ธฐ๋ฅ์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค. ํด๋์ค๋, ์์๋ ์์ต๋๋ค. GitHub์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ์ด๋ํ๋ฉด ๊ฒ์ ์์ค ์ฝ๋์ ๋ชจ๋ ๋ด์ฉ์ ์ง์ ๋ณผ ์ ์์ต๋๋ค.
๊ฒ์ 2 ํฌ๋ ์ด์ง ํฑํฌ
- ํ๋ซํผ : Windows(Windows 7, 10์์ ํ ์คํธ)
- ์ธ์ด : C + +
- ๊ฒ์ ์์ง: ์๋์ฐ ์ฝ์
- ์๊ฐ: ะบะฝะธะณะฐ
๊ฒ์ ํ๋ก๊ทธ๋๋ฐ์ ํตํ C++ ์์ - ์ ์ฅ์:
GitHub์
๋ฏธ์น ํฑํฌ ๊ฒ์
์ฝ์์ ์บ๋ฆญํฐ๋ฅผ ์ธ์ํ๋ ๊ฒ์ ์๋ง๋ ๊ฒ์์ผ๋ก ์ ํํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋จํ ๊ฒ์ผ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ๋ฌธ์์ ๋์ด์ ๋๋น๊ฐ ๋ค๋ฆ ๋๋ค(๋์ด๊ฐ ๋๋น๋ณด๋ค ํผ). ๋ฐ๋ผ์ ๋ชจ๋ ๊ฒ์ด ๊ท ํ์ด ๋ง์ง ์๊ณ ์๋๋ก ์ด๋ํ๊ฑฐ๋ ์๋ก ์ด๋ํ๋ ๊ฒ์ด ์ผ์ชฝ์ด๋ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ฒ ๋ณด์ผ ๊ฒ์ ๋๋ค. ์ด ํจ๊ณผ๋ "Snake"(๊ฒ์ 1)์์ ๋งค์ฐ ๋๋๋ฌ์ง๋๋ค. "ํฑํฌ"(๊ฒ์ 2)์๋ ํ๋ฉด ํฝ์ ์ ๋ค๋ฅธ ์์์ผ๋ก ํ์ธํ ํ์ฌ ์ถ๋ ฅ์ด ๊ตฌ์ฑ๋๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๋จ์ ์ด ์์ต๋๋ค. ๋ ๋๋ฌ๋ฅผ ์์ฑํ๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ์ฌ์ค, ์ด๊ฒ์ ํจ์ฌ ๋ ํฅ๋ฏธ๋กญ์ง ๋ง ์ด๋ฏธ ์กฐ๊ธ ๋ ๋ณต์กํฉ๋๋ค.
์ด ๊ฒ์์ ๊ฒฝ์ฐ ํ๋ฉด์ ํฝ์ ์ ํ์ํ๋ ์์คํ ์ ์ค๋ช ํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค. ๋๋ ์ด๊ฒ์ด ๊ฒ์์ ์ฃผ์ ๋ถ๋ถ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ ์ค์ค๋ก ์๊ฐํด ๋ผ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ํ๋ฉด์ ํ์๋๋ ๊ฒ์ ์์ง์ด๋ ์์ ์ฌ๊ฐํ ์งํฉ์ผ ๋ฟ์ ๋๋ค.
์ง์ฌ๊ฐํ ์ธํธ
๊ฐ ์ฌ๊ฐํ์ ์ซ์๋ก ์ฑ์์ง ํ๋ ฌ๋ก ํ์๋ฉ๋๋ค. ๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ํ ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ๋์์ค๋ฅผ ๊ฐ์กฐํ ์ ์์ต๋๋ค. ๊ฒ์์ ๋ชจ๋ ํ๋ ฌ์ XNUMX์ฐจ์ ๋ฐฐ์ด๋ก ํ๋ก๊ทธ๋๋ฐ๋ฉ๋๋ค. XNUMX์ฐจ์์ด ์๋๋ผ XNUMX์ฐจ์! XNUMX์ฐจ์ ๋ฐฐ์ด์ ์์ ํ๊ธฐ๊ฐ ํจ์ฌ ์ฝ๊ณ ๋น ๋ฆ ๋๋ค.
๊ฒ์ ํฑํฌ ๋งคํธ๋ฆญ์ค์ ์
XNUMX์ฐจ์ ๋ฐฐ์ด๋ก ๊ฒ์ ํฑํฌ์ ๋งคํธ๋ฆญ์ค ํํ
XNUMX์ฐจ์ ๋ฐฐ์ด์ ์ํ ํ๋ ฌ ํํ์ ๋ณด๋ค ์์์ ์ธ ์
๊ทธ๋ฌ๋ ๋ฐฐ์ด์ ์์์ ๋ํ ์ก์ธ์ค๋ XNUMX์ฐจ์์ด ์๋ XNUMX์ฐจ์ ๋ฐฐ์ด์ธ ๊ฒ์ฒ๋ผ ์ด์ค ๋ฃจํ์์ ๋ฐ์ํฉ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ ํ ๋งคํธ๋ฆญ์ค๋ก ์์ ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ํ๋ฉ๋๋ค.
์ด์ค ๋ฃจํ์์ XNUMX์ฐจ์ ๋ฐฐ์ด์ ์ํํฉ๋๋ค. Y๋ ํ ID์ด๊ณ X๋ ์ด ID์
๋๋ค.
์ผ๋ฐ์ ์ธ ํ๋ ฌ ์๋ณ์ i, j ๋์ ์๋ณ์ x ๋ฐ y๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๊ทธ๋์ ๋์ด ๋ ์ฆ๊ฒ๊ณ ๋จธ๋ฆฌ๊ฐ ๋ ์ ๋ช ํด ๋ณด์ ๋๋ค. ๋ํ ์ด๋ฌํ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ๋ ํ๋ ฌ์ XNUMX์ฐจ์ ์ด๋ฏธ์ง์ ์ขํ์ถ์ ํธ๋ฆฌํ๊ฒ ํฌ์ํ ์ ์์ต๋๋ค.
์ด์ ํฝ์ , ์์ ๋ฐ ๋์คํ๋ ์ด์ ๋ํด ์์๋ณด์ญ์์ค. StretchDIBits ํจ์(ํค๋: windows.h; ๋ผ์ด๋ธ๋ฌ๋ฆฌ: gdi32.lib)๊ฐ ์ถ๋ ฅ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฌด์๋ณด๋ค๋ ์ด๋ฏธ์ง๊ฐ ํ์๋๋ ์ฅ์น(์ ๊ฒฝ์ฐ์๋ Windows ์ฝ์), ์ด๋ฏธ์ง ํ์ ์์ ์ขํ, ๋๋น/๋์ด ๋ฐ ์ด๋ฏธ์ง๊ฐ ์ด ํจ์์ ์ ๋ฌ๋ฉ๋๋ค. ๋ฐ์ดํธ ๋ฐฐ์ด๋ก ํํ๋๋ ๋นํธ๋งต(๋นํธ๋งต) ํํ์ ์์ฒด. ๋ฐ์ดํธ ๋ฐฐ์ด๋ก์์ ๋นํธ๋งต!
์๋ ์ค์ธ StretchDIBits() ํจ์:
// screen output for game field
StretchDIBits(
deviceContext,
OFFSET_LEFT, OFFSET_TOP,
PMATRIX_WIDTH, PMATRIX_HEIGHT,
0, 0,
PMATRIX_WIDTH, PMATRIX_HEIGHT,
m_p_bitmapMemory, &bitmapInfo,
DIB_RGB_COLORS,
SRCCOPY
);
๋ฉ๋ชจ๋ฆฌ๋ VirtualAlloc() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ด ๋นํธ๋งต์ ๋ฏธ๋ฆฌ ํ ๋น๋ฉ๋๋ค. ์ฆ, ํ์ํ ๋ฐ์ดํธ ์๋ ํ๋ฉด์ ํ์๋ ๋ชจ๋ ํฝ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์์ฝ๋ฉ๋๋ค.
m_p_bitmapMemory ๋นํธ๋งต ๋ง๋ค๊ธฐ:
// create bitmap
int bitmapMemorySize = (PMATRIX_WIDTH * PMATRIX_HEIGHT) * BYTES_PER_PIXEL;
void* m_p_bitmapMemory = VirtualAlloc(0, bitmapMemorySize, MEM_COMMIT, PAGE_READWRITE);
๋๋ต์ ์ผ๋ก ๋งํ๋ฉด ๋นํธ๋งต์ ์ผ๋ จ์ ํฝ์ ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ด๋ ์ด์ ๋ชจ๋ XNUMX๋ฐ์ดํธ๋ RGB ํฝ์ ์ ๋๋ค. ๋นจ๊ฐ์ ๊ฐ๋น XNUMX๋ฐ์ดํธ, ๋ น์ ๊ฐ๋น XNUMX๋ฐ์ดํธ(G), ํ๋์ ๊ฐ๋น XNUMX๋ฐ์ดํธ(B). ๋ํ ๋ค์ฌ์ฐ๊ธฐ๋น XNUMX๋ฐ์ดํธ๊ฐ ์์ต๋๋ค. ๋นจ๊ฐ/๋ น์/ํ๋(RGB)์ ์ธ ๊ฐ์ง ์์์ ์๋ก ๋ค๋ฅธ ๋น์จ๋ก ํผํฉํ์ฌ ๊ฒฐ๊ณผ ํฝ์ ์์์ ์ป์ต๋๋ค.
์ด์ ๋ค์ ๊ฐ ์ฌ๊ฐํ ๋๋ ๊ฒ์ ๊ฐ์ฒด๋ ์ซ์ ํ๋ ฌ๋ก ํ์๋ฉ๋๋ค. ์ด๋ฌํ ๋ชจ๋ ๊ฒ์ ๊ฐ์ฒด๋ ์ปฌ๋ ์ ์ ๋ฐฐ์น๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ทธ๋ค์ ๊ฒฝ๊ธฐ์ฅ์ ๋ฐฐ์น๋์ด ํ๋์ ํฐ ์ซ์ ๋งคํธ๋ฆญ์ค๋ฅผ ํ์ฑํฉ๋๋ค. ๋งคํธ๋ฆญ์ค์ ๊ฐ ์ซ์๋ฅผ ํน์ ์์์ผ๋ก ๋งคํํ์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ซ์ 8์ ํ๋์, ์ซ์ 9๋ ๋ ธ๋์, ์ซ์ 10์ ์ง์ ํ์ ๋ฑ์ ๋๋ค. ๋ฐ๋ผ์ ๊ฐ ์ซ์๊ฐ ์ผ์ข ์ ์์์ธ ๊ฒฝ๊ธฐ์ฅ์ ํ๋ ฌ์ด ์๋ค๊ณ ๋งํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ํํธ์ผ๋ก๋ ์ ์ฒด ๊ฒฝ๊ธฐ์ฅ์ ์ซ์ ํ๋ ฌ์ ๊ฐ์ง๊ณ ์๊ณ ๋ค๋ฅธ ํํธ์ผ๋ก๋ ์ด๋ฏธ์ง๋ฅผ ํ์ํ๊ธฐ ์ํ ๋นํธ๋งต์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ง๊ธ๊น์ง ๋นํธ๋งต์ "๋น์ด ์์"์ ๋๋ค. ์ํ๋ ์์์ ํฝ์ ์ ๋ํ ์ ๋ณด๊ฐ ์์ง ์์ต๋๋ค. ์ฆ, ๋ง์ง๋ง ๋จ๊ณ๋ ๊ฒฝ๊ธฐ์ฅ์ ์ซ์ ๋งคํธ๋ฆญ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ ํฝ์ ์ ๋ํ ์ ๋ณด๋ก ๋นํธ๋งต์ ์ฑ์ฐ๋ ๊ฒ์ ๋๋ค. ์ด๋ฌํ ๋ณํ์ ์์๋ ์๋ ๊ทธ๋ฆผ์ ๋์ ์์ต๋๋ค.
๊ฒฝ๊ธฐ์ฅ์ ์ซ์ ๋งคํธ๋ฆญ์ค(๋์งํธ ๋งคํธ๋ฆญ์ค)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ ๋ณด๋ก ๋นํธ๋งต(ํฝ์
๋งคํธ๋ฆญ์ค)์ ์ฑ์ฐ๋ ์(์์ ์ธ๋ฑ์ค๊ฐ ๊ฒ์์ ์ธ๋ฑ์ค์ ์ผ์นํ์ง ์์)
๋๋ ๋ํ ๊ฒ์์์ ์ค์ ์ฝ๋์ ์ผ๋ถ๋ฅผ ์ ์ํ ๊ฒ์ ๋๋ค. ๋ฃจํ์ ๊ฐ ๋ฐ๋ณต์์ ๋ณ์ colorIndex์๋ ๊ฒฝ๊ธฐ์ฅ์ ์ซ์ ํ๋ ฌ(mainDigitalMatrix)์์ ๊ฐ(์ ์ธ๋ฑ์ค)์ด ํ ๋น๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ ์์ฒด๊ฐ ์ธ๋ฑ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ ๋ณ์์ ๊ธฐ๋ก๋ฉ๋๋ค. ๋ํ ๊ฒฐ๊ณผ ์์์ ๋นจ๊ฐ, ๋ น์ ๋ฐ ํ๋(RGB)์ ๋น์จ๋ก ๋๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ฌ์ฐ๊ธฐ(pixelPadding)์ ํจ๊ป ์ด ์ ๋ณด๋ ํฝ์ ์ ๊ณ์ํด์ ๊ธฐ๋ก๋์ด ๋นํธ๋งต์์ ์ปฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ํ์ฑํฉ๋๋ค.
์ด ์ฝ๋๋ ์ดํดํ๊ธฐ ์ด๋ ค์ธ ์ ์๋ ํฌ์ธํฐ์ ๋นํธ ์ฐ์ฐ์ ์ฌ์ฉํฉ๋๋ค. ๋ฐ๋ผ์ ๊ทธ๋ฌํ ๊ตฌ์กฐ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณ๋๋ก ์ฝ์ด ๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
๊ฒฝ๊ธฐ์ฅ์ ์ซ์ ๋งคํธ๋ฆญ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์ ๋ณด๋ก ๋นํธ๋งต ์ฑ์ฐ๊ธฐ:
// set pixel map variables
int colorIndex;
COLORREF color;
int pitch;
uint8_t* p_row;
// arrange pixels for game field
pitch = PMATRIX_WIDTH * BYTES_PER_PIXEL; // row size in bytes
p_row = (uint8_t*)m_p_bitmapMemory; //cast to uint8 for valid pointer arithmetic
(to add by 1 byte (8 bits) at a time)
for (int y = 0; y < PMATRIX_HEIGHT; ++y)
{
uint32_t* p_pixel = (uint32_t*)p_row;
for (int x = 0; x < PMATRIX_WIDTH; ++x)
{
colorIndex = mainDigitalMatrix[y * PMATRIX_WIDTH + x];
color = Utils::GetColor(colorIndex);
uint8_t blue = GetBValue(color);
uint8_t green = GetGValue(color);
uint8_t red = GetRValue(color);
uint8_t pixelPadding = 0;
*p_pixel = ((pixelPadding << 24) | (red << 16) | (green << 8) | blue);
++p_pixel;
}
p_row += pitch;
}
์์์ ์ค๋ช ํ ๋ฐฉ๋ฒ์ ๋ฐ๋ฅด๋ฉด Crazy Tanks ๊ฒ์์์ ํ๋์ ๊ทธ๋ฆผ(ํ๋ ์)์ด ํ์ฑ๋๊ณ Draw() ํจ์์์ ํ๋ฉด์ ํ์๋ฉ๋๋ค. Input() ํจ์์์ ํค ์ ๋ ฅ์ ๋ฑ๋กํ๊ณ Logic() ํจ์์์ ํ์ ์ฒ๋ฆฌ๋ฅผ ์ํํ๋ฉด ์๋ก์ด ๊ทธ๋ฆผ(ํ๋ ์)์ด ํ์ฑ๋ฉ๋๋ค. ์ฌ์ค, ๊ฒ์ ๊ฐ์ฒด๋ ๊ฒฝ๊ธฐ์ฅ์์ ์ด๋ฏธ ๋ค๋ฅธ ์์น์ ์์ ์ ์์ผ๋ฏ๋ก ๊ทธ์ ๋ฐ๋ผ ๋ค๋ฅธ ์์น์ ๊ทธ๋ ค์ง๋๋ค. ์ด๊ฒ์ด ์ ๋๋ฉ์ด์ (์์ง์)์ด ์ผ์ด๋๋ ๋ฐฉ์์ ๋๋ค.
์ด๋ก ์ ์ผ๋ก(์๋ฌด๊ฒ๋ ์์ง ์์๋ค๋ฉด) ์ฒซ ๋ฒ์งธ ๊ฒ์("Snake")์ ๊ฒ์ ๋ฃจํ์ ๋ ๋ฒ์งธ ๊ฒ์("Tanks")์ ํ๋ฉด์ ํฝ์ ์ ํ์ํ๋ ์์คํ ์ ์ดํดํ๊ธฐ๋ง ํ๋ฉด ๋ชจ๋ ๊ฒ์ ์์ฑํ ์ ์์ต๋๋ค. Windows์ฉ 2D ๊ฒ์. ์๋ฆฌ ์๋! ๐ ๋๋จธ์ง ๋ถ๋ถ์ ํ์์ ๋นํ์ผ ๋ฟ์ ๋๋ค.
๋ฌผ๋ก "Tanks" ๊ฒ์์ "Snake"๋ณด๋ค ํจ์ฌ ๋ ๋ณต์กํ๊ฒ ์ค๊ณ๋์์ต๋๋ค. ์ ๋ ์ด๋ฏธ C++ ์ธ์ด๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ์ฆ, ๋ค์ํ ๊ฒ์ ๊ฐ์ฒด๋ฅผ ํด๋์ค๋ก ์ค๋ช ํ์ต๋๋ค. ๋๋ง์ ์ปฌ๋ ์ ์ ๋ง๋ค์์ต๋๋ค. headers/Box.h์์ ์ฝ๋๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ๊ทธ๊ฑด ๊ทธ๋ ๊ณ , ์ปฌ๋ ์ ์ ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ฌ์ฉ๋ ํฌ์ธํฐ. ๋ฉ๋ชจ๋ฆฌ๋ก ์์ ํ์ต๋๋ค. ๋๋ ๊ทธ ์ฑ ์ด ๋์๊ฒ ๋ง์ ๋์์ด ๋์๋ค๊ณ ๋งํด์ผ ํ๋ค. ๊ฒ์ ํ๋ก๊ทธ๋๋ฐ์ ํตํ C++ ์์. ์ด๊ฒ์ C++ ์ด๋ณด์๋ฅผ ์ํ ํ๋ฅญํ ์์์ ๋๋ค. ์๊ณ ํฅ๋ฏธ๋กญ๊ณ ์ ์ ๋ฆฌ๋์ด ์์ต๋๋ค.
์ด ๊ฒ์์ ๊ฐ๋ฐํ๋ ๋ฐ ์ฝ XNUMX๊ฐ์์ด ๊ฑธ๋ ธ์ต๋๋ค. ์ฃผ๋ก ์ง์ฅ์์ ์ ์ฌ๊ณผ ๊ฐ์ ์๊ฐ์ ๊ธ์ ์ผ์ต๋๋ค. ๊ทธ๋ ์ฌ๋ฌด์ค ์ฃผ๋ฐฉ์ ์์ ์์์ ๋ฐ๊ณ ์ฝ๋๋ฅผ ์์ฑํ์ต๋๋ค. ์๋๋ฉด ์ง์์ ์ ๋ ์ ๋จน์ผ๋ฌ. ๊ทธ๋์ ๋๋ ๊ทธ๋ฐ "์ฃผ๋ฐฉ ์ ์"์ ์ป์์ต๋๋ค. ๋ ๊ทธ๋ ๋ฏ ๊ณต์ฑ ์ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ๊ณ , ๊ทธ ์์์ ๋ชจ๋ ๊ฐ๋ ์ ์ธ ๊ฒ๋ค์ด ํ์ํ๋ค.
์ค์ฉ์ ์ธ ๋ถ๋ถ์ด ๋๋๋ฉด ๋ ธํธ๋ถ์ ๋ช ์ฅ ์ค์บํฉ๋๋ค. ๋ด๊ฐ ์ ํํ ๋ฌด์์ ์ ๊ณ , ๊ทธ๋ฆฌ๊ณ , ์ธ๊ณ , ๋์์ธํ๋์ง ๋ณด์ฌ์ฃผ๊ธฐ ์ํดโฆ
ํฑํฌ ์ด๋ฏธ์ง ๋์์ธ. ๊ทธ๋ฆฌ๊ณ ๊ฐ ํฑํฌ๊ฐ ํ๋ฉด์์ ์ฐจ์งํ๋ ํฝ์
์์ ๋ํ ์ ์
์ถ์ ์ค์ฌ์ผ๋ก ํ ํฑํฌ ํ์ ์ ๋ํ ์๊ณ ๋ฆฌ์ฆ ๋ฐ ๊ณต์ ๊ณ์ฐ
๋ด ์ปฌ๋ ์
๋ค์ด์ด๊ทธ๋จ(๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์๋ ์ปฌ๋ ์
์ผ ๊ฐ๋ฅ์ฑ์ด ๊ฐ์ฅ ๋์). ์ปฌ๋ ์
์ ์ฐ๊ฒฐ๋ ๋ชฉ๋ก์ผ๋ก ์์ฑ๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ์ธ๊ณต ์ง๋ฅ์ ๊ฒ์์ ๋ผ์๋ฃ์ผ๋ ค๋ ์ธ๋ฐ์๋ ์๋์
๋๋ค.
ะขะตะพัะธั
"์ฒ ๋ฆฌ ๊ธธ๋ ์ฒซ ๊ฑธ์๋ถํฐ ์์๋๋ค"(๊ณ ๋ ์ค๊ตญ์ ์งํ)
์ค์ ์์ ์ด๋ก ์ผ๋ก ๋์ด๊ฐ์! ์ทจ๋ฏธ๋ฅผ ์ํ ์๊ฐ์ ์ด๋ป๊ฒ ์ฐพ์ผ์ญ๋๊น?
- ์ ๋ง๋ก ์ํ๋ ๊ฒ์ ๊ฒฐ์ ํ์ญ์์ค (์์, ์ด๊ฒ์ด ๊ฐ์ฅ ์ด๋ ต์ต๋๋ค).
- ์ฐ์ ์์๋ฅผ ์ค์ ํฉ๋๋ค.
- ๋ ๋์ ์ฐ์ ์์๋ฅผ ์ํด ๋ชจ๋ "๋ถํ์ํ" ๊ฒ์ ํฌ์ํ์ญ์์ค.
- ๋งค์ผ ๋ชฉํ๋ฅผ ํฅํด ๋์๊ฐ์ญ์์ค.
- ์ทจ๋ฏธ๋ฅผ ์ํด ๋์ธ ์๊ฐ์ ์์ ์๊ฐ์ด ์์ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํ์ง ๋ง์ญ์์ค.
ํํธ์ผ๋ก๋ ์ํ๋ ๊ฒ์ ๊ฒฐ์ ํ๊ณ ์ฐ์ ์์๋ฅผ ์ ํด์ผ ํฉ๋๋ค. ๋ฐ๋ฉด์ ์ด๋ฌํ ์ฐ์ ์์๋ฅผ ์ํด ์ผ๋ถ ์ฌ๋ก/ํ๋ก์ ํธ๋ฅผ ํฌ๊ธฐํ ์ ์์ต๋๋ค. ์ฆ, "๋ถํ์ํ"๋ชจ๋ ๊ฒ์ ํฌ์ํด์ผํฉ๋๋ค. ์ธ์์๋ ์ต๋ ์ธ ๊ฐ์ง ์ฃผ์ ํ๋์ด ์์ด์ผ ํ๋ค๋ ๋ง์ ์ด๋๊ฐ์์ ๋ค์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์ต์ ์ ๋ฐฉ๋ฒ์ผ๋ก ๊ทธ๋ค์ ๋ค๋ฃฐ ์ ์์ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ถ๊ฐ ํ๋ก์ ํธ/์ง์๊ฐ ์ง๋ถํ๊ฒ ๊ณผ๋ถํ๋๊ธฐ ์์ํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์๋ง๋ ์ฃผ๊ด์ ์ด๊ณ ๊ฐ์ธ์ ์ธ ๊ฒ์ ๋๋ค.
ํน์ ํฉ๊ธ๋ฅ ์ด โโ์์ต๋๋ค. ์ ๋ 0%์ ๋ ์ ๋ณด๋ด์ง ๋ง์ญ์์ค! ์ธ๋ ๊ฐ๋ฐ์์ ๊ธฐ์ฌ์์ ๊ทธ๊ฒ์ ๋ํด ๋ฐฐ์ ์ต๋๋ค. ํ๋ก์ ํธ๋ฅผ ์งํ ์ค์ด๋ผ๋ฉด ๋งค์ผ ๊ทธ๊ฒ์ ๋ํด ๋ฌด์ธ๊ฐ๋ฅผ ํ์ญ์์ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ด ์ผ๋ง๋ฅผ ๋ฒ๋์ง๋ ์ค์ํ์ง ์์ต๋๋ค. ํ ๋จ์ด ๋๋ ํ ์ค์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ , ํํ ๋ฆฌ์ผ ๋น๋์ค๋ฅผ ๋ณด๊ฑฐ๋, ๋ณด๋์ ๋ชป์ ๋ฐ๋ ๋ฑ ๋ฌด์ธ๊ฐ๋ฅผ ํ์ญ์์ค. ๊ฐ์ฅ ์ด๋ ค์ด ๋ถ๋ถ์ ์์ํ๋ ๊ฒ์ ๋๋ค. ์ผ๋จ ์์ํ๋ฉด ์ํ๋ ๊ฒ๋ณด๋ค ์กฐ๊ธ ๋ ๋ง์ ์ผ์ ํ๊ฒ ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ๋น์ ์ ๋์์์ด ๋น์ ์ ๋ชฉํ๋ฅผ ํฅํด ๋์๊ฐ ๊ฒ์ด๋ฉฐ ์ ๋ฅผ ๋ฏฟ์ผ์ญ์์ค. ๊ฒฐ๊ตญ, ๋ชจ๋ ๊ฒ์ ์ฃผ๋ ๋ธ๋ ์ดํฌ๋ ๋ฏธ๋ฃจ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ 5, 10, 15๋ถ ์์ ์๊ฐ์ ๋ฌด๋ฃ "ํฑ๋ฐฅ"์ ๊ณผ์ํ๊ฐํ๊ณ ๋ฌด์ํ์ง ๋ง๊ณ ํ๋ ์๊ฐ ๋์ ์ง์๋๋ ํฐ "๋ก๊ทธ"๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋น์ ์ ์ค ์ ์์ต๋๊น? ํ๋ก์ ํธ์ ๋ํด ์๊ฐํด ๋ณด์ญ์์ค. ์์ค์ปฌ๋ ์ดํฐ๋ฅผ ํ๊ณ ์ฌ๋ผ๊ฐ๋์? ๊ณต์ฑ ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ ์ผ์ญ์์ค. ๋ฒ์ค์์ ์์ฌ๋ฅผ ํฉ๋๊น? ์ข์, ๊ธฐ์ฌ ์ข ์ฝ์ด๋ด. ๋ชจ๋ ๊ธฐํ๋ฅผ ํ์ฉํ์ญ์์ค. YouTube์์ ๊ณ ์์ด์ ๊ฐ๋ฅผ ๋ณด์ง ๋ง์ธ์! ๋น์ ์ ๋๋๋ฅผ ์ด์ง๋ฝํ ์ง ๋ง์ญ์์ค!
๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง. ์ด ๊ธฐ์ฌ๋ฅผ ์ฝ์ ํ ๊ฒ์ ์์ง์ ์ฌ์ฉํ์ง ์๊ณ ๊ฒ์์ ๋ง๋๋ ์์ด๋์ด๊ฐ ๋ง์์ ๋ ๋ค๋ฉด Casey Muratori๋ผ๋ ์ด๋ฆ์ ๊ธฐ์ตํ์ญ์์ค. ์ด ์ฌ๋์
Casey๋ ๋ํ ์์ ๋ง์ ๊ฒ์ ์์ง์ ๊ฐ๋ฐํจ์ผ๋ก์จ ๊ธฐ์กด ์์ง์ ๋ ์ ์ดํดํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ์ค๋ช ํฉ๋๋ค. ๋ชจ๋๊ฐ ์๋ํ๋ฅผ ์๋ํ๋ ํ๋ ์์ํฌ์ ์ธ๊ณ์์๋ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋๋ผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๊ฒ ๋ฉ๋๋ค. ์ปดํจํฐ์ ๋ณธ์ง์ ์ดํดํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ ๋ํ ํจ์ฌ ๋ ๋๋ํ๊ณ ์ฑ์ํ ํ๋ก๊ทธ๋๋จธ, ์ฆ ํ๋ก๊ฐ ๋ ๊ฒ์ ๋๋ค.
์ ํํ ๊ธธ์ ํ์ด์ ๋น๋๋ค! ๊ทธ๋ฆฌ๊ณ ์ธ์์ ๋ ์ ๋ฌธ์ ์ผ๋ก ๋ง๋ค์.
์ ์ : ๊ทธ๋ํจ ์๋๋ ์ด , ๋ฐ๋ธ์ต์ค
์ถ์ฒ : habr.com