📄 piratemain.cpp
字号:
/**************************************************************************************
Project Name : Pirates Of The Caribbean
Module Name : Win Main
File Name : PirateMain.cpp
Create : 2007-7-13, by Vigame
Completed :
Update :
Copyright : o(∩_∩)o
Reference :
Abstrct : You may do whatever you want with this code, as long as
you include this copyright notice in your implementation
files.Comments and bug Reports: vigor1985@gmail.com,
QQ:15061260, I'll right here wait for you, ^_^
by Vigame, 2007-7-12
**************************************************************************************/
#include <windows.h>
#include "resource.h"
#include "Game.h"
const int WIDTH = 960;
const int HEIGHT = 540;
bool g_bActive = false;
CGame *g_pGame = NULL;
HINSTANCE hInst = NULL;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
BOOL CALLBACK HelpProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam);
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
char ClassName[] = "pirate";
char WindowName[] = "Pirates of the Caribbean";
WNDCLASSEX wc;
HWND hWnd;
MSG msg;
hInst = hInstance;
// Register
wc.cbClsExtra = 0;
wc.cbSize = sizeof(WNDCLASSEX);
wc.cbWndExtra = 0;
wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wc.hCursor = (HCURSOR)::LoadCursor(NULL, IDC_ARROW);
wc.hIcon = ::LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
wc.hIconSm = ::LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
wc.hInstance = hInstance;
wc.lpfnWndProc = WndProc;
wc.lpszClassName = ClassName;
wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU1);
wc.style = CS_VREDRAW | CS_HREDRAW | CS_OWNDC;
if (0 == RegisterClassEx(&wc))
{
return -1;
}
// Create Window
hWnd = ::CreateWindowEx(NULL, ClassName, WindowName,
WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX,
(GetSystemMetrics(SM_CXFULLSCREEN) - WIDTH) / 2,
(GetSystemMetrics(SM_CYFULLSCREEN) - HEIGHT) / 2,
WIDTH, HEIGHT + 100, NULL, NULL, hInstance, NULL);
if (NULL == hWnd)
{
return -1;
}
// Show Window
::ShowWindow(hWnd, SW_SHOWDEFAULT);
::UpdateWindow(hWnd);
//Init Game
g_pGame = new CGame;
if (NULL != g_pGame)
{
if (!g_pGame->Init(hWnd, hInstance))
{
g_pGame->m_gameType = GT_SinglePlayer;
return -1;
}
}
// Message loop
::PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
while (msg.message != WM_QUIT)
{
if(::PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{
// Process message
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
else if(GS_Run == g_pGame->m_gameState)
{
// Game loop
g_pGame->Run();
g_pGame->Render();
}
else if (GS_Title == g_pGame->m_gameState)
{
g_pGame->DrawGameState(0);
}
else if (GS_Over == g_pGame->m_gameState)
{
g_pGame->DrawGameState(1);
}
}
// Release Game resources.
SAFE_DELETE(g_pGame);
UnregisterClass(ClassName,hInstance);
return (int)msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_KEYDOWN:
switch (wParam)
{
case VK_RETURN:
{
if (NULL != g_pGame)
{
if (GS_Title == g_pGame->m_gameState)
{
g_pGame->ResetGame();
g_pGame->m_gameState = GS_Run;
}
}
}
break;
default:
break;
}
case WM_COMMAND: // Process menu command
{
if (NULL != g_pGame)
{
switch (LOWORD(wParam))
{
case START_GAME:
{
g_pGame->ResetGame();
g_pGame->m_gameState = GS_Run;
break;
}
case RESET_GAME:
{
g_pGame->ResetGame();
g_pGame->m_gameState = GS_Run;
break;
}
case LOAD_MAP:
{
if (g_pGame->LoadMap())
{
g_pGame->ResetMap();
g_pGame->m_gameState = GS_Run;
}
break;
}
case EXIT_GAME:
{
PostQuitMessage(0);
break;
}
case SINGLE_MODE:
{
g_pGame->m_gameType = GT_SinglePlayer;
break;
}
case MULTI_MODE:
{
g_pGame->m_gameType = GT_MultiPlayer;
break;
}
case FREEFORALL_MODE:
{
g_pGame->m_gameType = GT_FreeForAll;
break;
}
case LOAD_MUSIC:
{
g_pGame->LoadBackgroundMusic();
break;
}
case STOP_MUSIC:
{
g_pGame->StopBackgroundMusic();
break;
}
case HELP:
{
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG_HELP),
hWnd, (DLGPROC)HelpProc);
break;
}
case ABOUT:
{
DialogBox(hInst, MAKEINTRESOURCE(IDD_DIALOG_ABOUT),
hWnd, (DLGPROC)HelpProc);
break;
}
} // End switch (LOWORD(wParam))
} // End if
}
case WM_GRAPHNOTIFY: // Message private
{
if (NULL != g_pGame)
{
// Replay backgroun music
/* DELETE by Vigame, 2007-7-27, use the CGame::ProcessEvent()
Function to process the event
LONG eventCode;
LONG param1, param2;
while (SUCCEEDED(g_pGame->m_pMp3->GetEvnetInterface()->GetEvent(&eventCode, ¶m1, ¶m2, 0)))
{
g_pGame->m_pMp3->GetEvnetInterface()->FreeEventParams(eventCode, param1, param2);
if (EC_COMPLETE == eventCode )
{
g_pGame->PlayBackgroundMusic();
break;
}
}*/
g_pGame->ProcessEvent();
}
break;
}
case WM_MOVE:
break;
case WM_SIZE:
break;
case WM_PAINT:
{
if (NULL != g_pGame)
{
if (GS_Run == g_pGame->m_gameState)
{
g_pGame->Render();
}
else if (GS_Title == g_pGame->m_gameState)
{
g_pGame->DrawGameState(0);
}
else if (GS_Over == g_pGame->m_gameState)
{
g_pGame->DrawGameState(1);
}
}
break;
}
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
BOOL CALLBACK HelpProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
{
EndDialog(hwndDlg, wParam);
break;
}
default:
break;
}
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -