📄 hero.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 + -