亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gameengine.cpp

?? 該游戲的玩法是允許兩輛光束驅動的摩托車在游戲屏幕上行駛
?? CPP
字號:
//-----------------------------------------------------------------
// Game Engine Object
// C++ Source - GameEngine.cpp
//-----------------------------------------------------------------

//-----------------------------------------------------------------
// Include Files
//-----------------------------------------------------------------
#include "GameEngine.h"

//-----------------------------------------------------------------
// Static Variable Initialization
//-----------------------------------------------------------------
GameEngine *GameEngine::m_pGameEngine = NULL;

//-----------------------------------------------------------------
// Windows Functions
//-----------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  PSTR szCmdLine, int iCmdShow)
{
  MSG         msg;
  static int  iTickTrigger = 0;
  int         iTickCount;

  if (GameInitialize(hInstance))
  {
    // Initialize the game engine
    if (!GameEngine::GetEngine()->Initialize(iCmdShow))
      return FALSE;

    // Enter the main message loop
    while (TRUE)
    {
      if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
      {
        // Process the message
        if (msg.message == WM_QUIT)
          break;
        TranslateMessage(&msg);
        DispatchMessage(&msg);
      }
      else
      {
        // Make sure the game engine isn't sleeping
        if (!GameEngine::GetEngine()->GetSleep())
        {
          // Check the tick count to see if a game cycle has elapsed
          iTickCount = GetTickCount();
          if (iTickCount > iTickTrigger)
          {
            iTickTrigger = iTickCount +
              GameEngine::GetEngine()->GetFrameDelay();
            HandleKeys();
            GameEngine::GetEngine()->CheckJoystick();
            GameCycle();
          }
        }
      }
    }
    return (int)msg.wParam;
  }

  // End the game
  GameEnd();

  return TRUE;
}

LRESULT CALLBACK WndProc(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam)
{
  // Route all Windows messages to the game engine
  return GameEngine::GetEngine()->HandleEvent(hWindow, msg, wParam, lParam);
}

//-----------------------------------------------------------------
// GameEngine Constructor(s)/Destructor
//-----------------------------------------------------------------
GameEngine::GameEngine(HINSTANCE hInstance, LPTSTR szWindowClass,
  LPTSTR szTitle, WORD wIcon, WORD wSmallIcon, int iWidth, int iHeight)
{
  // Set the member variables for the game engine
  m_pGameEngine = this;
  m_hInstance = hInstance;
  m_hWindow = NULL;
  if (lstrlen(szWindowClass) > 0)
    lstrcpy(m_szWindowClass, szWindowClass);
  if (lstrlen(szTitle) > 0)
    lstrcpy(m_szTitle, szTitle);
  m_wIcon = wIcon;
  m_wSmallIcon = wSmallIcon;
  m_iWidth = iWidth;
  m_iHeight = iHeight;
  m_iFrameDelay = 50;   // 20 FPS default
  m_bSleep = TRUE;
  m_uiJoystickID = 0;
}

GameEngine::~GameEngine()
{
}

//-----------------------------------------------------------------
// Game Engine General Methods
//-----------------------------------------------------------------
BOOL GameEngine::Initialize(int iCmdShow)
{
  WNDCLASSEX    wndclass;

  // Create the window class for the main window
  wndclass.cbSize         = sizeof(wndclass);
  wndclass.style          = CS_HREDRAW | CS_VREDRAW;
  wndclass.lpfnWndProc    = WndProc;
  wndclass.cbClsExtra     = 0;
  wndclass.cbWndExtra     = 0;
  wndclass.hInstance      = m_hInstance;
  wndclass.hIcon          = LoadIcon(m_hInstance,
    MAKEINTRESOURCE(GetIcon()));
  wndclass.hIconSm        = LoadIcon(m_hInstance,
    MAKEINTRESOURCE(GetSmallIcon()));
  wndclass.hCursor        = LoadCursor(NULL, IDC_ARROW);
  wndclass.hbrBackground  = (HBRUSH)(COLOR_WINDOW + 1);
  wndclass.lpszMenuName   = NULL;
  wndclass.lpszClassName  = m_szWindowClass;

  // Register the window class
  if (!RegisterClassEx(&wndclass))
    return FALSE;

  // Calculate the window size and position based upon the game size
  int iWindowWidth = m_iWidth + GetSystemMetrics(SM_CXFIXEDFRAME) * 2,
      iWindowHeight = m_iHeight + GetSystemMetrics(SM_CYFIXEDFRAME) * 2 +
        GetSystemMetrics(SM_CYCAPTION);
  if (wndclass.lpszMenuName != NULL)
    iWindowHeight += GetSystemMetrics(SM_CYMENU);
  int iXWindowPos = (GetSystemMetrics(SM_CXSCREEN) - iWindowWidth) / 2,
      iYWindowPos = (GetSystemMetrics(SM_CYSCREEN) - iWindowHeight) / 2;

  // Create the window
  m_hWindow = CreateWindow(m_szWindowClass, m_szTitle, WS_POPUPWINDOW |
    WS_CAPTION | WS_MINIMIZEBOX, iXWindowPos, iYWindowPos, iWindowWidth,
    iWindowHeight, NULL, NULL, m_hInstance, NULL);
  if (!m_hWindow)
    return FALSE;

  // Show and update the window
  ShowWindow(m_hWindow, iCmdShow);
  UpdateWindow(m_hWindow);

  return TRUE;
}

