⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gameapp.cpp

📁 一个完整的2D滚屏游戏示例
💻 CPP
字号:
#include "stdafx.h"
#include "RESOURCE.h"
#include "game.h"
#include "define.h"

//Global Variables
HINSTANCE hInst;
HWND      hMainWnd;
TCHAR     szTitle[MAX_LOADSTRING];
TCHAR     szWindowClass[MAX_LOADSTRING];

/*/唯一的全局变量,游戏对象:/*/
CGame game;

/*/-/*/

//Forward declarations of functions included in this code module:
ATOM    MyRegisterClass(HINSTANCE hInstance);
BOOL    InitInstance(HINSTANCE,int); 
LRESULT CALLBACK GameProc(HWND,UINT,WPARAM,LPARAM);

int APIENTRY WinMain(HINSTANCE hInstance,
					 HINSTANCE hPrevInstance,
					 LPSTR     lpCmdline,
					 int       nCmdShow
					 )
{

MSG msg;
HACCEL hAccelTable;
//PAINTSTRUCT ps;
DWORD dwOldTime=0,//timeGetTime(),//时间控制;
      dwNewTime;

//Initialize global strings:
LoadString(hInstance,IDS_APP_TITLE,szTitle,MAX_LOADSTRING);
LoadString(hInstance,IDC_WNDCLASS_NAME,szWindowClass,MAX_LOADSTRING);

//Register application instance:
MyRegisterClass(hInstance);

//Perform application initialization:
if(!InitInstance(hInstance,nCmdShow))return false;
hAccelTable=LoadAccelerators(hInstance,(LPCTSTR)IDC_DDRAW01);

//BeginPaint(hMainWnd,&ps);//准备好画图环境。
//Main message loop:
	while(true)
	{  
		if(PeekMessage(&msg,NULL,0,0,PM_NOREMOVE))
		{  
		if(!GetMessage(&msg,NULL,0,0))return msg.wParam;
		TranslateMessage(&msg);
		DispatchMessage(&msg);
		}
		else 
			if(game.m_bActive&&(!game.m_bPaused))
			{
				dwNewTime=timeGetTime();
			    if((dwNewTime-dwOldTime)>=game.m_nSpeed)	
				{
				game.Run(msg);	
				dwOldTime=dwNewTime;
				}
		    }
			else
			{ 
			WaitMessage();
			}
	//game.m_MESSAGE=msg;  //以后改用钩子,快。put those message information into globalvar g_msgMyMessage; 
	}//End Main Message loop;
//EndPaint(hMainWnd,&ps);//还原画图环境。

return msg.wParam;
}


///////////////////////////////////////////////////////////////////////
//Function MyRegisterClass:
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASS wc;
wc.style        =CS_HREDRAW|CS_VREDRAW;
wc.lpfnWndProc  =(WNDPROC)GameProc;
wc.cbClsExtra   =0;
wc.cbWndExtra   =0;
wc.hInstance    =hInstance;
wc.hIcon        =LoadIcon(hInstance,(LPCTSTR)IDI_DDRAW01);
wc.hCursor      =LoadCursor(NULL,NULL);
wc.hbrBackground=NULL;
wc.lpszMenuName =szWindowClass;
wc.lpszClassName=szWindowClass;
return RegisterClass(&wc);
}

///////////////////////////////////////////////////////////////////////
//fuction InitInstance(HANDLE,int)
BOOL InitInstance(HINSTANCE hInstance,int nCmdShow)
{
HWND          hwnd;
hInst=hInstance;
hwnd=CreateWindowEx(WS_EX_TOPMOST,
				  szWindowClass,
				  szTitle,
				  WS_POPUP,
				  0,0,
				  GetSystemMetrics(SM_CXSCREEN),GetSystemMetrics(SM_CXSCREEN),
				  NULL,NULL,
				  hInstance,
				  NULL);

if(!hwnd)return false;

ShowWindow(hwnd,nCmdShow);
UpdateWindow(hwnd);

hMainWnd=hwnd;

//声音文件录入:
int nSoundNum[DSOUND_MAX_NUM]={0};
LPCSTR szWaves[STAGE_MAX_NUM][DSOUND_MAX_NUM];//={""};

//szWaves[0][0]=(LPTSTR)IDR_WAVE_MAIN;//"main.wav";
//szWaves[0][1]=(LPTSTR)IDR_WAVE_FIRE_BH;//"fireBH.wav";
//szWaves[0][2]=(LPTSTR)IDR_WAVE_DYING;//"dying.wav";
szWaves[0][0]="sound//main.wav";
szWaves[0][1]="sound//fireBH.wav";
szWaves[0][2]="sound//dying.wav";
nSoundNum[0]=3;

////
//szWaves[1][0]=(LPTSTR)IDR_WAVE_FIRE_BH;//"fireBH.wav";
szWaves[1][0]="sound//fireBH.wav";
nSoundNum[1]=1;
//szWaves[2][0]=(LPTSTR)IDR_WAVE_MAIN;//"main.wav";
szWaves[2][0]="sound//main.wav";
nSoundNum[2]=1;
////

//Initialize Game Objects:
if(!game.Initialize(hwnd,(LPTSTR)IDB_BEGIN,szWaves,nSoundNum,3))return false;

return true;
}

///////////////////////////////////////////////////////////////////////
//Function GameProc(HWND,unsigned,WORD,LONG)
LRESULT CALLBACK GameProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
//static BYTE phase;
PAINTSTRUCT ps;

	switch(message)
	{
	case WM_ACTIVATEAPP:game.m_bActive=wParam;
		                if(game.m_bActive)
						{
						if(game.m_DI.m_lpDID_Mouse)game.m_DI.m_lpDID_Mouse->Acquire();
						if(game.m_DI.m_lpDID_Keyboard)game.m_DI.m_lpDID_Keyboard->Acquire();
						}
						else
						{
						if(game.m_DI.m_lpDID_Mouse)game.m_DI.m_lpDID_Mouse->Unacquire();
						if(game.m_DI.m_lpDID_Keyboard)game.m_DI.m_lpDID_Keyboard->Unacquire();
						}
						break;
	case      WM_CREATE:break;      
	case   WM_SETCURSOR:SetCursor(NULL);
					    return true;
	case       WM_PAINT:BeginPaint(hWnd,&ps);
	                    EndPaint(hWnd,&ps);
	                    break;
	case     WM_KEYDOWN:switch(wParam)
						{
                        case       VK_F2:if(game.m_bPaused)game.m_bPaused=false;
							              else game.m_bPaused=true;
										  break;
						case    VK_ESCAPE:if(game.m_pBeginPage!=NULL||game.m_pScorePage!=NULL)PostMessage(hWnd,WM_CLOSE,0,0);break;
					    case       VK_F12:PostMessage(hWnd,WM_CLOSE,0,0);break;
						}//end switch(wParam)    
					    break;
	case     WM_DESTROY:game.Destroy();
					    PostQuitMessage(0);
					    break;
	default:return DefWindowProc(hWnd,message,wParam,lParam);  
	}

return false;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -