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

📄 ui.cpp

📁 Win32项目,类似坦克大战的游戏"忘记喧嚣". 游戏的各系统完整,闪屏,道具.碰撞等等....推荐
💻 CPP
字号:

#include ".\ui.h"

UI::UI(HDC hdc, HDC mdc, HDC bufdc)
{
	u_hdc = hdc;
	u_mdc = mdc;
	u_bufdc = bufdc;
	u_faceMap     = (HBITMAP)::LoadImage(NULL, "../res/graphics/face.bmp", IMAGE_BITMAP, CLIENT_W, CLIENT_H, LR_LOADFROMFILE);
	u_backGround  = (HBITMAP)::LoadImage(NULL, "../res/graphics/background.bmp", IMAGE_BITMAP, 520, 485, LR_LOADFROMFILE);
	u_back        = (HBITMAP)::LoadImage(NULL, "../res/graphics/black.bmp", IMAGE_BITMAP, 650, 600, LR_LOADFROMFILE);
	u_begin       = (HBITMAP)::LoadImage(NULL, "../res/graphics/begin.bmp", IMAGE_BITMAP, 160, 480, LR_LOADFROMFILE);
	u_exit        = (HBITMAP)::LoadImage(NULL, "../res/graphics/exit.bmp", IMAGE_BITMAP, 160, 480, LR_LOADFROMFILE);
	u_help        = (HBITMAP)::LoadImage(NULL, "../res/graphics/help.bmp", IMAGE_BITMAP, 200, 54, LR_LOADFROMFILE);
	u_close       = (HBITMAP)::LoadImage(NULL, "../res/graphics/close.bmp", IMAGE_BITMAP, 60, 20, LR_LOADFROMFILE);
	u_instruction = (HBITMAP)::LoadImage(NULL, "../res/graphics/instruction.bmp", IMAGE_BITMAP, 640, 344, LR_LOADFROMFILE);
	u_pause       = (HBITMAP)::LoadImage(NULL, "../res/graphics/pause.bmp", IMAGE_BITMAP, 650, 260, LR_LOADFROMFILE);
	u_explode     = (HBITMAP)::LoadImage(NULL, "../res/graphics/explosion5.bmp", IMAGE_BITMAP, 1440, 95, LR_LOADFROMFILE);
	u_killNumback = (HBITMAP)::LoadImage(NULL, "../res/graphics/killNumberb.bmp", IMAGE_BITMAP, 54, 309, LR_LOADFROMFILE);
	u_killNumer   = (HBITMAP)::LoadImage(NULL, "../res/graphics/killnumber.bmp", IMAGE_BITMAP, 6, 250, LR_LOADFROMFILE);
	u_number      = (HBITMAP)::LoadImage(NULL, "../res/graphics/number.bmp", IMAGE_BITMAP, 130, 20, LR_LOADFROMFILE);
	u_airdrop     = (HBITMAP)::LoadImage(NULL, "../res/graphics/airdrop.bmp", IMAGE_BITMAP, 270, 120, LR_LOADFROMFILE);
	u_complete    =	(HBITMAP)::LoadImage(NULL, "../res/graphics/complete.bmp", IMAGE_BITMAP, 524, 134, LR_LOADFROMFILE);
	u_gameOver    = (HBITMAP)::LoadImage(NULL, "../res/graphics/gameover.bmp", IMAGE_BITMAP, 440, 220, LR_LOADFROMFILE);
	u_cloud       = (HBITMAP)::LoadImage(NULL, "../res/graphics/cloud.bmp", IMAGE_BITMAP, 650, 600, LR_LOADFROMFILE);

	u_turn = 0;
	u_cloudX = 0;
	u_mapMoveV = 0;
	u_airdropV = 0;	
	u_instructV = 0;
	u_explodeTurn = 0;
	u_exploding = false;
	char mapName[40] = "";

	for (int i=0; i<11; i++)
	{
		wsprintf(mapName, "../res/graphics/live/heroLive%d.bmp", i);
		u_heroLive[i] = (HBITMAP)::LoadImage(NULL, mapName, IMAGE_BITMAP, 54, 281, LR_LOADFROMFILE);
	}
}