LRESULT GameEngine::HandleEvent(HWND hWindow, UINT msg, WPARAM wParam, LPARAM lParam)
{
  // Route Windows messages to game engine member functions
  switch (msg)
  {
    case WM_CREATE:
      // Set the game window and start the game
      SetWindow(hWindow);
      GameStart(hWindow);
      return 0;

    case WM_SETFOCUS:
      // Activate the game and update the Sleep status
      GameActivate(hWindow);
      SetSleep(FALSE);
      return 0;

    case WM_KILLFOCUS:
      // Deactivate the game and update the Sleep status
      GameDeactivate(hWindow);
      SetSleep(TRUE);
      return 0;

    case WM_PAINT:
      HDC         hDC;
      PAINTSTRUCT ps;
      hDC = BeginPaint(hWindow, &ps);

      // Paint the game
      GamePaint(hDC);

      EndPaint(hWindow, &ps);
      return 0;

    case WM_LBUTTONDOWN:
      // Handle left mouse button press
      MouseButtonDown(LOWORD(lParam), HIWORD(lParam), TRUE);
      return 0;

    case WM_LBUTTONUP:
      // Handle left mouse button release
      MouseButtonUp(LOWORD(lParam), HIWORD(lParam), TRUE);
      return 0;

    case WM_RBUTTONDOWN:
      // Handle right mouse button press
      MouseButtonDown(LOWORD(lParam), HIWORD(lParam), FALSE);
      return 0;

    case WM_RBUTTONUP:
      // Handle right mouse button release
      MouseButtonUp(LOWORD(lParam), HIWORD(lParam), FALSE);
      return 0;

    case WM_MOUSEMOVE:
      // Handle mouse movement
      MouseMove(LOWORD(lParam), HIWORD(lParam));
      return 0;

    case WM_DESTROY:
      // End the game and exit the application
      GameEnd();
      PostQuitMessage(0);
      return 0;
  }
  return DefWindowProc(hWindow, msg, wParam, lParam);
}

void GameEngine::ErrorQuit(LPTSTR szErrorMsg)
{
  MessageBox(GetWindow(), szErrorMsg, TEXT("Critical Error"), MB_OK | MB_ICONERROR);
  PostQuitMessage(0);
}

BOOL GameEngine::InitJoystick()
{
  // Make sure joystick driver is present
  UINT uiNumJoysticks;
  if ((uiNumJoysticks = joyGetNumDevs()) == 0)
    return FALSE;

  // Make sure the joystick is attached
  JOYINFO jiInfo;
  if (joyGetPos(JOYSTICKID1, &jiInfo) != JOYERR_UNPLUGGED)
    m_uiJoystickID = JOYSTICKID1;
  else
    return FALSE;

  // Calculate the trip values
  JOYCAPS jcCaps;
  joyGetDevCaps(m_uiJoystickID, &jcCaps, sizeof(JOYCAPS));
  DWORD dwXCenter = ((DWORD)jcCaps.wXmin + jcCaps.wXmax) / 2;
  DWORD dwYCenter = ((DWORD)jcCaps.wYmin + jcCaps.wYmax) / 2;
  m_rcJoystickTrip.left = (jcCaps.wXmin + (WORD)dwXCenter) / 2;
  m_rcJoystickTrip.right = (jcCaps.wXmax + (WORD)dwXCenter) / 2;
  m_rcJoystickTrip.top = (jcCaps.wYmin + (WORD)dwYCenter) / 2;
  m_rcJoystickTrip.bottom = (jcCaps.wYmax + (WORD)dwYCenter) / 2;

  return TRUE;
}

