亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hge_tut06.cpp

?? 一個利用hge游戲引擎
?? CPP
字號:
////  http://dotlive.cnblogs.com/ 

#include "include\hge.h"
#include "include\hgefont.h"
#include "include\hgegui.h"
#include <math.h>

#include "menuitem.h"
#include "TetrisLogic.h"

//////////////////////////////////////////////////////////////////////////
// Game Data
int g_nGamestatue = 0;// 0  1  2
// hgeQuad				quadStage;
TetrisLogic* g_pGameLogic;
//////////////////////////////////////////////////////////////////////////


// Pointer to the HGE interface.
// Helper classes require this to work.
HGE *hge=0;

// Some resource handles
HEFFECT				snd;
HTEXTURE			tex;
hgeQuad				quad;

// Pointers to the HGE objects we will use
hgeGUI				*gui;
hgeFont				*fnt;
hgeSprite			*spr;
#define OFFX 250
#define OFFY 50
#define BOXW 15
hgeQuad quadCell;
class IGE_HEGImp : public IGameEngine
{
public:
	IGE_HEGImp(HGE *pHge);
	virtual void IGE_DrawABoxCell( int x,int y,DWORD color,int id );
	virtual void IGE_DrawText( int x,int y,DWORD c,const char* pStr );
	virtual int IGE_GetRandomInt( int min, int max );

protected:
	HGE *m_pHge;

};

IGE_HEGImp::IGE_HEGImp( HGE *pHge ) :m_pHge(pHge)
{
	quadCell.blend = BLEND_ALPHABLEND | BLEND_COLORMUL | BLEND_ZWRITE;
	for(int i=0;i<4;i++)
	{
		quadCell.v[i].z=0.15f;
		quadCell.v[i].col=0xFF0000FF;
	}
}

void IGE_HEGImp::IGE_DrawABoxCell( int x,int y,DWORD color,int id ) 
{
	x++;
	y++;
	quadCell.v[0].x=OFFX+x*BOXW; quadCell.v[0].y=OFFY+y*BOXW; 
	quadCell.v[1].x=OFFX+(x+1)*BOXW; quadCell.v[1].y=OFFY+y*BOXW; 
	quadCell.v[2].x=OFFX+(x+1)*BOXW; quadCell.v[2].y=OFFY+(y+1)*BOXW; 
	quadCell.v[3].x=OFFX+x*BOXW; quadCell.v[3].y=OFFY+(y+1)*BOXW; 
	for (int i=0;i<4;i++)
	{
		quadCell.v[i].col = color;
	}
	m_pHge->Gfx_RenderQuad(&quadCell);
}

void IGE_HEGImp::IGE_DrawText( int x,int y,DWORD c,const char* pStr ) 
{
	fnt->SetColor(c);
	fnt->printf(OFFX+x*BOXW,OFFY+y*BOXW, HGETEXT_LEFT, pStr);
}

int IGE_HEGImp::IGE_GetRandomInt( int min, int max ) 
{
	return m_pHge->Random_Int(min,max);
}

bool MenuFrameFunc()
{
	float dt=hge->Timer_GetDelta();
	int id;
	static int lastid=0;

	// If ESCAPE was pressed, tell the GUI to finish
//	if(hge->Input_GetKeyState(HGEK_ESCAPE)) 
	if (hge->Input_GetKey()==HGEK_ESCAPE)
	{
		lastid=5; 
		gui->Leave();
	}

	// We update the GUI and take an action if
	// one of the menu items was selected
	id=gui->Update(dt);
	if(id == -1)
	{
		switch(lastid)
		{
		case 1:
			g_nGamestatue = 1;
			g_pGameLogic->Init();
			gui->SetFocus(1);
			gui->Enter();
			break;
		case 2:
		case 3:
		case 4:
			g_nGamestatue = 0;
			gui->SetFocus(1);
			gui->Enter();
			break;
			
		case 5: return true;
		}
	}
	else if(id) { lastid=id; gui->Leave(); }
	
	return false;
}

