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

📄 main.cpp

📁 一个45度角场景RPG游戏程序的demo
💻 CPP
字号:
#include "main.h"

HWND hwnd;
bool ProgramActive;
bool MouseDown=false;
int GameStatus=0;
int mini;

unsigned char *LightTable;
unsigned char *BaseLight;
unsigned char *SmallLight;

int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	MSG msg;
	if (!CheckMMX( ))
	{
		MessageBox(hwnd,"你的CPU不支持MMX!", "ERROR!", MB_OK);
		return FALSE;
	}
	InitClass( );
	InitLight( );
	InitBlock( );
//	InitPAK( );
	if (!InitWindow( hInstance, nCmdShow ))
	{
		MessageBox(hwnd,"创建窗口出错!", "ERROR!", MB_OK);
		return FALSE;
	}
	int error_code=InitDDraw( );
	switch (error_code)
	{
	case 0:
		MessageBox(hwnd,"创建DDraw对象出错!", "ERROR!", MB_OK);
		break;
	case 1:
		MessageBox(hwnd,"设置DDraw协作级出错!", "ERROR!", MB_OK);
		break;
	case 2:
		MessageBox(hwnd,"进入640x480x32位色出错!", "ERROR!", MB_OK);
		break;
	case 3:
		MessageBox(hwnd,"创建主页面出错!", "ERROR!", MB_OK);
		break;
	case 4:
		MessageBox(hwnd,"创建缓冲页面出错!", "ERROR!", MB_OK);
		break;
	case 5:
		MessageBox(hwnd,"创建离屏页面出错!", "ERROR!", MB_OK);
		break;
	}
	if (error_code!=-1)
		return FALSE;
	InitSurface( );
	GetSurfaceData( );
	SetTimer(hwnd, 1, 50, GameTimer);
	while(1)
	{
		if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
		{
			if ( msg.message==WM_QUIT)
				break;
			TranslateMessage(&msg); 
			DispatchMessage(&msg);
		}
		else if ((ProgramActive)&&(GameStatus==1))
			RefreshScreen( );
	}
	return msg.wParam;
}

static BOOL InitWindow( HINSTANCE hInstance, int nCmdShow )
{
	WNDCLASS wc; 
	wc.style = NULL;
	wc.lpfnWndProc = (WNDPROC)WinProc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hInstance = hInstance;
	wc.hIcon = NULL;
	wc.hCursor = NULL;
	wc.hbrBackground = NULL;
	wc.lpszMenuName = NULL;
	wc.lpszClassName = "RPG_DEMO_II";
	RegisterClass(&wc);
	hwnd = CreateWindow("RPG_DEMO_II",
	"RPG DEMO II",
	WS_POPUP|WS_MAXIMIZE,0,0,
	GetSystemMetrics( SM_CXSCREEN ),
	GetSystemMetrics( SM_CYSCREEN ),
	NULL,NULL,hInstance,NULL);
	if( !hwnd ) return FALSE;
	ShowWindow(hwnd,nCmdShow);
	UpdateWindow(hwnd);
	return TRUE;
}

LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
	switch( message )
	{
	case WM_MOUSEMOVE:
		if ((MouseDown==true)&&(GameStatus==1)&&(human[main]->MainStatus!=talking))
		{
			if (human[main]->FollowID==-1)
				human[main]->moveto(LOWORD(lParam)-320+human[main]->x,HIWORD(lParam)-240+human[main]->y);
			else
			{
				mini=FoundHuman(LOWORD(lParam),HIWORD(lParam));
				if (mini!=human[main]->FollowID)//鼠标移出范围
				{
					human[main]->FollowID=-1;
					human[main]->moveto(LOWORD(lParam)-320+human[main]->x,HIWORD(lParam)-240+human[main]->y);
				}
			}
		}
		break;
    case WM_ACTIVATEAPP:
		ProgramActive=wParam;
		break;
	case WM_SETCURSOR:
		SetCursor(NULL);
		break;
	case WM_KEYDOWN:
		switch( wParam )
		{
		case VK_ESCAPE:
			Quit();
			break;
		}
		break;
	case WM_LBUTTONDOWN:
		MouseDown=true;
		if ((GameStatus==1)&&(human[main]->MainStatus!=away))
		{
			if (human[main]->MainStatus==talking)
			{
				human[main]->MainStatus=normal;
				human[human[main]->TalkID]->MainStatus=normal;
				human[human[main]->TalkID]->FootStatus=0;
				human[human[main]->TalkID]->moveto(human[human[main]->TalkID]->MoveToX,
				                                	human[human[main]->TalkID]->MoveToY);
			}
			else
			{
				mini=FoundHuman(LOWORD(lParam),HIWORD(lParam));
				if (mini<1)
				{
					human[main]->FollowID=-1;
					human[main]->MainStatus=normal;
					human[main]->moveto(LOWORD(lParam)-320+human[main]->x,HIWORD(lParam)-240+human[main]->y);
				}
				else
				{
					human[main]->FollowID=mini;
					if (human[mini]->type==TEnemy)
						human[main]->MainStatus=fighting;
					else
						human[main]->MainStatus=normal;
					human[main]->moveto(human[mini]->x,human[mini]->y);
				}
			}
		}
		break;
	case WM_LBUTTONUP:
		MouseDown=false;
		break;
	case WM_RBUTTONDOWN:
		if	( (GameStatus==1) &&
			( (human[main]->MainStatus==normal) ||
			( (human[main]->CoolDown==0) && (human[main]->MainStatus==fighting) ) ) )
		{
			human[main]->FootStatus=-1;
			human[main]->moveto(LOWORD(lParam)-320+human[main]->x,HIWORD(lParam)-240+human[main]->y);
			human[main]->FootStatus=-1;
			human[main]->MainStatus=fighting;
			human[main]->fight(LOWORD(lParam)-320+human[main]->x,HIWORD(lParam)-240+human[main]->y);
		}
		break;
	}
	return DefWindowProc(hWnd, message, wParam, lParam);
}

⌨️ 快捷键说明

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