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

📄 main.cpp

📁 MDEngine2plus游戏开发库! 用来开发游戏超级简单!
💻 CPP
字号:
//
//			Programed by Johnhans   (C)2004   All Rights Reserved!
//
//
#define WIN32_LEAN_AND_MEAN

#include <windows.h>
#include <stdio.h>
#include "..\..\Include\MD_Surface.h"
#include "..\..\Include\MD_File.h"

//--------------------------------------------------------------------
// 宏定义
//--------------------------------------------------------------------
#define NAME "MDEngine MDFile Test"

#define SAFE_DELETE(A)	if( (A) != NULL ) { delete [] (A); (A) = NULL; }

//-----------------------------------------------------------------------------
// 全局变量
//-----------------------------------------------------------------------------
CMD_Engine		Engine;
CMD_Surface		SurfaceA("JPGExt.igp");
CMD_Surface		SurfaceB;
CMD_Surface		SurfaceC;
CMD_File		Packfile;

BOOL			bActive;						//程序是否挂起
bool			RunGame=true;					//程序运行中

char*			content=NULL;


bool InitEngine(HWND hWnd);						//初始化引擎设备
void LoadSimpleFile();
void WriteSimpleFile();
void LoadPackedFile();
void LoadPackedFileDll();
void UpdateFrame();
void ShowText(char *con,DWORD len);
//-----------------------------------------------------------------------------
// Name: WindowProc()
// Desc: 主窗口消息处理
//-----------------------------------------------------------------------------
LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
    switch( message )
    {
    case WM_ACTIVATE:		//应用程序激活消息
		if(LOWORD(wParam)==WA_INACTIVE)
			bActive = false;
		else if(HIWORD(wParam))
		{
			bActive = false;
			return 0;
		}
		else
			bActive = true;
        return 0;

	case WM_SYSKEYDOWN:
		switch(wParam)
		{
			case VK_F4:
				RunGame=false;
				break;
			case 18:
				return 0;
		}
		break;

    case WM_SETCURSOR:
		SetCursor(LoadCursor(NULL, IDC_ARROW));
		return TRUE;

	case WM_SIZE:
	case WM_MOVE:
		Engine.CalcWindowPos();
		break;
	case WM_KEYDOWN:
		switch(wParam)
		{
        case VK_ESCAPE:
		case VK_F12:
			RunGame=false;
            break;
		}
		break;

    case WM_DESTROY:		//销毁窗口消息
        PostQuitMessage(0);
		RunGame=false;
        break;
    }
	//调用缺省的过程处理过程
    return DefWindowProc(hWnd, message, wParam, lParam);
}

//-----------------------------------------------------------------------------
// Name: WinMain()
// Desc: 初始化, 消息循环
//-----------------------------------------------------------------------------
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
    MSG msg;
    HWND hWnd;
    WNDCLASSEX wcex={0};

    //建立并注册窗口类
	wcex.cbSize=sizeof(WNDCLASSEX);
	wcex.style = CS_HREDRAW | CS_VREDRAW;
	wcex.lpfnWndProc = WinProc;
	wcex.hInstance=hInstance;
	wcex.lpszClassName = NAME;
	wcex.hbrBackground = (HBRUSH )GetStockObject(BLACK_BRUSH);
	wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
	wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);

	RegisterClassEx(&wcex);
    //创建窗口
    hWnd = CreateWindowEx(WS_EX_APPWINDOW,NAME,NAME,WS_OVERLAPPEDWINDOW | WS_VISIBLE,0,0,GetSystemMetrics(SM_CXSCREEN)/2,GetSystemMetrics(SM_CYSCREEN)/2,NULL,NULL,hInstance,NULL);
    if (!hWnd)
	{
		UnregisterClass(NAME,hInstance);
		MessageBox(hWnd,"程序主框架创建失败!",NAME,MB_OK);
        return FALSE;
	}

	if(!InitEngine(hWnd))
	{
		MessageBox(hWnd,"游戏引擎初始化失败!",NAME,MB_OK);
		return false;
	}

	// Main message loop:
	while(RunGame)
	{
		//如果有消息则截获它
		if(PeekMessage(&msg,hWnd,0,0,PM_REMOVE))
		{
			if(msg.message == WM_QUIT)
				RunGame=false;

			TranslateMessage(&msg);
			DispatchMessage(&msg);
		}
		else if(bActive)
		{
			UpdateFrame();
		}
	}

	SAFE_DELETE(content);
	return msg.wParam;
}

bool InitEngine(HWND hWnd)
{
	Packfile.EnableExt(true);
	if(!Engine.Create(hWnd,800,600,16,false)) return false;	// 设置显示模式

	if(!Packfile.Open("Picture.epk",true,true)) return false;	// 打开压缩包

	if(!Packfile.Locate("background.jpg")) return false;	// 打开压缩包下的background.jpg
	if(!Packfile.Read()) return false;		// 读取background.jpg内容到MDFile缓冲
	if(!SurfaceA.Create(Packfile.GetBuffer(),Packfile.GetBufferLength(),COLORKEY_NO)) return false;

	if(!Packfile.Locate("Alpha.bmp")) return false;
	if(!Packfile.Read()) return false;
	if(!SurfaceB.Create(Packfile.GetBuffer(),Packfile.GetBufferLength(),RGB(0,0,0))) return false;

	if(!Packfile.Locate("Sprite.bmp")) return false;
	if(!Packfile.Read()) return false;
	if(!SurfaceC.Create(Packfile.GetBuffer(),Packfile.GetBufferLength(),RGB(0,255,0))) return false;

	return true;
}

void UpdateFrame()
{
	static int ialpha=0,istep=2,iframe=0,ix=800;
	static DWORD itime=GetTickCount();

	SurfaceA.DrawFast(NULL,SUR_BACK,0,0,false);		// 绘制背景

	SurfaceB.DrawAlphaMMX(NULL,SUR_BACK,200,0,ialpha,true);	// 绘制半透明图片

	SurfaceC.SetBltRect(47*iframe,0,47*(iframe+1),78);	// 设置剪裁区域
	SurfaceC.DrawFast(NULL,SUR_BACK,ix,300,true);	// 绘制动画帧


// 计算Alpha值
	ialpha+=istep;
	if(ialpha>255)
	{
		ialpha = 255;
		istep = -istep;
	}
	else if(ialpha<0)
	{
		ialpha = 0;
		istep = -istep;
	}
// 计算Alpha结束

// 计算动画帧
	if(GetTickCount()-itime>100)
	{
		itime = GetTickCount();
		if(++iframe>9) iframe = 0;
		if((ix-=10)<0) ix=800;
	}
// 计算动画帧结束

	Engine.FlipScreen();
}

⌨️ 快捷键说明

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