C++源代码游戏编程--WinMain()函数集.doc
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; Map0.Width=width; Map0.Hight=height; Map0.Data=(char *)malloc( Map0.Width * Map0.Hight ); Map0.Pro=(char *)malloc( Map0.Width * Map0.Hight ); /将地图全部置为可到达 int i,j; reachable=1; for (j=0;j<Map0.Hight;j+) for (i=0;i<Map0.Width;i+) *(Map0.Data+i*Map0.Hight+j)=reachable; for (j=0;j<Map0.Hight;j+) for (i=0;i<Map0.Width;i+) *(Map0.Pro+i*Map0.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: fuzipinsina,com希望通过交流进一步提高我们的游戏开发水平,OK