int GetTLKey( int HGEKeyCode )
{
	int nTLKeyCode = 0;
	switch(hge->Input_GetKey())
	{
	case HGEK_RIGHT:
		nTLKeyCode = TetrisLogic::KeyRight;
		break;
	case HGEK_LEFT:
		nTLKeyCode = TetrisLogic::KeyLeft;
		break;
	case HGEK_DOWN:
		nTLKeyCode = TetrisLogic::KeyDown;
		break;
	case HGEK_ENTER:
		nTLKeyCode = TetrisLogic::KeyTurn;
		break;
	case HGEK_ESCAPE:
		nTLKeyCode = TetrisLogic::KeyEsc;
		break;
	default:
		nTLKeyCode = TetrisLogic::KeyNothing;
		break;
	}

	return nTLKeyCode;
}

bool GamePlayFrameFunc()
{
//	if(hge->Input_GetKeyState(HGEK_ENTER)) {
//		g_nGamestatue = 0;
//	}

	float dt=hge->Timer_GetDelta();
	g_pGameLogic->GameStep(dt);
	g_pGameLogic->GameInput( GetTLKey(hge->Input_GetKey()) );

	// Process keys
	int i=0;
	switch(hge->Input_GetKey())
	{
	case HGEK_ESCAPE:
			g_nGamestatue = 0;
			break;
// 		
// 	case HGEK_RIGHT:
// 		for(i=0;i<4;i++)
// 			quadStage.v[i].x += speed;
// 		break;
// 	case HGEK_LEFT:
// 		for(i=0;i<4;i++)
// 			quadStage.v[i].x -= speed;
// 		break;
// 	case HGEK_DOWN:
// 		for(i=0;i<4;i++)
// 			quadStage.v[i].y += speed;
// 		break;
// 	case HGEK_UP:
// 		for(int i=0;i<4;i++)
// 			quadStage.v[i].y -= speed;
// 		break;
	}
	
	return false;
}

bool FrameFunc()
{
	float dt=hge->Timer_GetDelta();
	static float t=0.0f;
	float tx,ty;
	bool bRet = false;
	
	switch(g_nGamestatue)
	{
	case 0:
		bRet = MenuFrameFunc();
		break;
	case 1:
		bRet = GamePlayFrameFunc();
		break;
// 	case 2:		
// 		break;
	default:
		;
	}

	// Here we update our background animation
	t+=dt;
	tx=50*cosf(t/60);
	ty=50*sinf(t/60);

	quad.v[0].tx=tx;        quad.v[0].ty=ty;
	quad.v[1].tx=tx+800/64; quad.v[1].ty=ty;
	quad.v[2].tx=tx+800/64; quad.v[2].ty=ty+600/64;
	quad.v[3].tx=tx;        quad.v[3].ty=ty+600/64;

	return bRet;
}

void PrintLogo()
{
	fnt->SetColor(0xFFFFFFFF);
	fnt->printf(575, 572, HGETEXT_LEFT, "dotlive.cnblogs.com");
}

bool GamePlayRenderFunc()
{
//	hge->Gfx_RenderQuad(&quadStage);
	fnt->SetColor(0xFFFFFFFF);
	fnt->printf(5, 5, HGETEXT_LEFT, "dt:%.3f\nFPS:%d", hge->Timer_GetDelta(), hge->Timer_GetFPS());
	TetrisBox stFallingBox = g_pGameLogic->GetFallingBox();

//	PrintLogo();

	g_pGameLogic->Render();

//	hge->Gfx_RenderQuad();

	return false;
}

bool RenderFunc()
{
	// Render graphics
	hge->Gfx_BeginScene();

//	hge->Gfx_RenderQuad(&quad);
	hge->Gfx_Clear(0);
	switch(g_nGamestatue)
	{
		case 0:
			gui->Render();
			break;
		case 1:
			GamePlayRenderFunc();
//			gui->Render();
			break;
// 		case 2:
// 
// 			break;
		default:
			;
	}

	PrintLogo();

	hge->Gfx_EndScene();
	return false;
}


