📄 battle.cpp
字号:
// Battle.cpp: implementation of the CBattle class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Battle.h"
#include <math.h>
#include "Map.h"
#include "Hong_Sub.h"
#include "Effect.h"
#include "DirectSound.h"
///////////////////////////////////////////////////////////////////////////////
// Global Member
///////////////////////////////////////////////////////////////////////////////
static int s_aAngle8[8] =
{
6, 5, 4, 3, 2, 1, 0, 7
};
static int s_aAngle16[16] =
{
2, 4, 6, 8, 10, 12, 14, 0, 3, 5, 7, 9, 11, 13, 15, 1
};
static POINT s_aPoint[9] =
{
{-3, 0}, {-2, 2}, {0, 3}, {2, 2}, {0, 0}, {2, -2}, {0, -3}, {-2, -2}, {3, 0}
};
static POINT s_aRound[8] =
{
{-5, -1}, {-3, 4}, {-1, 5}, { 4, 3},
{ 5, 1}, { 3, -4}, { 1, -5}, {-4, -3}
};
static int s_aOffset[8][5] =
{
{0, 8, 15, 1, 7},
{1, 9, 8, 2, 0},
{2, 10, 9, 3, 1},
{3, 11, 10, 4, 2},
{4, 12, 11, 5, 3},
{5, 13, 12, 6, 4},
{6, 14, 13, 7, 5},
{7, 15, 14, 0, 6}
};
static POINT s_aDistance[8][5] =
{
{{0, 0}, {-50, 0}, { 50, 0}, {-100, 0}, { 100, 0}},
{{0, 0}, {-40, -40}, { 40, 40}, { -80, -80}, { 80, 80}},
{{0, 0}, { 0, 50}, { 0, -50}, { 0, 100}, { 0, -100}},
{{0, 0}, {-40, 40}, { 40, -40}, { -80, 80}, { 80, -80}},
{{0, 0}, { 50, 0}, {-50, 0}, { 100, 0}, {-100, 0}},
{{0, 0}, { 40, 40}, {-40, -40}, { 80, 80}, { -80, -80}},
{{0, 0}, { 0, -50}, { 0, 50}, { 0, -100}, { 0, 100}},
{{0, 0}, { 40, -40}, {-40, 40}, { 80, -80}, { -80, 80}}
};
static POINT s_aCircle[29] =
{
{-2, 2}, {-1, 2}, { 0, 2}, { 1, 2}, { 2, 2},
{-2, 1}, {-1, 1}, { 0, 1}, { 1, 1}, { 2, 1},
{-2, 0}, {-1, 0}, { 0, 0}, { 1, 0}, { 2, 0},
{-2, -1}, {-1, -1}, { 0, -1}, { 1, -1}, { 2, -1},
{-2, -2}, {-1, -2}, { 0, -2}, { 1, -2}, { 2, -2},
{-3, 0}, { 0, 3}, { 3, 0}, { 0, -3}
};
///////////////////////////////////////////////////////////////////////////////
// Construction/Destruction
///////////////////////////////////////////////////////////////////////////////
CBattle::CBattle()
{
}
CBattle::~CBattle()
{
}
///////////////////////////////////////////////////////////////////////////////
// Public Method
///////////////////////////////////////////////////////////////////////////////
void CBattle::EffectLocal(MAGICLIST* pMagic, DWORD dwNow)
{ // 咯矾俺甫 免仿窍绰 捞棋飘 屈怕
LPCHARACTER pCaster = pMagic->lpChar_Own;
LPCHARACTER pTarget = pMagic->lpChar_Target;
if (pCaster == NULL || pTarget == NULL) return;
for (int i = 0; i < 29; i++)
{
::InsertMagic(pCaster, pTarget,
pMagic->next_Effect,
9,
pMagic->x,
pMagic->y,
pMagic->tarx + (s_aCircle[i].x<<CELL),
pMagic->tary + (s_aCircle[i].y<<CELL),
false, 0, false,
dwNow + 100*(i + 1));
}
}
void CBattle::EffectRound(MAGICLIST* pMagic, DWORD dwNow)
{ // 矫傈磊甫 皑轿绰 捞棋飘 屈怕
LPCHARACTER pCaster = pMagic->lpChar_Own;
LPCHARACTER pTarget = pMagic->lpChar_Target;
if (pCaster == NULL || pTarget == NULL) return;
for (int i = 0; i < 8; ++i)
{
::InsertMagic(pCaster, pTarget,
pMagic->next_Effect,
pMagic->magicSubNum,
pMagic->x,
pMagic->y,
s_aRound[i].x<<5,
s_aRound[i].y<<5,
false, 0, false,
dwNow + 100*(i + 1));
}
}
void CBattle::EffectStorm(MAGICLIST* pMagic, DWORD dwNow)
{ // 窍疵俊辑 咯矾俺啊 冻绢瘤绰 捞棋飘 屈怕
LPCHARACTER pCaster = pMagic->lpChar_Own;
LPCHARACTER pTarget = pMagic->lpChar_Target;
if (pCaster == NULL || pTarget == NULL) return;
int nRandX = 0, nRandY = 0;
for (int i = 0; i < 9; i++)
{
nRandX = s_aPoint[i].x<<5;
nRandY = s_aPoint[i].y<<5;
::InsertMagic(pCaster, pTarget,
pMagic->next_Effect,
pMagic->magicSubNum,
pMagic->x + nRandX,
pMagic->y + nRandY,
pMagic->tarx + nRandX,
pMagic->tary + nRandY,
false, 0, false,
dwNow + 100*(i + 1));
}
}
void CBattle::EffectSpread(MAGICLIST* pMagic)
{ // 8规氢栏肺 唱啊绰 捞棋飘 屈怕
const double dUnit = 0.785398; // PI甫 4殿盒
LPCHARACTER pCaster = pMagic->lpChar_Own;
LPCHARACTER pTarget = pMagic->lpChar_Target;
if (pCaster == NULL || pTarget == NULL) return;
EFFECT_INFO infEffect;
int nDir = 0, nOffX = 0, nOffY = 0;
double dAngle = 0.0;
for (int i = 0; i < 8; i++)
{
nDir = s_aAngle8[i];
nOffX = 100;
nOffY = 100;
dAngle = dUnit*nDir;
Coordinates(dAngle, nOffX, nOffY);
//
memset(&infEffect, 0, sizeof(EFFECT_INFO));
infEffect.pCaster = pCaster;
infEffect.pTarget = pTarget;
infEffect.nType = pCaster->excute_MagicNum;
infEffect.nEffect = pMagic->next_Effect;
infEffect.nSub = pMagic->magicSubNum;
infEffect.nDir = nDir;
infEffect.nSrcX = pMagic->x;
infEffect.nSrcY = pMagic->y;
infEffect.nDstX = pMagic->x + nOffX;
infEffect.nDstY = pMagic->y + nOffY;
AddEffect(&infEffect);
}
}
void CBattle::EffectShoot(MAGICLIST* pMagic, int nCount)
{ // 矫傈磊甫 吝缴栏肺 欺廉唱啊绰 捞棋飘 屈怕
const double dUnit = 0.392699; // PI甫 8殿盒
LPCHARACTER pCaster = pMagic->lpChar_Own;
LPCHARACTER pTarget = pMagic->lpChar_Target;
if (pCaster == NULL || pTarget == NULL) return;
EFFECT_INFO infEffect;
int nDir = 0, nOffX = 0, nOffY = 0;
double dAngle = 0.0;
for (int i = 0; i < nCount; i++)
{
nDir = s_aOffset[pCaster->direction][i];
nOffX = 100;
nOffY = 100;
dAngle = dUnit*s_aAngle16[nDir];
Coordinates(dAngle, nOffX, nOffY);
//
memset(&infEffect, 0, sizeof(EFFECT_INFO));
infEffect.pCaster = pCaster;
infEffect.pTarget = pTarget;
infEffect.nType = pCaster->excute_MagicNum;
infEffect.nEffect = pMagic->next_Effect;
infEffect.nSub = pMagic->magicSubNum;
infEffect.nDir = nDir;
infEffect.nSrcX = pMagic->x;
infEffect.nSrcY = pMagic->y;
infEffect.nDstX = pMagic->x + nOffX;
infEffect.nDstY = pMagic->y + nOffY;
AddEffect(&infEffect);
}
}
void CBattle::EffectMulti(MAGICLIST* pMagic, int nCount)
{ // 老沥 埃拜栏肺 咯矾俺 唱啊绰 捞棋飘 屈怕
LPCHARACTER pCaster = pMagic->lpChar_Own;
LPCHARACTER pTarget = pMagic->lpChar_Target;
if (pCaster == NULL || pTarget == NULL) return;
EFFECT_INFO infEffect;
POINT ptDistance;
for (int i = 0; i < nCount; i++)
{
ptDistance = s_aDistance[pCaster->direction][i];
//
memset(&infEffect, 0, sizeof(EFFECT_INFO));
infEffect.pCaster = pCaster;
infEffect.pTarget = pTarget;
infEffect.nType = pCaster->excute_MagicNum;
infEffect.nEffect = pMagic->next_Effect;
infEffect.nSub = pMagic->magicSubNum;
infEffect.nDir = pCaster->direction;
infEffect.nSrcX = pMagic->x + ptDistance.x;
infEffect.nSrcY = pMagic->y + ptDistance.y;
infEffect.nDstX = pMagic->tarx + ptDistance.x;
infEffect.nDstY = pMagic->tary + ptDistance.y;
AddEffect(&infEffect);
}
}
void CBattle::EffectBreath(MAGICLIST* pMagic, int nX, int nY)
{ // 宏饭胶 捞棋飘 屈怕
LPCHARACTER pCaster = pMagic->lpChar_Own;
LPCHARACTER pTarget = pMagic->lpChar_Target;
if (pCaster == NULL || pTarget == NULL) return;
const int nDir = s_aOffset[pCaster->direction][0];
const double dAngle = 3.141592/4.0*s_aAngle8[nDir];
Coordinates(dAngle, nX, nY);
::InsertMagic(pCaster, pTarget,
pMagic->next_Effect,
pMagic->magicSubNum,
pMagic->x + nX,
pMagic->y - nY,
pMagic->tarx + nX,
pMagic->tary - nY,
false, 0, false,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -