C++原始碼遊戲程式設計---WinMain()函式集(轉)

post0發表於2007-08-12
C++原始碼遊戲程式設計---WinMain()函式集(轉)[@more@]

  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  for (i=0;i  {

  *(Map[0].Data+i*Map[0].Hight+j)=reachable;

  }

  for (j=0;j  for (i=0;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();

  }

  }

  }

  

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-951669/,如需轉載,請註明出處,否則將追究法律責任。

相關文章