int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
	int i=0;

	hge = hgeCreate(HGE_VERSION);

	hge->System_SetState(HGE_LOGFILE, "hge_tut06.log");
	hge->System_SetState(HGE_FRAMEFUNC, FrameFunc);
	hge->System_SetState(HGE_RENDERFUNC, RenderFunc);
	hge->System_SetState(HGE_TITLE, "HGE Tutorial 06 - Creating menus");
	hge->System_SetState(HGE_WINDOWED, true);
	hge->System_SetState(HGE_SCREENWIDTH, 800);
	hge->System_SetState(HGE_SCREENHEIGHT, 600);
	hge->System_SetState(HGE_SCREENBPP, 32);
	hge->System_SetState(HGE_FPS, 20);

//	hge->System_Initiate();

	if(hge->System_Initiate())
	{
// 		quadStage.tex = hge->Texture_Load("bg2.png");
// 		if(!quadStage.tex)
// 		{
// 			return 0;
// 		}
// 		quadStage.blend = BLEND_ALPHABLEND | BLEND_COLORMUL | BLEND_ZWRITE;
// 		for(i=0;i<4;i++)
// 		{
// 			// Set up z-coordinate of vertices
// 			quadStage.v[i].z=0.15f;
// 			// Set up color. The format of DWORD col is 0xAARRGGBB
// 			// quadStage.v[i].col=0xFFFFFFFF;
// 			quadStage.v[i].col=0xFFFFFFFF;
// 		}
// 		quadStage.v[0].x=250; quadStage.v[0].y=50;
// 		quadStage.v[1].x=550; quadStage.v[1].y=50; 
// 		quadStage.v[2].x=550; quadStage.v[2].y=550;
// 		quadStage.v[3].x=250; quadStage.v[3].y=550; 
// 		quadStage.v[0].tx=0;       quadStage.v[0].ty=0;
// 		quadStage.v[1].tx=300/64;		  quadStage.v[1].ty=0;
// 		quadStage.v[2].tx=300/64; 	  quadStage.v[2].ty=500/64;
// 		quadStage.v[3].tx=0;       quadStage.v[3].ty=500/64;


		// Load sound and textures
		quad.tex=hge->Texture_Load("bg.png");
		tex=hge->Texture_Load("cursor.png");
		snd=hge->Effect_Load("menu.wav");
		if(!quad.tex || !tex || !snd)
		{
			// If one of the data files is not found, display
			// an error message and shutdown.
			MessageBox(NULL, "Can't load BG.PNG, CURSOR.PNG or MENU.WAV", "Error", MB_OK | MB_ICONERROR | MB_APPLMODAL);
			hge->System_Shutdown();
			hge->Release();
			return 0;
		}

		// Set up the quad we will use for background animation
		quad.blend=BLEND_ALPHABLEND | BLEND_COLORMUL | BLEND_NOZWRITE;

		for(i=0;i<4;i++)
		{
			// Set up z-coordinate of vertices
			quad.v[i].z=0.5f;
			// Set up color. The format of DWORD col is 0xAARRGGBB
			quad.v[i].col=0xFFFFFFFF;
		}

		quad.v[0].x=0; quad.v[0].y=0; 
		quad.v[1].x=800; quad.v[1].y=0; 
		quad.v[2].x=800; quad.v[2].y=600; 
		quad.v[3].x=0; quad.v[3].y=600; 


		// Load the font, create the cursor sprite
		fnt=new hgeFont("font1.fnt");
		spr=new hgeSprite(tex,0,0,32,32);

		// Create and initialize the GUI
		gui=new hgeGUI();

		gui->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Play"));
		gui->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,"Options"));
		gui->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,"Instructions"));
		gui->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,320,0.3f,"Credits"));
		gui->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,360,0.4f,"Exit"));

		gui->SetNavMode(HGEGUI_UPDOWN | HGEGUI_CYCLED);
		gui->SetCursor(spr);
		gui->SetFocus(1);
		gui->Enter();

		IGameEngine* pGE = new IGE_HEGImp(hge);
		g_pGameLogic = new TetrisLogic (pGE);

		// Let's rock now!
		hge->System_Start();

		delete g_pGameLogic;
		delete pGE;

		// Delete created objects and free loaded resources
		delete gui;
		delete fnt;
		delete spr;
		hge->Effect_Free(snd);
		hge->Texture_Free(tex);
		hge->Texture_Free(quad.tex);
