언어/기타

[서론] 콘솔창으로 작업하는 것이 허무하신가요?

by Zeprod posted Dec 10, 2006
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄

제가 창조도시에 마지막으로 들어온지 벌써 5년이 되었군요.


 


그때는 Create_Zeno라는 닉네임을 사용하고 있었지만, 오늘 들어와보니 아이디가 사라져 있더군요.


 


많은 시간이 흘렀음을 실감합니다.


 


어리고, 게임 제작에 대해 아무것도 몰랐던 제가 이곳에서 게임 개발의 꿈을 키운 것도 좋은 인연인 것 같습니다.


 


그래서 다시 찾아온 이유는 이곳에 계신 많은 예비 게임 제작자분들에게 제가 받은 만큼 배풀기 위해서입니다.


 


 


게임제작에 대한 강좌라니...


 


 


 


이 홈페이지 중에서도 언어게시판이라는 독특한 게시판에 오신 여러분이라면 C언어를 공부해보시거나 이제 공부를 시작하시려는 분들이 많을 것입니다.


 


하지만, C언어에 대해 실망 하시는 분들이 계실텐데, 콘솔창에 단순히 문자를 찍어대는것을 보면서 한숨을 쉬고 계시는 겁니까?


 


 


C언어는 구동속도가 매우 빠르며 사람이 이해하기 쉬운 형태를 갖춘 언어입니다.


 


단지 속도문제로 어셈블리어를 이용해 게임을 만들겠다는 꿈을 가지신 분이 계시다면, 추천하고 싶은 방법은 아닙니다.


 


코드 자체를 이해하기도 어려우며, 추후에 문제가 발생하여 디버그를 하는데에도 문제가 많기 때문이죠.


 


 


C언어는 운영체제를 개발하기 위해 만들어진 언어로서, Windows 역시 C언어로 제작이 되어있습니다.


 


 


그리고 그 Windows는 자체적으로 그래픽 환경을 구축할 수 있는 API들을 공개했습니다.


 


그 덕분에 거의 모든 프로그래밍 언어는 그래픽적인 윈도우창을 기반으로 프로그램을 만들 수 있고, 또 실행될 수 있는것이지요.


 


 


 


 


가장 기본적인 Window 구현 코드를 볼까요?


 


#include


 


LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
 POINT pt;
 //메세지가 들어오면 실행되는 함수
    switch( msg ) //메세지별로 분배해줍니다.
    {
        case WM_DESTROY: //WM_DESTROY 메세지라면?
            PostQuitMessage( 0 ); //프로그램을 전체 종료하라고하고.
            return 0; //프로시저를 끕니다.
  case WM_KEYDOWN :
   switch( wParam )
   {
    case VK_ESCAPE :
     PostMessage( hWnd, WM_DESTROY, 0, 0L );
     break;
   }
   break;
    }


    return DefWindowProc( hWnd, msg, wParam, lParam );
}


 


INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR, INT )
{
    // Register the window class
    WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
                      GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
                      L"Odin", NULL };
    RegisterClassEx( &wc );


    // Create the application's window
    HWND hWnd = CreateWindow( L"Odin", L"Project. Odin View",
                              WS_OVERLAPPEDWINDOW, 100, 100, WIDTH, HEIGHT,
                              NULL, NULL, wc.hInstance, NULL );
 
 
 
  ShowWindow( hWnd, SW_SHOWDEFAULT );
  UpdateWindow( hWnd );


   // 메세지 루프로 들어갑니다.
   MSG msg;
   ZeroMemory( &msg, sizeof(msg) ); //메모리 초기화 00000000....0000~~~...0000
   while( msg.message!=WM_QUIT )
   {
    if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) ) //윈도우 메세지가 튀어나왔다.
    {
     TranslateMessage( &msg );
     DispatchMessage( &msg ); //윈도우 자체 기능을 수행하기 위함
    }
   }
    UnregisterClass( L"Odin", wc.hInstance );
    return 0;
}


 


 


위의 많은 코드들이 보이시나요?


 


위의 코드를 컴파일하고 실행해보신다면, 내용이 아무것도 없는 윈도우창이 생성될 것입니다.


 


중요한 내용들에 대해서는 나중에 알려드릴테지만,


 


저런식으로 코드를 구현하여 윈도우창을 생성하고, 여러분이 지금 공부하시는 C언어를 이용해 기능만 구현하면 윈도우 프로그래밍의 기본을 하시는 것입니다.


 


 


 


따라서 현재 공부하시는 것에 대한 회의를 갖지 마시고, 모든 내용을 숙지하십시오.


 


여러분이 최소한으로 배우게 되는, 포인터, 구조체, 알고리즘등은 기본적인 프로그램 설계시에 꼭 필요한 내용이니까요.


 


그렇지 않다면 기본적인 기능마저도 구현할 수 없게 됩니다.