网页功能: 加入收藏 设为首页 网站搜索  
C++源代码游戏编程--WinMain()函数集
发表日期:2007-01-17作者:[转贴] 出处:  

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 PASCAL
WinMain(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 PASCAL
WinMain(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
我来说两句】 【加入收藏】 【返加顶部】 【打印本页】 【关闭窗口
中搜索 C++源代码游戏编程--WinMain()函数集
本类热点文章
  脚本系统的实现
  C++基本功和 Design Pattern系列(2) Ty..
  C++基本功和 Design Pattern系列(1) - ..
  斜45度游戏开发(提高篇)
  睱酵笴栏祘Α砞璸?? - [秈顶絞]
  斜45度游戏开发(二)
  第一次写技术文献。Collision AI
  斜视角游戏中遮挡的判断
  C语言基本功教程系列(5) - 文件, Socke..
  用rand()和srand()产生伪随机数的方法总..
  C语言基本功教程系列(1)
  C++基本功和 Design Pattern系列(3) co..
最新分类信息我要发布 
最新招聘信息

关于我们 / 合作推广 / 给我留言 / 版权举报 / 意见建议 / 广告投放  
Copyright ©2003-2024 Lihuasoft.net webmaster(at)lihuasoft.net
网站编程QQ群   京ICP备05001064号 页面生成时间:0.01126