GPCurriculum

초보자 FAQ - 게임 프로그래밍 학습 과정

 1. 수학/물리 -------------+------------------------+
                           |                        |
                     +-----+--> 7. 2차원 그래픽 ----+----> 8. 3차원 그래픽
                     |                              |
 2. 언어 ---> 3. 특정 API ------------> 9. MFC      |
     |               |                              |
     |               +------------+                 |
     |                            |                 |
     |                            +-----------------+
     |                            |
     |                            +--+--> 10. 인공지능
     |                            |  |
     +--> 4. 알고리즘/자료구조 ---+  +--> (11. 오퍼레이팅 시스템) ---> 12. 네트워크
     |                               |
     |                               +--> (13. 데이터 베이스) ---> (16. 4GL)
     +--> 5. 프로그래밍 문서화       |
     |                               +--> (14. 컴파일러)
     +--> (6. 컴퓨터구조/어셈블리)
     |
     +--> (17. 디버그)

 (15. 스크립트 언어)

1. 수학/물리

프로그래머라면 피해갈 수 없습니다. 프로그래머를 포기하던가, 아니면 머리 터지도록 공부해야합니다. 다만 먼저 수학/물리를 공부하는건 그리 의미가 없고, 또한 수학/물리의 모든 분야를 알 필요도 없으므로 필요할 때마다 공부하는 방법도 괜찮다고 생각합니다.

2. 언어에 대한 공부 : (Java ->) C++

상당히 논란의 대상이 되는 내용이지만, 파연은 C++부터 공부하던가, 아니면 Java를 먼저 공부한 후에 C++을 공부하라고 권하는 편입니다. 많은 사람이 C++ 이전에 C를 공부하곤 하는데, C와 C++은 패러다임 자체도 완전히 상반되기때문에 C에 익숙해져버리면 C++에서 개념을 익히기가 상당히 힘듭니다. 그래서 Java를 권하는 바입니다. Java 또한 C와 마찬가지로 C++과 문법이 상당히 비슷하고, C에 비해서 배우기가 훨씬 쉽습니다. 또한 4. 알고리즘과 10. 인공지능 등을 공부할 때 Java를 사용해서 예제프로그램을 짜보면 C나 C++을 이용해서 공부하는 것 보다 훨씬 속도가 빠를겁니다.

기타 Basic 을 사용해서 게임을 만들 수 있지않으냐고 말하는 사람이 있겠지만.. (대답은 예입니다) 제대로된 게임을 만들고 싶다면 하루라도 빨리 Basic을 떠나기를 강력히 권합니다.

3. 특정 API에 대한 공부 : Win32 API

도스에서도 게임 만들 수 있냐고요? (대답은 예입니다.) 꿈깨라고 말씀드리겠습니다. 도스에서 게임을 만들려면, 해결해야될 일이 한두가지가 아닙니다. (수많은 주변장치 드라이버들의 억세스, 메모리 관리 등등..) Win32 API 를 공부하는 것이 최선, 최선입니다.

4. 알고리즘/자료구조에 대한 공부

큐, 스택, 링크드리스트, 이진트리, 해쉬테이블 등. 모르면 나중에 고생합니다.

5. 프로그래밍 문서화

반드시 익혀야할 스킬입니다.

(참고: DoxygenTutorial)

6. 컴퓨터구조/어셈블리

꼭 어셈블리를 모르더라도 컴퓨터구조를 이해하면, 코드를 최적화시킬 수 있습니다. 어셈블리는 컴퓨터구조를 이해하기 제일 빠른 방법이고, 어셈블리 자체도 상당히 중요하게 쓰입니다.

7. 2차원 그래픽 프로그래밍 : DirectX

8. 3차원 그래픽 프로그래밍 : Direct3D, OpenGL

게임 프로그래밍 분야에서 현재의 추세는 Direct3D 입니다. 다만 Direct3D 로 마땅한 교재가 없어서 OpenGL를 거치는 사람들도 많습니다.

(관련 글들: 분류:그래픽프로그래밍)

9. MFC

툴 프로그래밍에는 (어쩔 수 없이) 필수항목이겠죠..

10. 인공지능