UI::~UI(void)
{
	for (int i=0; i<11; i++)
	{
		::DeleteObject(u_heroLive[i]);	
	}
	::DeleteObject(u_backGround);
	::DeleteObject(u_explode);
	::DeleteObject(u_pause);
	::DeleteObject(u_killNumback);
	::DeleteObject(u_killNumer);
	::DeleteObject(u_number);
	::DeleteObject(u_airdrop);
	::DeleteObject(u_complete);
	::DeleteObject(u_gameOver);	
	::DeleteObject(u_back);	
	::DeleteObject(u_cloud);
	::DeleteDC(u_bufdc);
	::DeleteDC(u_mdc);
	::DeleteDC(u_hdc);	
}

void UI::ShowFaceMap(bool begin, bool exit, bool help, bool instruct, bool instructClose)
{
	::SelectObject(u_mdc, u_faceMap);
	::BitBlt(u_bufdc, 0, 0, CLIENT_W, CLIENT_H, u_mdc, 0, 0, SRCCOPY);

	::SelectObject(u_mdc, u_begin);
	::TransparentBlt(u_bufdc,0, 450, 160, 38, u_mdc, 0, u_turn, 160, 38, RGB(255,0,255));
	if (begin)
	{
		::TransparentBlt(u_bufdc,0, 450, 160, 38, u_mdc, 0, 440, 160, 38, RGB(255,0,255));
	}
	::SelectObject(u_mdc, u_exit);
	::TransparentBlt(u_bufdc,0, 490, 160, 38, u_mdc, 0, u_turn, 160, 38, RGB(255,0,255));
	if (exit)
	{
		::TransparentBlt(u_bufdc,0, 490, 160, 38, u_mdc, 0, 440, 160, 38, RGB(255,0,255));
	}
	if (u_turn <=360)
	{
		u_turn +=40;
	}
	::SelectObject(u_mdc, u_help);
	::TransparentBlt(u_bufdc,520, 470, 100, 54, u_mdc, 0, 0, 100, 54, RGB(0,0,0));
	if (help)
	{
		::TransparentBlt(u_bufdc,520, 470, 100, 54, u_mdc, 100, 0, 100, 54, RGB(0,0,0));
	}
	if (instruct)
	{
		::SelectObject(u_mdc, u_instruction);
		::BitBlt(u_bufdc, 320-u_instructV, 105, u_instructV, 344, u_mdc, 0, 0, SRCCOPY);
		::BitBlt(u_bufdc, 320, 105, u_instructV, 344, u_mdc, 640-u_instructV, 0, SRCCOPY);

		if (u_instructV < 320)
		{
			u_instructV += 5;
		}
		else
		{
			u_instructV = 320;
		}
		if (u_instructV == 320)
		{
			::SelectObject(u_mdc, u_close);
			::BitBlt(u_bufdc, 305, 425, 30, 20, u_mdc, 0, 0, SRCCOPY);
			if (instructClose)
			{
				::BitBlt(u_bufdc, 305, 425, 30, 20, u_mdc, 30, 0, SRCCOPY);
			}
		}
	}
	else
	{
		u_instructV = 0;
	}
}

void UI::ShowBackground(void)
{
	::DeleteObject(u_faceMap);
	::DeleteObject(u_begin);
	::DeleteObject(u_exit);
	::DeleteObject(u_help);
	::DeleteObject(u_close);
	::DeleteObject(u_instruction);
	::SelectObject(u_mdc, u_back);
	::BitBlt(u_bufdc, 0, 0, 640, 560, u_mdc, 0, 20, SRCCOPY);
}

void UI::ShowGamePause(void)
{
	::SelectObject(u_mdc, u_pause);
	::BitBlt(u_bufdc, 0, 110, 640, 260, u_mdc, 0, 0, SRCCOPY);
}

void UI::ShowExplode(int x, int y)
{
	::SelectObject(u_mdc, u_explode);
	::TransparentBlt(u_bufdc,x-20, y-20, 80, 95, u_mdc, u_explodeTurn*80, 0, 80, 95, RGB(255,0,255));
	++u_explodeTurn;
	if (u_explodeTurn>=17)
	{
		u_exploding = false;
	}
}

