메뉴 건너뛰기

창조도시 기록보관소

제가 창조도시에 마지막으로 들어온지 벌써 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언어를 이용해 기능만 구현하면 윈도우 프로그래밍의 기본을 하시는 것입니다.


 


 


 


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


 


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


 


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

번호 제목 글쓴이 날짜 조회 수
349 [C++] 객체 지향 프로그래밍 (OOP) -3- [1] Zeprod 2007.01.02 295
348 이번에도 잡담입니다만-_-;; [6] 아란 2006.12.30 350
347 [자료구조] Binary Search Tree [4] Zeprod 2006.12.29 283
346 원형 거리 측정 [2] Zeprod 2006.12.28 495
345 어드벤쳐 만들기(무료판) [3] StartCraft 2006.12.28 1095
344 001 Action / RPG Maker [6] StartCraft 2006.12.28 739
343 [C++] 객체 지향 프로그래밍 (OOP) -2- [1] Zeprod 2006.12.27 275
342 그저 비주얼 베이직에 낚인 것에 대한 잡담 [2] 아란 2006.12.26 369
341 나름대로 게임제작1 - 시나리오 작성법 [4] 켈리시 2006.12.26 702
340 각종 변수를 이용한 쓸만한 것들 [5] 放觀者眼君 2006.12.18 507
339 방사형 마법범위 좌표구하기 [5] BAYONET 2006.12.16 658
338 맵배치 이런식으로 하면 되려나요..?'';; [9] file 땅콩아줌마 2006.12.15 672
337 [이벤트 ID이용의 예]슈팅 게임 [4] file masa 2006.12.14 500
336 골프게임은? [2] Nadoo 2006.12.14 362
335 이벤트를 이용, 장애물을 포함한 적과의 거리계산[중급이상추천] [10] file masa 2006.12.13 545
334 [C++] 객체 지향 프로그래밍 (OOP) -1- [4] Zeprod 2006.12.11 403
» [서론] 콘솔창으로 작업하는 것이 허무하신가요? [6] Zeprod 2006.12.10 360
332 축구게임 시스템 [9] 헤지혹 2006.12.10 594
331 범위를 구할때 쓸 수 있는 식 둘 [6] 메카_탁 2006.12.08 483
330 외딴 집이랄까..? .. [9] file 도야 2006.12.05 560