// 		hge->Texture_Free(quadStage.tex);
	}
/**/
	// Clean up and shutdown
	hge->System_Shutdown();
	hge->Release();
	return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品午夜久久| 欧美精品 国产精品| 国产日韩精品一区| 国产综合色在线| 国产天堂亚洲国产碰碰| 成人一区在线观看| 亚洲欧美激情一区二区| 欧美性大战久久| 综合久久久久久久| 欧美日韩国产bt| 久久国产精品区| 日本一区免费视频| 欧美综合天天夜夜久久| 日韩成人免费在线| 久久久国产综合精品女国产盗摄| 成人白浆超碰人人人人| 亚洲另类中文字| 日韩欧美国产综合| 99国产欧美另类久久久精品| 一区二区三区蜜桃| 精品剧情v国产在线观看在线| 国产成人免费9x9x人网站视频| 亚洲天堂2016| 日韩欧美综合一区| 99久久久国产精品| 蜜臀久久99精品久久久久久9| 国产婷婷精品av在线| 在线精品亚洲一区二区不卡| 免费观看一级欧美片| 国产精品国产三级国产aⅴ中文| 在线看日本不卡| 国产成人久久精品77777最新版本| 一区二区三区在线免费观看| 精品久久五月天| 色94色欧美sute亚洲线路二| 看电影不卡的网站| 亚洲成人一二三| 国产精品色哟哟网站| 欧美一级专区免费大片| 99re这里都是精品| 国产伦精一区二区三区| 午夜一区二区三区视频| 中文字幕第一区综合| 在线电影院国产精品| 色综合久久久久久久久久久| 久久99国产精品尤物| 亚洲成人综合网站| 亚洲天堂av一区| 国产欧美日韩视频在线观看| 正在播放亚洲一区| 欧美中文字幕久久| 成人av电影在线观看| 久久66热re国产| 青青草国产成人99久久| 亚洲国产精品影院| 亚洲欧美日韩成人高清在线一区| 国产亚洲成av人在线观看导航| 欧美一区在线视频| 欧美日韩国产高清一区二区三区 | 六月丁香婷婷色狠狠久久| 亚洲免费观看在线视频| 国产女同互慰高潮91漫画| 欧美成人aa大片| 777亚洲妇女| 欧美日韩一区不卡| 精品视频一区二区不卡| 日本韩国一区二区三区| 91视频国产观看| 成人精品国产一区二区4080| 国产成人免费在线观看| 国产91在线|亚洲| 国产精品综合av一区二区国产馆| 久久疯狂做爰流白浆xx| 男人的天堂亚洲一区| 日本vs亚洲vs韩国一区三区二区 | 日韩精品1区2区3区| 婷婷成人综合网| 亚洲成av人片一区二区| 亚洲精品va在线观看| 一区二区三区精品在线| 曰韩精品一区二区| 亚洲福利国产精品| 美日韩一区二区| 久久精品国产精品亚洲综合| 久久99精品久久久| 国产丶欧美丶日本不卡视频| 岛国一区二区在线观看| 99久久国产免费看| 色婷婷综合久久| 欧美美女喷水视频| 国产女同性恋一区二区| 在线观看区一区二| 欧美视频在线一区二区三区 | 欧美日韩一卡二卡| 欧美精品在线观看一区二区| 欧美一区二区三区精品| 欧美精品一区二区久久婷婷| 国产日韩欧美精品一区| 国产精品不卡视频| 亚洲综合成人在线视频| 人妖欧美一区二区| 国产真实乱偷精品视频免| 丁香五精品蜜臀久久久久99网站| 91婷婷韩国欧美一区二区| 欧美日韩一区二区电影| www国产精品av| 亚洲视频一区二区免费在线观看| 亚洲综合男人的天堂| 久久精品国产精品青草| 成人av在线观| 欧美精品粉嫩高潮一区二区| 久久久久久一级片| 亚洲一区二区三区四区中文字幕| 老司机午夜精品99久久| 波多野结衣91| 日韩一卡二卡三卡四卡| 国产精品久久久久久久久晋中| 亚洲午夜精品一区二区三区他趣| 秋霞午夜av一区二区三区| 成人福利视频网站| 91麻豆精品国产91久久久使用方法| 26uuu另类欧美亚洲曰本| 一区二区三区精品久久久| 精品一区二区三区的国产在线播放| 成人性生交大片免费看中文网站| 欧美日韩精品一二三区| 国产视频一区在线播放| 日韩专区中文字幕一区二区| 高清国产一区二区| 欧美一区欧美二区| 一区二区三区 在线观看视频| 久久99精品国产.久久久久久| 日本韩国欧美一区二区三区| 亚洲精品一区二区三区香蕉 | 午夜影视日本亚洲欧洲精品| 国产精品一卡二卡在线观看| 欧洲精品在线观看| 国产精品久久久久久久午夜片 | 国产一区二区三区久久久 | 日韩国产精品久久久久久亚洲| 国产成人8x视频一区二区| 91精品国产色综合久久不卡电影| 综合网在线视频| 国产一区久久久| 日韩一级二级三级精品视频| 亚洲欧美日韩成人高清在线一区| 国产在线精品视频| 91精品蜜臀在线一区尤物| 一区二区视频在线看| 豆国产96在线|亚洲| 精品盗摄一区二区三区| 成人天堂资源www在线| 欧美一区二区三区免费观看视频| 亚洲午夜视频在线| 一本一本大道香蕉久在线精品 | 国产精品久久99| 国产高清亚洲一区| 久久天天做天天爱综合色| 久色婷婷小香蕉久久| 91麻豆精品国产91久久久资源速度 | 欧美一区二区三区小说| 亚洲第一主播视频| 欧美日韩国产电影| 午夜av区久久| 欧美区在线观看| 婷婷综合久久一区二区三区| 在线观看一区二区精品视频| 亚洲精品一二三四区| 在线精品视频免费播放| 亚洲六月丁香色婷婷综合久久 | 欧美日韩在线一区二区| 一区二区三区欧美亚洲| 欧美最猛性xxxxx直播| 亚洲国产人成综合网站| 欧美艳星brazzers| 五月天欧美精品| 91精品国产91久久久久久一区二区 | 欧美大胆人体bbbb| 韩国成人精品a∨在线观看| 久久久综合网站| 国产福利一区二区三区在线视频| 国产三级精品视频| 91香蕉视频污在线| 亚洲午夜久久久久久久久久久| 欧美日韩精品三区| 美女网站色91| 久久精品视频在线看| 国产91清纯白嫩初高中在线观看 | 精品一区二区免费| 国产精品嫩草影院av蜜臀| 色婷婷国产精品久久包臀| 日韩中文欧美在线| 久久综合久久鬼色中文字| 波多野结衣在线aⅴ中文字幕不卡| 亚洲乱码国产乱码精品精98午夜 | 国产一区二区三区精品欧美日韩一区二区三区 | 日韩欧美国产麻豆| 国产精一品亚洲二区在线视频| 国产精品美女久久福利网站| 色偷偷久久人人79超碰人人澡|