게임프로그래머가 되기위해 2 본문

Programming/프로그래밍 일반

게임프로그래머가 되기위해 2

쩡호 2017. 4. 13. 12:45
2. 게임 프로그래머가 되기위한 첫걸음 "C언어"
 
왜 C 언어인가?
 
프로그래밍을 배울때 가장 먼저 배우는 언어에대한 이견은 많다. 가장 먼저 비주얼 베이직을 배우라고 하는 사람도 있고, 혹은 C언어를 배우는 사람도 있다. 또 어떤 사람들은 C++을 먼저 배우는것이 좋다고 하고, 또 어떤사람들은 Pascal이 좋다고 하는 사람들이 있다.
 
내가 보기에도 C 언어를 가장 먼저배우는것은 최선은 아닐듯 싶다. VB .net을 먼저 배우거나, C++로 바로 넘어가도 좋을듯 싶다.
 
그렇지만 게임 프로그래밍을 한다면 C++ 이나 C 언어를 배우는것이 좋다고 생각한다. 후에는 어떻게 될지 모르지만 게임 프로그래밍에는 아직도 C++이 기본으로 사용되고, POINTER 가 굉장히 많이사용되기때문이다.
 
C++을 배워야 한다는 사람도 있지만, C++을 가지고 자료구조나 알고리즘을 배울때 너무 난잡해지는 코드는 별로 추천하기 싫다.(자료구조도 이해하기 힘든데 OOP까지 들어있는 코드는 사람을 미치게 만든다-_-;)
 
그럼 C언어의 어디가 중요하고, 어떤 순서로 배워야 하나?
 
C 언어뿐 아니라 다른 언어도 마찬가지겠지만, 가장 첫번재 언어를 배울때 가장 중점은 "프로그래밍을 '추상화' 시킬수 있느냐"다. 다른 말로하면 어떤 Order가 내려왔을때, 그것을 머리속으로 그려서 프로그래밍 할 수 있느냐다.
 
이것을 연습하는것이 첫번째 언어를 배울때의 자세이다.
 
이것은 어떻게 배우느냐? 가장 어려운 것이지만 이건 최고의 방법이 있다. 많은 책들에서 나오는 이야기지만 예제 코드를 열심히 쳐보는것은 굉장한 도움이 된다. 우선 연산자와 예약어 사용법에 익숙해 지는것이 추상화에 큰 도움이 된다.
 
이런 방법으로 모든 장의 예제를 다 쳐볼 필요는 전혀 없다. 한 컨셉에 하나 정도를 직접 처보면서 넘어가는게 좋다.
 
이 방법으로 보통 제어문과 반복문, 사용자 정의 함수까지 책을 천천히 읽는게 좋다.(약 3일에서 - 1주일이면 가능하다.)
 
(제어문과 반복문을 할때 이것이 게임에 어떤부분에 쓰이겠구나 상상하면서 프로그래밍을 하는게 좋다. 그럼 더 즐거울뿐 아니라 이해도 빠르다.)
 
반복문과 제어문까지 읽었다면, 이제부턴 즐거운 프로그래밍 시간이다.
 
우선 간단한 워밍업으로
n 값을 입력받으면, n열만큼 * 이 출력되게 하자.                           
*                                                                                 
**                                                                                                   
***                                                                                                 
****
*****
n = 5  일때 결과값
 
많이 하는 별장난 이라고 하는거다!
 
x, y 값을 입력 받으면 사각형을 그리는 것이다. 속이 빈 사각형.
 
x = 5, y = 3
*****
*     *
*****
 
이런식이다.
 
단 위에 와 함께 마찬가지로 예외 사항 검출은 하는게 좋다.(입력값에 -1을 넣는다거나)
 
이것만 짤수 있다면, 우선 대략은 반복문과 제어문을 이해했다고 볼수 있다.
 
그 이후에 배열과 사용자 정의 함수를 열심히 본다. 사용자 정의 함수를 볼때는 하노이탑(제귀호출을 이용한 하노이탑)코드를 공부해보는게 좋다. 어디서 찾냐고? 인터넷에 널리고 널린 코드다 찾아봐라.
 
배열을 배웠으면 이제 본격적으로 약간 머리가 아픈걸 해보자.
 
우선 n 값을 입력받으면 아래와 같은 결과가 나올수 있게 프로그래밍을 짜라
 
n = 5 이면
 
1 2 3 4 5
1 2 3 4 1
5 4 5 5 2
4 3 2 1 3
3 2 1 5 4
 
사실 머리 하나도 안아플껏이라 예상된다. 뭐 이것도 머리아프면 본격적으로 머리 아파질 것들에 대해서 어떻게 풀지 고민할수 밖에 없을듯 싶다.
 