void GameEngine::CaptureJoystick()
{
  // Capture the joystick
  if (m_uiJoystickID == JOYSTICKID1)
    joySetCapture(m_hWindow, m_uiJoystickID, NULL, TRUE);
}

void GameEngine::ReleaseJoystick()
{
  // Release the joystick
  if (m_uiJoystickID == JOYSTICKID1)
    joyReleaseCapture(m_uiJoystickID);
}

void GameEngine::CheckJoystick()
{
  if (m_uiJoystickID == JOYSTICKID1)
  {
    JOYINFO jiInfo;
    JOYSTATE jsJoystickState = 0;
    if (joyGetPos(m_uiJoystickID, &jiInfo) == JOYERR_NOERROR)
    {
      // Check horizontal movement
      if (jiInfo.wXpos < (WORD)m_rcJoystickTrip.left)
        jsJoystickState |= JOY_LEFT;
      else if (jiInfo.wXpos > (WORD)m_rcJoystickTrip.right)
        jsJoystickState |= JOY_RIGHT;

      // Check vertical movement
      if (jiInfo.wYpos < (WORD)m_rcJoystickTrip.top)
        jsJoystickState |= JOY_UP;
      else if (jiInfo.wYpos > (WORD)m_rcJoystickTrip.bottom)
        jsJoystickState |= JOY_DOWN;

      // Check buttons
      if(jiInfo.wButtons & JOY_BUTTON1)
        jsJoystickState |= JOY_FIRE1;
      if(jiInfo.wButtons & JOY_BUTTON2)
        jsJoystickState |= JOY_FIRE2;
    }

    // Allow the game to handle the joystick
    HandleJoystick(jsJoystickState);
  }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产丝袜在线精品| 日本一区二区成人在线| 国产成人精品亚洲午夜麻豆| 亚洲精品五月天| 日韩欧美黄色影院| 日本韩国一区二区| 国内精品写真在线观看| 天涯成人国产亚洲精品一区av| 国产欧美视频一区二区三区| 91精选在线观看| 在线这里只有精品| 成人爱爱电影网址| 国产在线精品免费av| 亚洲第一电影网| 亚洲另类在线一区| 国产精品美女久久久久aⅴ| 欧美一级在线观看| 精品视频在线看| 91网页版在线| 成人动漫视频在线| 成人性生交大片免费看视频在线 | 久久精品夜色噜噜亚洲a∨| 欧美日韩国产精选| 色噜噜狠狠成人中文综合| 国产成人av一区二区| 精品在线一区二区三区| 天天影视涩香欲综合网 | 狠狠色丁香久久婷婷综合_中| 性欧美大战久久久久久久久| 亚洲另类在线一区| 亚洲人成亚洲人成在线观看图片| 国产欧美日韩中文久久| 国产日本亚洲高清| 欧美国产乱子伦| 国产亚洲欧美中文| 中文字幕av一区 二区| 久久久久久久综合狠狠综合| 日韩免费在线观看| 日韩精品资源二区在线| 精品欧美乱码久久久久久| 欧美一二三区在线| 日韩一区二区三区视频在线观看| 91精品综合久久久久久| 精品三级在线看| 欧美mv日韩mv亚洲| 久久蜜桃一区二区| 国产精品狼人久久影院观看方式| 欧美激情一区三区| 中文字幕一区二区三区不卡| 日韩毛片精品高清免费| 亚洲女同一区二区| 亚洲一区二区三区四区在线免费观看| 一区二区三区日韩欧美| 亚洲成人资源网| 日韩精品免费专区| 久久99久久久久| 国产精品1区2区3区在线观看| 国产精品一二三| 成人av电影在线观看| 91福利在线导航| 欧美日韩久久一区| 亚洲精品一区二区三区蜜桃下载| 国产亚洲欧美日韩日本| 亚洲色图丝袜美腿| 日日噜噜夜夜狠狠视频欧美人 | 91精品国产综合久久久蜜臀图片 | 国产精品丝袜91| 亚洲蜜桃精久久久久久久| 亚洲成av人片| 国内精品写真在线观看| 成人精品免费网站| 精品视频999| 久久久久久亚洲综合影院红桃 | 欧美日韩一区国产| 精品国产污污免费网站入口| 国产欧美日韩麻豆91| 一区二区高清在线| 国产最新精品精品你懂的| www.av精品| 91精品国产色综合久久不卡蜜臀| 久久精品免视看| 一区二区三区国产精华| 久久国产视频网| 色噜噜偷拍精品综合在线| 7777精品伊人久久久大香线蕉完整版| 精品国产乱子伦一区| 亚洲乱码中文字幕| 国产毛片精品一区| 欧美中文字幕一区二区三区| 欧美v国产在线一区二区三区| 亚洲美女免费视频| 国产在线视频不卡二| 欧美日韩欧美一区二区| 久久久久久**毛片大全| 亚洲国产aⅴ天堂久久| 国产成人自拍高清视频在线免费播放| 欧美日韩综合在线免费观看| 国产精品婷婷午夜在线观看| 琪琪久久久久日韩精品| 91免费精品国自产拍在线不卡| 日韩欧美不卡一区| 午夜精品视频一区| 91在线播放网址| 久久久99精品免费观看不卡| 日韩在线一区二区三区| 色综合天天综合给合国产| 久久蜜臀精品av| 蜜桃视频在线观看一区| 欧美亚洲动漫另类| 18成人在线观看| 福利电影一区二区三区| 精品国产精品一区二区夜夜嗨| 亚洲高清视频中文字幕| 91视频com| 国产精品国产三级国产aⅴ入口| 免费成人在线观看视频| 欧美亚洲丝袜传媒另类| 亚洲视频你懂的| 成人黄色在线看| 国产视频一区在线观看 | 91国产丝袜在线播放| 国产欧美在线观看一区| 精品一区二区三区免费毛片爱 | 91在线精品一区二区三区| 久久精品这里都是精品| 老司机精品视频导航| 日韩一区二区免费电影| 丝袜美腿亚洲一区| 88在线观看91蜜桃国自产| 亚洲电影激情视频网站| 在线观看亚洲a| 亚洲一区av在线| 精品视频色一区| 视频一区二区中文字幕| 欧美视频一区在线观看| 亚洲国产乱码最新视频| 欧美日韩精品一二三区| 五月开心婷婷久久| 777久久久精品| 另类小说综合欧美亚洲| 日韩精品一区二区三区三区免费| 视频在线在亚洲| 日韩美女在线视频| 国产一区二区三区免费观看| 久久久久久免费网| 粉嫩aⅴ一区二区三区四区五区| 国产日韩欧美精品电影三级在线| 丁香婷婷综合色啪| 亚洲摸摸操操av| 欧美综合久久久| 日韩1区2区3区| 欧美精品一区二区三区视频| 国产成人精品亚洲午夜麻豆| 国产精品久久久久久福利一牛影视| 成人黄色电影在线 | 亚洲欧美日韩小说| 欧美日韩午夜在线视频| 久久精品免费看| 久久亚洲综合色一区二区三区| 成人精品免费视频| 亚洲综合一区二区| 欧美一级日韩免费不卡| 国产美女精品在线| 亚洲精品国产品国语在线app| 国产精品第13页| 99re亚洲国产精品| 亚洲va欧美va国产va天堂影院| 欧美大尺度电影在线| 国产成人亚洲综合a∨猫咪| 亚洲丝袜美腿综合| 7777精品伊人久久久大香线蕉完整版 | 国产一区在线不卡| 中文字幕一区视频| 6080午夜不卡| 高清在线成人网| 丝袜诱惑制服诱惑色一区在线观看| xfplay精品久久| 欧美专区在线观看一区| 国内精品免费在线观看| 尤物av一区二区| 日韩欧美久久久| 91麻豆免费观看| 久久福利视频一区二区| 亚洲人精品一区| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 亚洲欧美偷拍三级| 日韩欧美高清dvd碟片| 99久久国产综合精品麻豆| 日韩中文字幕区一区有砖一区| 国产精品污网站| 日韩视频一区二区三区| 91国在线观看| 国产91色综合久久免费分享| 亚洲成av人片观看| 亚洲欧洲日韩在线| 精品对白一区国产伦| 欧美精品在线一区二区| 91在线观看美女| 国产福利精品一区二区| 免费成人在线观看视频|