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

📄 hero.cpp

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

Hero::Hero(HDC hdc, HDC mdc, HDC bufdc):Tack(hdc, mdc, bufdc)
{
	h_hdc = hdc;
	h_mdc = mdc;
	h_bufdc = bufdc;
	h_tackMap[0] = (HBITMAP)::LoadImage(NULL, "../res/graphics/hero1.bmp", IMAGE_BITMAP, 160, 40, LR_LOADFROMFILE);
	h_tackMap[1] = (HBITMAP)::LoadImage(NULL, "../res/graphics/hero2.bmp", IMAGE_BITMAP, 160, 40, LR_LOADFROMFILE);
	t_live   = false;
	t_show   = false;
	t_stop   = false;
	t_bullet[0]->b_exit = false;
	t_bullet[1]->b_exit = false;
	h_score = 0;
	h_accScore = 0;
	t_life = 1;
}

Hero::~Hero(void)
{
	::DeleteObject(h_tackMap[0]);	
	::DeleteObject(h_tackMap[1]);	
	SAFE_DELETEDC(h_bufdc);
	SAFE_DELETEDC(h_mdc);
	SAFE_DELETEDC(h_hdc);
}

void Hero::CreateTack(void)
{
	t_startX = 220;
	t_startY = 470;
	t_lockX  = t_startX;
	t_lockY  = t_startY;
	t_nextX  = t_startX;
	t_nextY  = t_startY;
	t_veloc  = 5;               // 速度
	t_grade  = 1;               // 等级 吃一个道具五星改变
	t_tackMode   = 0;           // 类型
	t_bulletMode = 0;
	h_accScore   = 0;
	t_HP     = 10;              // 血量值
	t_index  = 2;
	t_live   = true;
	t_show   = true; 
	t_bullet[0]->b_exit = true;
	t_bullet[1]->b_exit = true;
}

bool Hero::MoveAble(Tack *otherTack)
{
	t_nextX = t_lockX;
	t_nextY = t_lockY;
	int n = -1;

	if (KEYDOWN(VK_UP) || KEYDOWN('W'))
	{
		n = 0;
	}	
	if (KEYDOWN(VK_DOWN) || KEYDOWN('S'))
	{
		n = 1;
	}	
	if (KEYDOWN(VK_RIGHT) || KEYDOWN('D'))
	{
		n = 2;
	}	
	if (KEYDOWN(VK_LEFT) || KEYDOWN('A'))
	{
		n = 3;
	}

	switch (n)       // 防止同时按两个键的情况
	{
	case 0:
		{
			t_index = 2;
			t_nextY -= t_veloc;
		}
		break;
	case 1:
		{
			t_index = 1;
			t_nextY += t_veloc;
		}
		break;
	case 2:
		{
			t_index = 0;
			t_nextX += t_veloc;
		}
		break;
	case 3:
		{
			t_index = 3;
			t_nextX -= t_veloc;
		}
		break;
	default:
		break;
	}

	if (TackHitMap(t_nextX, t_nextY) || (otherTack !=NULL && otherTack->t_live && TackHitTack(otherTack, t_nextX, t_nextY)))
	{
		t_ableMove = false;
		return false;
	}
	else
	{	
		t_ableMove = true;
		return true;
	}
}

void Hero::HeroShoot(void)
{
	if (KEYDOWN( 'J'))
	{
		CreatBullet(t_lockX, t_lockY, t_index, t_bulletMode);
	}
	Shoot();
}

void Hero::OperateTack(void)
{
	if (t_live && t_show)
	{
		if (t_ableMove)
		{
			MoveTack();    // 到Game中单独调用
		}
		HeroShoot();		
	}
}

void Hero::ShowTack(void)
{
	if (t_live && t_show)
	{	
		::SelectObject(h_mdc, h_tackMap[t_tackMode]);
		::TransparentBlt(h_bufdc,t_lockX, t_lockY, 40, 40, h_mdc, 40*t_index, 0, 40, 40, RGB(0,255,0));
	}
}

⌨️ 快捷键说明

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