[[TableOfContents]] ì´ë¶€ë¶„ì˜ í•µì‹¬ì€ ê²Œìž„ì€ ë°ì´í„°ì™€ ë¡œì§ìœ¼ë¡œ ë˜ì–´ìžˆìœ¼ë©° ë°ì´í„°ëŠ” 코드 ìžì²´ì— 내장ë˜ê¸° 보다는 파ì¼ì—ì„œ ì½ì–´ë“¤ì—¬ì•¼ 한다는 것ì´ë‹¤. === ì•„ì´ë””ì–´ #1 : 기본 === ê²Œìž„ì´ ì‹œë™ë ë•Œ ë¿ ì•„ë‹ˆë¼ í•„ìš”í• ë•Œë§ˆë‹¤ í…스트 파ì¼ì„ ì½ì–´ë“¤ì¼ 수 있게 하ë¼. ë°ì´í„° 주ë„ì (Data-Driven) ì„¤ê³„ì— ê¼ í•„ìš”í•˜ë‹¤. 왜ëƒë©´ ê²Œìž„ì€ í”„ë¡œê·¸ëž˜ë¨¸ ë¿ë§Œ ì•„ë‹ˆë¼ ë””ìžì´ë„ˆ, 테스터 등과 ê°™ì´ ë§Œë“œëŠ” ê²ƒì´ ë•Œë¬¸ì´ë‹¤. 프로그래머가 ì•„ë‹Œ ì´ìƒ 소스코드를 보는 ê²ƒì€ ì–´ë µì§€ë§Œ í…스트 파ì¼ì€ ì•½ê°„ì˜ ê·œì¹™ìœ¼ë¡œë§Œìœ¼ë¡œë„ ì´í•´ 가능하다. === ì•„ì´ë””ì–´ #2 : ìµœì†Œí•œì˜ ì›ì¹™ === ìƒìˆ˜ë“¤ì€ 하드코딩(Hard-cording)하면 안ëœë‹¤. 하드 코딩ì´ëž€ ë°ì´í„°ë¥¼ ì—”ì§„ì— ë°”ë¡œ 탑재하는 걸 ë§í•œë‹¤. 즉 #1 ê¸°ë³¸ì— ë°˜í•˜ëŠ” 것ì´ë¼ê³ ë³¼ 수 있다. í•˜ë“œì½”ë”©ì„ í•˜ë§Œ 안ë˜ëŠ” ì´ìœ 는 ì—ì‹œ #1ê³¼ 비슷하다. ìš”ì»¨ë° ì†ŒìŠ¤ì½”ë”©ë³´ë‹¤ëŠ” Text를 ì½ì–´ë“¤ì´ëŠ” ê²ƒì´ ì•„ë¬´ë‚˜ ìˆ˜ì •ì„ ê°€ëŠ¥ì¼€ í•˜ê³ ì‰½ê²Œ í• ìˆ˜ 있다는 게 장ì ì´ë‹¤. ì´ëŠ” ê²Œìž„ì„ ì œìž‘í• ë•Œë‚˜ 테스트 í• ë•Œ ì—„ì² íŽ¸í•´ì§„ë‹¤. 다시 í•œ 번 강조하지만 ê²Œìž„ì€ í”„ë¡œê·¸ëž˜ë¨¸ë§Œì´ ë§Œë“œëŠ” 게 아니다. === ì•„ì´ë””ì–´ #3 : í•˜ë“œì½”ë”©ì„ ì™„ì „ížˆ ì—†ì• ë¼. === ì–´ë–¤ 것ì´ë“ 바뀔 수 ìžˆë‹¤ê³ ê°€ì •í•´ì•¼ í•˜ê³ , ì‹¤ì œë¡œ ì–´ë–¤ 것ì´ë“ 바뀌게 ë§ˆë ¨ì´ë‹¤. ìœ ì—°í•˜ê²Œ 만드는 ê²ƒì´ í•„ìš”í•˜ë‹¤. ê²Œìž„ì˜ ì¶”ìƒí™”ê°€ 필요하며 변하지 ì•Šì„ ê²ƒê³¼ ë³€í• ìˆ˜ 있는 ê²ƒì„ ë¶„ë¦¬í•˜ì—¬ 범용ì ì¸ ê¸°ëŠ¥ì„±ì„ ì¶”êµ¬í•´ì•¼í•œë‹¤. 예를 들어 ì´ˆê¸°ì— ë¬´ê¸°ê°€ 4ê°œ í•„ìš”í•˜ë‹¤ê³ í• ë•Œ ë”± 4개만 쓸 수있는 ì½”ë”©ì„ í•˜ì§€ ë§ê³ 100ê°œë„ ë§Œë“¤ 수 있는 ì‹ì˜ 프로그래ë°ì„ 하ë¼ëŠ” 것ì´ë‹¤. ì´í•´ê°€ 안가는가? -_-; [[BR]] ==== "아예 ì—†ì• ë¼." - ë†ë‹´ì´ 아니란다 -_- ==== 게임 개발 ê³¼ì •ì€ ë°˜ë³µì ì´ë©° 진화ì ì´ë‹¤. ì• ì´ˆì— ìƒê°í–ˆë˜ 게임과 최종ì 으로 만들어진 ê²Œìž„ì´ ì „í˜€ 다른 ë¬¼ê±´ì¸ ê²½ìš°ë„ í”하므로 규칙, ìºë¦í„°, 종족, 무기, ë ˆë²¨, ì œì–´ë°©ì‹, ê°ì²´ë“±ì„ ìžìœ ë¡œì´ ìˆ˜ì • 가능하게 í• ìˆ˜ 있는 프로그래ë°ì´ 필요하다. 프로그래머가 피곤하지 ì•Šìœ¼ë ¤ë©´ ê¼ í•„ìš”í•˜ë‹¤. Data 하나 ìˆ˜ì •í•˜ê¸° 위해 프로그래머가 다시 ì»´íŒŒì¼ í•´ì•¼í•˜ëŠ” ì¼ì´ ê³„ì† ì¼ì–´ë‚œë‹¤ë©´ 프로그래머는 ë¯¸ì¹ ê²ƒì´ë‹¤.... 키키 -_- === ì•„ì´ë””ì–´ #4 : ê²Œìž„ì˜ íë¦„ì€ ìŠ¤í¬ë¦½íŠ¸ë¡œ ì œì–´í• ê²ƒ === 스í¬ë¦½íŠ¸.... 다들 잘 ì•Œ 것ì´ë‹¤.(ì°¸ê³ ë¡œ 현재 요약하는 ì‚¬ëžŒì€ ìŠ¤í¬ë¦½íŠ¸ 언어를 í•œ ë²ˆë„ ì‚¬ìš© 안해봤다 -.- 파ì´ì¬ì´ë‚˜ 공부해 볼까 -_-) Quake3 해봤는가? 좀 ì „ë¬¸ì 으로 했다면 몇 가지 ëª…ë ¹ì–´ë¡œ 별별 í¬ì•ˆí•œ ê²ƒì„ ë‹¤ í•´ ë³¼ 수 ìžˆì—ˆì„ ê²ƒì´ë‹¤. 간단한 예가 치트키가 ë˜ëŠ”ë° ë³´í†µ 치트키는 테스트 용으로 ë§Œë“ ê²ƒì´ë‹¤. ì´ê²Œ 바로 스í¬ë¦½íŠ¸ë‹¤(ì•„ 쉽게 설명했다 --) 스í¬ë¦½íŠ¸ì˜ ë¬¸ì œì ì´ë¼ë©´.... 스í¬ë¦½íŒ… 언어가 필요하며 ë˜í•œ 파서(Parser)ê°€ 필요하다는 ì ì´ë‹¤. 하여간 스í¬ë¦½íŠ¸ë¥¼ 사용하면 시스템 설계가 ìƒë‹¹ížˆ 단순화 ëœë‹¤ê³ 한다.... -_- === ì•„ì´ë””ì–´ #5 : 스í¬ë¦½íŠ¸ ë‚¨ìš©ì˜ í•´ì•… === 스í¬ë¦½íŠ¸ì˜ ì›ì¹™ì€ ë¡œì§ê³¼ ë°ì´í„°ì˜ 분리다. ê·¸ëŸ°ë° ìŠ¤í¬ë¦½íŠ¸ëŠ” ë¡œì§ê³¼ ë°ì´í„°ì˜ ì–‘ë©´ì€ ëª¨ë‘ ê°€ì§ˆ 수 있다는 ì ì´ ë¬¸ì œê°€ ëœë‹¤. 즉 프로그래머는 핵심 엔진과 스í¬ë¦½íŠ¸ 파서만 ì§œê³ ë‚˜ë¨¸ì§€ëŠ” 스í¬ë¦½íŠ¸ 작성ìžì—게 ë– ë§¡ê¸°ê³ íƒ±ìžíƒ±ìž 놀 ìˆ˜ë„ ìžˆë‹¤ -.-. 스í¬ë¦½íŠ¸ëŠ” ì¼ì„ 편하게 í•˜ë ¤ëŠ” 거지 놀ìžê³ 하는 ê²ƒì´ ì•„ë‹˜ì„ ëª…ì‹¬í•´ì•¼í•œë‹¤. ì´ìƒì ì¸ í”„ë¡œê·¸ëž˜ë¨¸ëŠ” ë¬¸ì œë¥¼ 하향ì‹ìœ¼ë¡œ ë¶„í• í• ìˆ˜ 있어야하며, ê·¸ëŸ¼ìœ¼ë¡œì¨ ë¡œì§ì„ 조작하기 위한 필수ì ì¸ ì œì–´ë°©ì‹ë“¤ì„ 스í¬ë¦½íŠ¸ì— 노출 시킬 수 있어야 한다. === ì•„ì´ë””ì–´ #6 : ë°ì´í„° ì¤‘ë³µì„ í”¼í•˜ë¼. === 코드를 중복하지 않는다는 ê±´ 다들 ì•Œ 것ì´ë‹¤(대표ì ì¸ ì˜ˆê°€ classì˜ ìƒì†ì´ë‹¤). ë°ì´í„°ë„ ì´ëŸ¬í•œ ë°©ì‹ì´ ê°€ëŠ¥í•œë° ë°ì´í„°ë¥¼ ì „ì—ì 으로 만드는 ë°©ë²•ì´ ìžˆë‹¤. ì—¬ê¸°ì— í´ëž˜ìŠ¤ì˜ ìƒì† ê°œë…ì´ ë“¤ì–´ê°„ë‹¤. 예를 들어서 ê³ ë¸”ë¦° - ë¹ ë¥¸ ê³ ë¸”ë¦° - ê³ ë¸”ë¦° ì¸ìŠ¤í„´ìŠ¤ 순으로 ìƒì† 받는다 치ìž. 여기서 ê³ ë¸”ë¦°ê³¼ ë¹ ë¥¸ ê³ ë¸”ë¦°ì˜ ì°¨ì´ëŠ” ì†ë„ë¿ì´ë¼ë©´ ë¹ ë¥¸ ê³ ë¸”ì¸ì€ ê³ ë¸”ë¦°ì—ì„œ 단지 ì†ë„만 ê³ ì¹˜ê³ ë‚˜ë¨¸ì§€ëŠ” ê³ ë¸”ë¦°ì— ì •ì˜ëœ ê²ƒì„ ê·¸ëŒ€ë¡œ 사용하면 ëœë‹¤(ë°ì´í„°ì˜ ì„ ì–¸ ì •ì˜ í•„ìš” ì—†ì´) ë¬¼ë¡ ë¹ ë¥¸ ê³ ë¸”ë¦°ì„ ìƒì† ë°›ì€ ê³ ë¸”ë¦° ì¸ìŠ¤í„´ìŠ¤ëŠ” ì†ë„는 ë¹ ë¥¸ ê³ ë¸”ë¦° 나머지는 ê³ ë¸”ë¦°ì— ìžˆëŠ” ê²ƒì„ ê·¸ëŒ€ë¡œ 사용하면 ë. 어떤가 간단하지? === ì•„ì´ë””ì–´ #7 : ë°ì´í„°ë¥¼ 만들어내는 ë„구를 ìž‘ì„±í• ê²ƒ === 예만 들어 ì„¤ëª…í•˜ê² ë‹¤. 맵 ì—디터가 그것ì´ë‹¤ -.- 게임 만들 ë•Œ í”„ë¡œê·¸ëž˜ë° ì–¸ì–´ ë¿ë§Œ ì•„ë‹ˆë¼ ì»¤ìŠ¤í…€ íˆ´ì„ ì‚¬ìš©í•˜ëŠ” ê²ƒì€ ë‹¤ë“¤ ì•Œ 것ì´ë‹¤(ëª¨ë¥¸ë‹¤ê³ ? -_-) 맵 ì—디터 처럼 ê²Œìž„ì— í•„ìš”í•œ ë°ì´í„°ë“¤ì„ 잘 조합하거나 만들 수 있는 íˆ´ì„ ë§Œë“¤ì–´ 쓰는 게 여러모로 편하다. === ê²°ë¡ === ë°ì´í„° 주ë„ì ë°©ë²•ë¡ ì„ ì±„íƒí•˜ëŠ” ê²ƒì€ ì–´ë µì§€ 않지만, ê·¸ 결과가 ëˆˆì— ì•ˆë³´ì¸ë‹¤ê³ 불í‰í• ì§€ë„ ëª¨ë¥¸ë‹¤. 하지만 간단한 예를 들면서 ë§ˆì¹˜ê² ë‹¤. [[BR]] í† íƒˆ 어나ì´ì–¼ë ˆì´ì…˜ì´ëž€ ê²Œìž„ì„ ì•„ëŠ”ê°€? (ì´í•˜ TA) 알면 1주마다 ìœ ë‹› 추가 ë˜ëŠ” 걸 ì•Œ 테니 ëê³ , 모른다면 ì‹¬ì¦ˆì˜ ì˜ˆë¥¼ ë“¤ê² ë‹¤. ì‹¬ì¦ˆë„ ì—ì‹œ ë°ì´í„° 주ë„ì ë°©ë²•ë¡ ì„ ì‚¬ìš©í–ˆëŠ”ë° ëŒ€í‘œì ì¸ ì˜ˆê°€ ìŠ¤í‚¨ì´ ë˜ê² 다. ê·¸ë¦¬ê³ ì•„ì´í…œë„ ë§ˆì°¬ê°€ì§€ê³ ^_^ ì°¸ê³ ë¡œ ë§ë¶™ì´ì§€ë§Œ TAê°€ 없었다면 ì—¬ëŸ¬ë¶„ì´ ë¯¸ì¹œë“¯ì´ ì¦ê¸´ë‹¤ëŠ” 스타í¬ëž˜í”„íŠ¸ë„ ì—†ì—ˆì„ ê²ƒì´ë‹¤. ì—¬ëŸ¬ë¶„ì´ ë³´ê³ ìžˆëŠ” 현재 스타í¬ëž˜í”„트는 처ìŒì— 만들어진 그것과 ì™„ì „ížˆ ë‹¤ë¥´ë‹¤ê³ í• ìˆ˜ ìžˆì„ ì •ë„였다. TA와 다í¬ë ˆì¸ì´ëž€ RTSê²Œìž„ì„ ë³´ê³ ì†ŒìŠ¤ì½”ë“œê¹Œì§€ 갈아치운 ê²°ê³¼ë¬¼ì´ í˜„ìž¬ 스타í¬ëž˜í”„트다.... ---- ["GameProgrammingGems"]