C++源代码游戏编程--WinMain()函数集

it2022-06-24  87

C++源代码游戏编程--WinMain()函数集   

C++源代码游戏编程--WinMain()函数交流

//******************************************************************//函数:WinMain()//功能:应用程序入口//******************************************************************int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow){    MSG msg;    hInst=hInstance;

    //初始化主窗口    if (!InitWindow( hInstance, nCmdShow))    return FALSE;

    //初始化DirectDraw环境    if (!InitDDraw())    {        MessageBox(hWndMain, "初始化DirectDraw过程中出错!", "Error", MB_OK);        FreeObjects();        DestroyWindow(hWndMain);        return FALSE;    }

    //进入消息循环    while(1)    {        if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))        {            if(!GetMessage(&msg, NULL, 0, 0 )) return msg.wParam;            TranslateMessage(&msg);             DispatchMessage(&msg);        }        else if(bActive)        {            UpdateFrame();        }        else WaitMessage();        }

    return msg.wParam;}

///

//-----------------------------------------------------------------------------// Name: WinMain()// Desc: Initialization, message loop//-----------------------------------------------------------------------------int PASCALWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){    MSG msg;

    if (InitApp(hInstance, nCmdShow) != DD_OK)        return FALSE;

    while (GetMessage(&msg, NULL, 0, 0))    {        TranslateMessage(&msg);        DispatchMessage(&msg);    }    return msg.wParam;}

/// 主循环/int PASCAL WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nCmdShow){    MSG msg;

    if(!InitApp(hInst, nCmdShow)) return FALSE;

    while(1)    {        if(PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE))        {            if(!GetMessage(&msg, NULL, 0, 0 )) return msg.wParam;            TranslateMessage(&msg);             DispatchMessage(&msg);        }        else if(bActive)        {             Update();

            // 翻转上一层缓冲区内容到屏幕。            Screen->Flip();        }        else WaitMessage();     }}

///int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){    // any windows programmer should be familiar with this

    MSG msg;

    lpCmdLine = lpCmdLine;    hPrevInstance = hPrevInstance;    if(!doInit(hInstance, nCmdShow))    {        return FALSE;    }

    while (1)    {        if(PeekMessage(&msg, NULL, 0,0,PM_NOREMOVE))        {            if(!GetMessage(&msg, NULL,0,0))                return msg.wParam;            TranslateMessage(&msg);            DispatchMessage(&msg);        }        else if(bActive)        {            fire(480, 0, 600, 50);            // draw fire on bottom row and then flip            while(1)            {                 ddrval = lpDDSPrimary->Flip(NULL, DDFLIP_WAIT);                if(ddrval == DD_OK)                {                    break;                }                if(ddrval == DDERR_SURFACELOST)                {                    if(ddrval != DD_OK)                    {                        break;                    }                }                if(ddrval != DDERR_WASSTILLDRAWING)                {                    break;                }             }         } // if bActive        else        {            //make sure we go to sleep if have nothiing to do            WaitMessage();        }    }

} // win main

//

//-----------------------------------------------------------------------------// Name: WinMain()// Desc: 入口,初始化,进行消息循环//-----------------------------------------------------------------------------int PASCALWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){    MSG msg;

    if (InitApp(hInstance, nCmdShow) != DD_OK)        return FALSE;

    Map[0].Width=width;    Map[0].Hight=height;    Map[0].Data=(char *)malloc( Map[0].Width * Map[0].Hight );    Map[0].Pro=(char *)malloc( Map[0].Width * Map[0].Hight );

    //将地图全部置为可到达    int i,j;    reachable=1;    for (j=0;j<Map[0].Hight;j++)        for (i=0;i<Map[0].Width;i++)        {            *(Map[0].Data+i*Map[0].Hight+j)=reachable;        }

    for (j=0;j<Map[0].Hight;j++)        for (i=0;i<Map[0].Width;i++)        {            *(Map[0].Pro+i*Map[0].Hight+j)=select_pro;        }

    //消息循环    while (GetMessage(&msg, NULL, 0, 0))    {        TranslateMessage(&msg);        DispatchMessage(&msg);    }

    return msg.wParam;}

//-----------------------------------------------------------------------------// Name: WinMain()// Desc: Entry point to the program. Initializes everything and calls// UpdateFrame() when idle from the message pump.//-----------------------------------------------------------------------------int APIENTRY WinMain( HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int nCmdShow ){    MSG msg;    HWND hWnd;

    ZeroMemory( &g_Sprite, sizeof(SPRITE_STRUCT) * NUM_SPRITES );    srand( GetTickCount() );

    if( FAILED( WinInit( hInst, nCmdShow, &hWnd ) ) )        return FALSE;

    // Make a timer go off to re-init the table of random values every once in a while    SetTimer( hWnd, 0, 1500, NULL );

    if( FAILED( InitDirectDraw( hWnd ) ) )    {        if( g_pDisplay )            g_pDisplay->GetDirectDraw()->SetCooperativeLevel( NULL, DDSCL_NORMAL );

        MessageBox( hWnd, TEXT("DirectDraw init failed. ")        TEXT("The sample will now exit. "), TEXT("DirectDraw Sample"),         MB_ICONERROR | MB_OK );        return FALSE;    }

    g_dwLastTick = timeGetTime();

    while( TRUE )    {        // Look for messages, if none are found then         // update the state and display it        if( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE ) )        {            if( 0 == GetMessage(&msg, NULL, 0, 0 ) )            {                // WM_QUIT was posted, so exit                return (int)msg.wParam;            }

            // Translate and dispatch the message            TranslateMessage( &msg );             DispatchMessage( &msg );        }        else        {            if( g_bActive )            {                // Move the sprites, blt them to the back buffer, then                 // flip or blt the back buffer to the primary buffer                if( FAILED( ProcessNextFrame() ) )                {                    SAFE_DELETE( g_pDisplay );

                    MessageBox( hWnd, TEXT("Displaying the next frame failed. ")                    TEXT("The sample will now exit. "), TEXT("DirectDraw Sample"),                     MB_ICONERROR | MB_OK );                    return FALSE;                }            }            else            {                // Make sure we go to sleep if we have nothing else to do                WaitMessage();

                // Ignore time spent inactive                 g_dwLastTick = timeGetTime();            }        }    }}

本人e-mail: fuzipin@sina,com希望通过交流进一步提高我们的游戏开发水平,OK   

 

转载于:https://www.cnblogs.com/3vgame/archive/2006/04/10/371778.html

相关资源:逐梦旅程 Windows游戏编程之从零开始 (书籍配套源代码 带高清书签目录)

最新回复(0)