void UI::ShowTackAttribute(Hero *hero)        
{
	// 血量
	::SelectObject(u_mdc, u_heroLive[hero->t_HP]);
	::TransparentBlt(u_bufdc,5, 235, 54, 281, u_mdc, 0, 0, 54, 281, RGB(255,0,255));
	// life
	::SelectObject(u_mdc, u_number);
	::TransparentBlt(u_bufdc,45, 485, 13, 20, u_mdc, 13 * (hero->t_life), 0, 13, 20, RGB(255,0,255));
	//分数
	const int size = 5;
	int digit[size] = {0};
	for (int i=0; i<size; i++)
	{
		digit[i] = 9;
		if (hero->h_score <= 99999)
		{
			digit[i] = (hero->h_score/((int)pow(10.0,i)))%10;
		}
		::TransparentBlt(u_bufdc,618-13*i, 5, 13, 20, u_mdc, 13 * digit[i], 0, 13, 20, RGB(255,0,255));
	}
}

void UI::ShowHarvest(int killNumber)
{
	int length = killNumber * (250/50);
	int firstNumber = killNumber/10;
	int secondNumber = killNumber%10;

	::SelectObject(u_mdc, u_killNumback);
	::TransparentBlt(u_bufdc,585, 200, 54, 309, u_mdc, 0, 0, 54, 309, RGB(255,0,255));
	::SelectObject(u_mdc, u_killNumer);
	::TransparentBlt(u_bufdc,608, 209+250-length, 6, length, u_mdc, 0, 0, 6, length, RGB(255,255,255));

	::SelectObject(u_mdc, u_number);
	::TransparentBlt(u_bufdc,599, 472, 13, 20, u_mdc, 13*firstNumber, 0, 13, 20, RGB(255,0,255));
	::TransparentBlt(u_bufdc,612, 472, 13, 20, u_mdc, 13*secondNumber, 0, 13, 20, RGB(255,0,255));
}

void UI::ShowAirdrop(bool &airdroping, int killNumber, int &prekillNumber)
{
	::SelectObject(u_mdc, u_airdrop);
	::TransparentBlt(u_bufdc,185, u_airdropV, 270, 120, u_mdc, 0, 0, 270, 120, RGB(255,0,255));

	if (u_airdropV < CLIENT_H)
	{
		u_airdropV += 10;
	}
	else
	{
		u_airdropV = 0;
		airdroping = false;
		prekillNumber = killNumber;
	}
}

void UI::ShowGameComplete(void)
{
	::SelectObject(u_mdc, u_complete);
	::BitBlt(u_bufdc,60, u_mapMoveV, 524, 67, u_mdc, 0, 0, SRCCOPY);
	::BitBlt(u_bufdc,60, 393-u_mapMoveV, 524, 67, u_mdc, 0, 67, SRCCOPY);

	if (u_mapMoveV<164)
	{
		u_mapMoveV += 5;
	}
	else
	{
		u_mapMoveV = 164;
	}
}

void UI::ShowGameOver(void)
{
	::SelectObject(u_mdc, u_gameOver);
	::BitBlt(u_bufdc,100, u_mapMoveV, 440, 110, u_mdc, 0, 0, SRCCOPY);
	::BitBlt(u_bufdc,100, 450-u_mapMoveV, 440, 110, u_mdc, 0, 110, SRCCOPY);

	if (u_mapMoveV<170)
	{
		u_mapMoveV += 5;
	}
}

void UI::ShowCloud(void)
{
	::SelectObject(u_mdc, u_cloud);
	::TransparentBlt(u_bufdc,0, 0, u_cloudX, 600, u_mdc,650-u_cloudX, 0, u_cloudX, 600, RGB(0,0,0));
	::TransparentBlt(u_bufdc,u_cloudX, 0, 650-u_cloudX, 600, u_mdc, 0, 0, 650-u_cloudX, 600, RGB(0,0,0));
	if (u_cloudX > 649)
	{
		u_cloudX = 0;
	}
	else
	{
		u_cloudX += 2;
	}
}

⌨️ 快捷键说明

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