슈팅게임을 만들든, 전략게임을 만들든, 온라인게임을 만들든 인공지능은 알고 있어야 합니다. 적어도 기본은 닦아 놓읍시다.

(관련 글들: 분류:인공지능)

11. 오퍼레이팅 시스템

네트워크를 제대로 하려면 알아야되는 항목이라고 하는군요. 네트워크의 서버 같은 경우에는 많은 부분이 OS와 맞물려 돌아 가기 때문에 사용 OS에 관해 많은 부분 알 필요가 있습니다. 그러나 알아야 하는 부분이 비교적 정해져 있는 것 같습니다.

12. 네트워크

기본적으로는 간단한 채팅 프로그램을 만들 수 있으면 된다고 합니다. 처음에 생소한 용어가 쏟아져서 꽤 힘들지만, 조금 익숙해지면 그냥 이렇게 해서 -> 이렇게 하면 된다 하는 식입니다. 좀 더 깊이 들어가면 복잡하고 어렵지만, 그 정도까진 필요없다고 봅니다. (만약 알고싶으시다면, 이제 네트워크의 세계에 들어 오시게 되는 것입니다. 네트워크를 전공하지 않으신다면 간단한 채팅 만으로도 충분하다는 생각입니다. 만약 네트워크를 하시려면 심도있는 네트워크 이론을 공부하시면서 만드신 채팅에 여러 가지 서버의 최적화 기술으르 넣어 보세요. 예를 들면 여러가지 풀링들.. 그리고 로긴과 로비등을 만들어 보시고 나중엔 온라인 게임을 만들어 보시면 최고라고 생각합니다.)

13. 데이터베이스

데이터베이스에 대한 지식이 있으면 게임에 존재하는 모든 객체들(캐릭터에서부터 시작해서 상자에 이르기까지)을 효율적으로 관리할 수 있는 엔진 구조에 대한 안목이 넓어진다고나 할까요... 예를 들어서 '현재 캐릭터와 가장 가까운 먼스터 5마리의 목록을 얻는다' 같은 과제들을 일관적이고 효율적인 인터페이스로 수행할 수 있는 능력 등..

14. 컴파일러

스크립트 처리할려면 알아야된다는군요.. 혹은 외부 스크립트언어를 사용하는 방법도 있겠죠..

15. 스크립트 언어 (Python 등)

ScriptLanguage 참고.

관련글: Python을 게임 Script로 활용하자

16. 4GL

13번에 포함될지도... 4세대 언어들 (SQL같은...)

17. 디버그

버그 없는 게임을 만들어야죠 +_+;


의견

각 분야에 대한 좀 더 상세한 가이드가 필요해요 - GpgStudyForum:1826

프로페셔널 제작자라면 당연히 C/C++을 해야 한다는데 동의하지만, 프로가 아닌 사람을 위해서라면 .NET/Managed DirectX 가 보다 나은 선택일 듯. 일단 공부할 양이 위의 목록보다 적고 대부분 프레임워크로 구성되어 있으니까요. F176

분야별 추천 도서

게임프로그래밍도서추천


이런 구성은 어떨까요... 모 출판사의 부탁으로 만들어 본 것입니다.(번호들이 위의 구성과 일치하지는 않음) --류광

        +- 1.1 C/C++   ---+  +- 2. 수학, 물리       --+   +-  4. 2차원 그래픽
        |                 |  |                        |   |
1.언어--+                 +--+- 3. 알고리즘/자료구조 -+---+-  5. 3차원 그래픽  --+- 5.1 OpenGL 일반
        |                 |  |                        |   |                      +- 5.2 DirectX 일반
        +- 1.2 Java 외 ---+  |                        |   |                      +- 5.3 고급 응용
                             |                        |   |
                             |                        |   +- 6. 오디오, 사운드
                             |                        |   +- 7. 인공지능
                             |                        |   +- 8. 네트워킹
                             |                        |
                             +--------------10. 게임 소프트웨어 구축 --+- 10.1 시스템 설계
                             |                                         +- 10.2 스크립팅
                             |                                         +- 10.3 디버깅
9. 게임 기획, 설계  ---------+                                         +- 10.4 테스팅