이정도 했으면 대강 반복문과 제어문을 어떻게 해야 효과적이고 적절하게 사용하면되는지 감이 올것이다. 물론 이것이 다는 아니지만 누군가의 말처럼 프로그래밍은 반복문과 제어문의 연속이니 그리 걱정하지 않아도 된다.(프로그래밍 코드까지 약 1주일이 걸린다.)
 
이제부터 약간 어려울수도 있겠다. 여지까지는 화면에 보여주는것을 장난처럼 출력했다면 이제는 자료구조의 한축인 Stack 개념을 공부해볼만 하다.
 
Stack에 대해서 간단하게 알아본후, 아까 열심히 봐둔 하노이탑을 제귀호출이 아닌 방식으로 짜보자. 어렵게 생각해면 어렵겠지만 조금 쉽게 쉽게 생각한다면 그리 어렵지 않다.
(약간의 힌트를 주자면 함수는 스택구조이며, 스스로 스택구조를 만들면된다.)
 
이것을 다 짰다면 이제는 진짜로 다음단계로 넘어갈때가 되었다.(하노이탑 짜는데 1주일)
 
다음은 Pointer(포인터)와 String(문자열), Struct(구조체) 이다.
 
우선 구조체다. 사실 별거 없다. 한번깔끔하게 읽어보고 여러 코드들을 짜보면 된다. 단, 구조체를 왜 쓰는가에 대한 궁금증이 있을수있다. 그건 간단하다. 구조체는 여러 변수들을 묶는다는 개념인데, 실재 우리 실생활에 가깝게 프로그래밍을 짤수 있다는것이다.
(이해가 안된다면 책관리 프로그램을 짜본다고 생각하고, 책이라는 커다란 오브젝트를 어떤식으로 처리하는게 가장 효과적인지 생각해봐라.)
 
이후 공부할 포인터와 문자열에서 많은 프로그래머 지망생들이 포기하고 좌절하곤 한다. 하지만 포인터에 대해서 이해하는 순간 스스로 왜 어려워했는지 알수 없는 그런 존제가 포인터이다.
 
포인터의 세계는 오묘하고 복잡하지만, 대략 감이 잡히면 생각보다 쉽게 이해 할수 있다!
 
어떻게 이해하느냐? 는 사실 여기다가 쓸만한 글이 아니다. 그림과 함께 말로 설명해도 이해하기 쉽지 않은것인데, 글로 설명하기는 힘들다. 그리고 이 글은 강좌가 아니다.  그럼 우짜냐고? 역시 포인터도 한번짜보면 쉽게 이해 할 수있다.
 
책에 보면 Linked List 라는 개념이 있을것이다. 그거 아무의 도움도 받지 않고 한번 짜봐라. 짜보면 거의 감을 잡을수 있을것이다.(프로그래밍 코드까지 약 2주일이 걸린다.)
 
리스트를 짜면서 포인터에 대한 이해를 했다면 간단하게 String 에 대해서도 공부 해보자. String 을 공부하게되면 배열과 포인터의 미묘하고 껄떡지근한 관계도 다 이해할수 있다.
 
String 에대한 이해는 strstr 함수("안녕하세요. 좋은아침입니다?" 라는 스트링 안에 "하세요" 라는 스트링이 있는지 없는지에 대해서 찾는 함수이다. 자세한것은 msdn 을 참조하라.) 를 한번 짜보는것도 좋은 방법이다.(프로그래밍 코드까지 약 1주일이 걸린다.)
 
자 이정도면 C언어는 대충 다 배운 것이다. C언어서 존제하는 수많은 함수들은 필요할때마다 찾아서 호출하면되는것이고, 모르는것이 있으면찾아서 보고 다시 하면된다.
 
그런데 C 언어를 배우면서 공부해야 할것이 하나 더 있는데, 그것은 Visual C++의 디버거 사용 방법이다.(디버깅을 사용하는데 약 2-3일이 걸린다.)
 
디버거는 프로그래밍을 쉽게 하는 방법으로써, 프로그래밍을하던 중간에 자신의 변수를 알아 보는 기능, 원하는 자리에서 프로그램을 멈출수도 있는 기능등이 있기때문에 상당히 편리하다.
 
많은 기능이 있지만 위의 2가지 정도의 기능만 알면 C 언어 작업을 할때는 무리 없이 사용할수있다.
 
디버거 기능은 위에 내용들을 공부하다가 프로그래밍 짤때 답답해 질때가 있을것이다. 그때쯤 책들을 뒤적여 공부하면 좋다. 최근에는 많은 책들에 이 내용이 나와있다.
 
 
이정도가 C언어때 배워야할 내용들이다. 이것들을 다 하는데 약 3개월정도의 시간을 투자하면 된다. 최단 2개월에도 할수 있다.(나와있는 주들 전부 합하면 6주뿐이 안된다-_-; 하지만 사람이 술도 먹고 쉬기도 하지 않나?-_-?)
Comments