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

📄 engine.cpp

📁 Battle Balls v1.0 nice
💻 CPP
字号:
#include "engine.h"
#include "model.h"

CEngine::CEngine(void)
{
	d3d=0;
	Device=0;
	Width=900;
	Height=600;
	windowed=true;
	MenuSelect=0;
	Condition=0;
	MaxScore=5;
}

CEngine::~CEngine(void)
{
	if(Device)
		Device->Release();
	if(d3d)
		d3d->Release();
}

bool CEngine::InitD3D(HINSTANCE hInst)
{
	WNDCLASS wc;

	wc.style         = CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc   = (WNDPROC)WinProc; 
	wc.cbClsExtra    = 0;
	wc.cbWndExtra    = 0;
	wc.hInstance     = hInst;
	wc.hIcon         = LoadIcon(0, IDI_APPLICATION);
	wc.hCursor       = LoadCursor(0, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
	wc.lpszMenuName  = 0;
	wc.lpszClassName = "Battle Balls";

	if( !RegisterClass(&wc) ) 
		return false;
		
	HWND hwnd = 0;
	hwnd = CreateWindow("Battle Balls", "Battle Balls", 
		WS_EX_TOPMOST|WS_SYSMENU,
		0, 0, Width, Height,
		0 /*parent hwnd*/, 0 /* menu */, hInst, 0 /*extra*/); 

	if( !hwnd )
		return false;

	ShowWindow(hwnd, SW_SHOW);
	UpdateWindow(hwnd);

	d3d=Direct3DCreate9(D3D_SDK_VERSION);
	if(!d3d)
		return false;
	//set vertex processing mode
	D3DDISPLAYMODE d3ddm;
	if(FAILED(d3d->GetAdapterDisplayMode(D3DADAPTER_DEFAULT,&d3ddm)))
		return false;
	D3DCAPS9 caps;
	d3d->GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL, &caps);
	int vp = 0;
	if( caps.DevCaps & D3DDEVCAPS_HWTRANSFORMANDLIGHT )
		vp = D3DCREATE_HARDWARE_VERTEXPROCESSING;
	else
		vp = D3DCREATE_SOFTWARE_VERTEXPROCESSING;

	D3DPRESENT_PARAMETERS d3dpp;
	d3dpp.BackBufferWidth            = Width;
	d3dpp.BackBufferHeight           = Height;
	d3dpp.BackBufferCount            = 1;
	d3dpp.MultiSampleType            = D3DMULTISAMPLE_NONE;
	d3dpp.MultiSampleQuality         = 0;
	d3dpp.SwapEffect                 = D3DSWAPEFFECT_DISCARD; 
	d3dpp.hDeviceWindow              = hwnd;
	d3dpp.Windowed                   = windowed;
	d3dpp.EnableAutoDepthStencil     = true; 
	d3dpp.AutoDepthStencilFormat     = D3DFMT_D24S8;
	d3dpp.Flags                      = 0;
	d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
	d3dpp.PresentationInterval       = D3DPRESENT_INTERVAL_IMMEDIATE;
	if(depth==32)
		d3dpp.BackBufferFormat           = D3DFMT_A8R8G8B8;
	else
		d3dpp.BackBufferFormat           = D3DFMT_A4R4G4B4;

	if(FAILED(d3d->CreateDevice(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,hwnd,vp,&d3dpp,&Device)))
	{
		d3d->Release();
		return false;
	}
	return true;
}

void CEngine::GameLoop()
{
	MSG msg; 
    BOOL fMessage;
	static float lastTime = (float)timeGetTime(); 
    PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);
    
    while(msg.message != WM_QUIT)
    {
        fMessage = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);

        if(fMessage)
        {
            //Process message
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
        else
        {
            float currTime  = (float)timeGetTime();
			float timeDelta = (currTime - lastTime)*0.001f;

			ptr_display(timeDelta);

			lastTime = currTime;
        }

	}
}

void CEngine::InitText(ID3DXMesh **p_mesh,char *p_text)
{
	HDC hdc;
	HFONT font;
	hdc=CreateCompatibleDC(NULL);
	font=CreateFont(10,         //Height
                   0,          //Width
                   0,          //Escapement
                   0,          //Orientation
                   FW_NORMAL,  //Weight
                   false,      //Italic
                   false,      //Underline
                   false,      //Strikeout
                   DEFAULT_CHARSET,//Charset 
                   OUT_DEFAULT_PRECIS,  //Output Precision
                   CLIP_DEFAULT_PRECIS, //Clipping Precision
                   DEFAULT_QUALITY,     //Quality
                   DEFAULT_PITCH|FF_DONTCARE, //Pitch and Family
                   "Comic Sans MS");
	SelectObject(hdc, font);
	D3DXCreateText(Device,  //Device
                     hdc,          //GDI Device Context
                     p_text,        //Text 
                     0.001f,        //Maximum chordal deviation from true font outlines       
                     0.4f,          //Extrusion depth (along -Z axis)
                     p_mesh,        //Mesh
                     NULL,          //Adjacency information
                     NULL); 
   DeleteObject(font);
   DeleteDC(hdc);
}

⌨️ 快捷键说明

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