/* * ProcessInput */ BOOL ProcessInput( SHORT input ) { static BOOL fBearPlaying = FALSE; LONG foxSpeedX; LONG foxSpeedY; LONG foxX; LONG foxY; LONG bearX; LONG bearY; LONG appleX; LONG appleY; ACTION foxAction; DIRECTION foxDir; BOOL cont = TRUE;
考虑到每一个战斗单位(或每一颗子弹)都有相似(或相同)的属性,那么我们可以采用结构数组来储存每一个战斗单位的位置和状态。这个办法好象可行!但是仔细想想,我们又遇到了上面谈到的问题我们并不知道游戏者会一次发射多少颗子弹也不知道游戏者会造多少个战斗单位。当然我们可以采用Age of Empire的方式----限制单位的数量(我并不是说Age of Empire采用的是这种办法)。但是这意味什么呢!意味着,如果我们限定数量为50的话,在游戏者只有一个士兵时,计算机却需要为这个士兵分配50倍的内存!而且游戏者还不一定造出50个士兵。显然这并不是一个好办法!
IDirectDrawSurface_Blt( lpBackBuffer, // dest surface NULL, // dest rect NULL, // src surface NULL, // src rect DDBLT_COLORFILL | DDBLT_WAIT, &ddbltfx);
} /* gfxFillBack */
2。检查游戏单元图形的Surface是否丢失;
这是检查游戏单元图形的Surface是否丢失的函数: /* * gfxRestoreAll * * restore the art when one or more surfaces are lost */ BOOL gfxRestoreAll() { GFX_BITMAP *curr; HWND hwndF = GetForegroundWindow();
ddrval = IDirectDrawSurface_Blt( lpFrontBuffer, // dest surface &rcWindow, // dest rect lpBackBuffer, // src surface NULL, // src rect (all of it) DDBLT_WAIT, NULL);
case WM_KEYDOWN: switch( wParam ) { case VK_NUMPAD5: lastInput=KEY_STOP; break; case VK_DOWN: case VK_NUMPAD2: lastInput=KEY_DOWN; break; case VK_LEFT: case VK_NUMPAD4: lastInput=KEY_LEFT; break; case VK_RIGHT: case VK_NUMPAD6: lastInput=KEY_RIGHT; break; case VK_UP: case VK_NUMPAD8: lastInput=KEY_UP; break; case VK_HOME: case VK_NUMPAD7: lastInput=KEY_JUMP; break; case VK_NUMPAD3: lastInput=KEY_THROW; break; case VK_F5: bShowFrameCount = !bShowFrameCount; if( bShowFrameCount ) { dwFrameCount = 0; dwFrameTime = timeGetTime(); } break;