📄 fight.cpp
字号:
Role_Move[j].Open(str);
free(str);
_FREE(Role_Temp);
Role_Temp=Role_Move[j].ReadText("设置","continue");
}
else if(Command[j].lCommand == TOOLS)
{
char* str = FightRoleInit.ReadText(Hero[j]->Fight_Ini_Name,"Tool_Ini");
Role_Tool[j].Open(str);
free(str);
_FREE(Role_Temp);
Role_Temp=Role_Tool[j].ReadText("设置","continue");
}
else
{
_FREE(Role_Temp);
Role_Temp=Role_Magic[Command[j].lAccessory].ReadText("设置","continue");
sound_Magic.LoadSoundFX(hWnd,CMagic::MAGIC[Command[j].lAccessory].SoundFileName);
if(Command[j].Class==1) //对自己人的
{
if(Role_Magic[Command[j].lAccessory].ReadInt("设置","相对")) //根据魔法的对象决定魔法图片显示的初位置
{
fightmagic.x = Role_Magic[Command[j].lAccessory].ReadInt("设置","startx")+FightRole[j].x;
fightmagic.y = Role_Magic[Command[j].lAccessory].ReadInt("设置","starty")+FightRole[j].y;
}
else
{
fightmagic.x = Role_Magic[Command[j].lAccessory].ReadInt("设置","startx")+FightRole[Command[j].kill_who].x;
fightmagic.y = Role_Magic[Command[j].lAccessory].ReadInt("设置","starty")+FightRole[Command[j].kill_who].y;
}
}
else
{
if(Role_Magic[Command[j].lAccessory].ReadInt("设置","相对")) //根据魔法的对象决定魔法图片显示的初位置
{
fightmagic.x = Role_Magic[Command[j].lAccessory].ReadInt("设置","startx")+FightRole[j].x;
fightmagic.y = Role_Magic[Command[j].lAccessory].ReadInt("设置","starty")+FightRole[j].y;
}
else
{
fightmagic.x = Role_Magic[Command[j].lAccessory].ReadInt("设置","startx")+EnemyRole[Command[j].kill_who].x;
fightmagic.y = Role_Magic[Command[j].lAccessory].ReadInt("设置","starty")+EnemyRole[Command[j].kill_who].y;
}
}
}
kill_count=j;
goto _MagicNext;
}
//没有下个主角了,就换敌人攻击
Enemy_AI(); //为敌人攻击做好准备
main_count=ENEMY_KILL_ROLE; //进入敌人进攻部分
m_nRoundCount ++; //增加回合计数
Account_Attack();
}
}
}
}
//显示敌人
_MagicNext:;
for(i=0;i<4;i++)
{
if(EnemyRole[i].use==1)
{
if(EnemyRole[i].stop_temp==1)
Blt(lpDDSBack,EnemyRole[i].x,EnemyRole[i].y,EnemyRole[i].surf,EnemyRole[i].Rstop[0],true);
else if(EnemyRole[i].stop_temp==2)
Blt(lpDDSBack,EnemyRole[i].x,EnemyRole[i].y,EnemyRole[i].surf,EnemyRole[i].Rstop[1],true);
else if(EnemyRole[i].stop_temp==3)
Blt(lpDDSBack,EnemyRole[i].x,EnemyRole[i].y,EnemyRole[i].surf,EnemyRole[i].Rstop[2],true);
else if(EnemyRole[i].stop_temp==4)
Blt(lpDDSBack,EnemyRole[i].x,EnemyRole[i].y,EnemyRole[i].surf,EnemyRole[i].Rstop[3],true);
else if(EnemyRole[i].stop_temp==10)
Blt(lpDDSBack,EnemyRole[i].x,EnemyRole[i].y,EnemyRole[i].surf,EnemyRole[i].Rbruise,true);
else if(EnemyRole[i].stop_temp==11)
Blt(lpDDSBack,EnemyRole[i].x-5,EnemyRole[i].y,EnemyRole[i].surf,EnemyRole[i].Rbruise,true);
}
}
//敌人要是被攻击就开始减血显示记数
for(i=0;i<4;i++)
{
if(EnemyRole[i].use==1)
{
if(EnemyRole[i].stop_temp==11)
{
m_nAttackCountLife = 10;
}
EnemyRole[i].ready = 1;//敌人没有进攻
}
}
//显示主角
for(i=0;i<3;i++)
{
if(FightRole[i].use==1)
{
if(FightRole[i].stop_temp==1)
Blt(lpDDSBack,FightRole[i].x,FightRole[i].y,FightRole[i].surf,FightRole[i].Rstop[0],true);
else if(FightRole[i].stop_temp==2)
Blt(lpDDSBack,FightRole[i].x,FightRole[i].y,FightRole[i].surf,FightRole[i].Rstop[1],true);
else if(FightRole[i].stop_temp==3)
Blt(lpDDSBack,FightRole[i].x,FightRole[i].y,FightRole[i].surf,FightRole[i].Rstop[2],true);
else if(FightRole[i].stop_temp==4)
Blt(lpDDSBack,FightRole[i].x,FightRole[i].y,FightRole[i].surf,FightRole[i].Rstop[3],true);
else if(FightRole[i].stop_temp==10)
Blt(lpDDSBack,FightRole[i].x1,FightRole[i].y1,FightRole[i].surf,RMove_Pic,true);
FightRole[i].ready = 0; //主角是进攻状态
}
}
//显示魔法的图片
if(bShowMagicPic)
Blt(lpDDSBack,fightmagic.x,fightmagic.y,
CMagic::MAGIC[Command[kill_count].lAccessory].EffectPic,
fightmagic.RMagicPic,true);
}
break;
/////////////////////////////////////////////////////////////////////
// 敌人进行攻击的动作-------------------------------------------
/////////////////////////////////////////////////////////////////////
case ENEMY_KILL_ROLE: //和ROLE_KILL_ENEMY基本相同
{
for(i=0; i<4; i++)
if(enemy_count==i && EnemyRole[enemy_count].use==1 )
{
//测试主角是否存在,不在就换人
if(Enemy_Command[enemy_count].kill_who!=Test_Role(Enemy_Command[enemy_count].kill_who)) // 测试要攻击的对象是否存在,如果不存在则换人
{
Enemy_Command[enemy_count].kill_who=Test_Role(Enemy_Command[enemy_count].kill_who);
Account_Attack();
}
//进攻动作
EnemyRole[enemy_count].stop_temp=10;
Sleep(Enemy_Move[i].ReadInt("设置","延时"));
//读取位图的大小数据
RMove_Pic.left=Enemy_Move[i].ReadInt(Role_Temp,"left");
RMove_Pic.top=Enemy_Move[i].ReadInt(Role_Temp,"top");
RMove_Pic.right=Enemy_Move[i].ReadInt(Role_Temp,"right");
RMove_Pic.bottom=Enemy_Move[i].ReadInt(Role_Temp,"bottom");
if(Enemy_Move[i].ReadInt(Role_Temp,"对比")==1)
{
//位置数据
EnemyRole[enemy_count].x1=EnemyRole[enemy_count].x+Enemy_Move[i].ReadInt(Role_Temp,"x");
EnemyRole[enemy_count].y1=EnemyRole[enemy_count].y+Enemy_Move[i].ReadInt(Role_Temp,"y");
char *str = Role_Temp;
//下个数据的位置
Role_Temp=Enemy_Move[i].ReadText(Role_Temp,"continue");
free(str);
}
else if(Enemy_Move[i].ReadInt(Role_Temp,"对比")==2) //移动
{
EnemyRole[enemy_count].x1=FightRole[Enemy_Command[enemy_count].kill_who].x+Enemy_Move[i].ReadInt(Role_Temp,"x");
EnemyRole[enemy_count].y1=FightRole[Enemy_Command[enemy_count].kill_who].y+Enemy_Move[i].ReadInt(Role_Temp,"y");
char *str = Role_Temp;
Role_Temp=Enemy_Move[i].ReadText(Role_Temp,"continue");
free(str);
}
else if(Enemy_Move[i].ReadInt(Role_Temp,"对比")==3) //主角受伤
{
EnemyRole[enemy_count].x1=FightRole[Enemy_Command[enemy_count].kill_who].x+Enemy_Move[i].ReadInt(Role_Temp,"x");
EnemyRole[enemy_count].y1=FightRole[Enemy_Command[enemy_count].kill_who].y+Enemy_Move[i].ReadInt(Role_Temp,"y");
char *str = Role_Temp;
Role_Temp=Enemy_Move[i].ReadText(Role_Temp,"continue");
free(str);
//主角动作切换过程和ROLE_KILL_ENEMY中的敌人动作切换相同
FightRole[Enemy_Command[enemy_count].kill_who].stop_temp=11;
}
else if(Enemy_Move[i].ReadInt(Role_Temp,"对比")==4) //攻击
{
EnemyRole[enemy_count].sound_Fight.Play();
EnemyRole[enemy_count].x1=FightRole[Enemy_Command[enemy_count].kill_who].x+Enemy_Move[i].ReadInt(Role_Temp,"x");
EnemyRole[enemy_count].y1=FightRole[Enemy_Command[enemy_count].kill_who].y+Enemy_Move[i].ReadInt(Role_Temp,"y");
char *str = Role_Temp;
Role_Temp=Enemy_Move[i].ReadText(Role_Temp,"continue");
free(str);
FightRole[Enemy_Command[enemy_count].kill_who].stop_temp=10;
}
else if(Enemy_Move[i].ReadInt(Role_Temp,"对比")==5) //主角惨叫
{
EnemyRole[enemy_count].x1=FightRole[Enemy_Command[enemy_count].kill_who].x+Enemy_Move[i].ReadInt(Role_Temp,"x");
EnemyRole[enemy_count].y1=FightRole[Enemy_Command[enemy_count].kill_who].y+Enemy_Move[i].ReadInt(Role_Temp,"y");
char *str = Role_Temp;
Role_Temp=Enemy_Move[i].ReadText(Role_Temp,"continue");
free(str);
FightRole[Enemy_Command[enemy_count].kill_who].stop_temp=11;
FightRole[Enemy_Command[enemy_count].kill_who].sound_Defend.Play();
}
else
{
//敌人复位
EnemyRole[enemy_count].stop_temp=1;
//主角全部死亡,跳出敌人攻击循环
if( Account_Loss()== 2 )
goto _Next_Enemy;
//计算攻击力
Account_Attack();
for(int j=i+1; j<4; j++)
if(EnemyRole[j].use==1) //判断下一个敌人
{
char* str = EnemyInit.ReadText(EnemyRole[j].name,"Move_Ini");
Enemy_Move[j].Open(str);
free(str);
_FREE(Role_Temp);
Role_Temp=Enemy_Move[j].ReadText("设置","continue");
enemy_count=j; //轮到下个敌人攻击
goto _Next_Enemy;
}
//敌人循环完成,进入主循环
main_count=MAIN;
//command_count置成排到最前面的主角
command_count=Test_Role(0);
}
_Next_Enemy:;
}
//显示主角
for(i=0;i<3;i++)
{
if(FightRole[i].use==1)
{
if(FightRole[i].stop_temp==1)
Blt(lpDDSBack,FightRole[i].x,FightRole[i].y,FightRole[i].surf,FightRole[i].Rstop[0],true);
else if(FightRole[i].stop_temp==2)
Blt(lpDDSBack,FightRole[i].x,FightRole[i].y,FightRole[i].surf,FightRole[i].Rstop[1],true);
else if(FightRole[i].stop_temp==3)
Blt(lpDDSBack,FightRole[i].x,FightRole[i].y,FightRole[i].surf,FightRole[i].Rstop[2],true);
else if(FightRole[i].stop_temp==4)
Blt(lpDDSBack,FightRole[i].x,FightRole[i].y,FightRole[i].surf,FightRole[i].Rstop[3],true);
else if(FightRole[i].stop_temp==10)
Blt(lpDDSBack,FightRole[i].x,FightRole[i].y,FightRole[i].surf,FightRole[i].Rbruise,true);
else if(FightRole[i].stop_temp==11)
Blt(lpDDSBack,FightRole[i].x+5,FightRole[i].y,FightRole[i].surf,FightRole[i].Rbruise,true);
}
}
//开始主角减血记数
for(i=0;i<3;i++)
{
if(FightRole[i].use==1)
{
if(FightRole[i].stop_temp==11)
{
m_nAttackCountLife = 10;
}
FightRole[i].ready = 1; //主角不是进攻状态
}
}
//显示敌人
for(i=0;i<4;i++)
{
if(EnemyRole[i].use==1)
{
if(EnemyRole[i].stop_temp==1)
Blt(lpDDSBack,EnemyRole[i].x,EnemyRole[i].y,EnemyRole[i].surf,EnemyRole[i].Rstop[0],true);
else if(EnemyRole[i].stop_temp==2)
Blt(lpDDSBack,EnemyRole[i].x,EnemyRole[i].y,EnemyRole[i].surf,EnemyRole[i].Rstop[1],true);
else if(EnemyRole[i].stop_temp==3)
Blt(lpDDSBack,EnemyRole[i].x,EnemyRole[i].y,EnemyRole[i].surf,EnemyRole[i].Rstop[2],true);
else if(EnemyRole[i].stop_temp==4)
Blt(lpDDSBack,EnemyRole[i].x,EnemyRole[i].y,EnemyRole[i].surf,EnemyRole[i].Rstop[3],true);
else if(EnemyRole[i].stop_temp==10)
Blt(lpDDSBack,EnemyRole[i].x1,EnemyRole[i].y1,EnemyRole[i].surf,RMove_Pic,true);
//该敌人是进攻状态
EnemyRole[i].ready = 0;
}
}
}
break;
/////////////////////////////////////////////////////////////////////
// 战斗结束-----------------------------------------------------
/////////////////////////////////////////////////////////////////////
case OVER:
{
if(temp_swap==1) //逃跑成功
{
Sleep(1000);
temp_swap=0;
ret=1;
}
else if(temp_swap==2) //胜利
{
temp_swap=0;
ret=2;
}
else if(temp_swap==3) //失败
{
temp_swap=0;
ret=3;
}
else if( temp_swap==4 ) //逃跑失败
{
Sleep(800);
Enemy_AI(); //换敌人攻击
main_count=ENEMY_KILL_ROLE;
Account_Attack();
ret=4;
}
else
{
Clear();
return ret;
}
}
break;
}
//-------------------------------------------------------------------
// 显示部分
//-------------------------------------------------------------------
//显示敌人的HP
//if( bShowFps )
{
if(Enemy[0].Hp)
FightFont.PrintText(lpDDSBack, 20, 20,"敌人上:%d",Enemy[0].Hp);
if(Enemy[1].Hp)
FightFont.PrintText(lpDDSBack, 20, 20+FightFont.font_Size,"敌人右:%d",Enemy[1].Hp);
if(Enemy[2].Hp)
FightFont.PrintText(lpDDSBack, 20, 20+FightFont.font_Size*2,"敌人左:%d",Enemy[2].Hp);
if(Enemy[3].Hp)
FightFont.PrintText(lpDDSBack, 20, 20+FightFont.font_Size*3,"敌人下:%d",Enemy[3].Hp);
FightFont.PrintText(lpDDSBack, 20, 20+FightFont.font_Size*4,"回合计数:%d",m_nRoundCount);
}
//背景遮挡贴图图象显示
RECT RBuild={0, 0, 640, 239};
Blt(lpDDSBack, 0, 260, background_build[0], RBuild, true);
//透明处理
Show_Role_Enemy_Alpha();
//显示魔法的图片
if(bShowMagicPic)
ABlt(lpDDSBack,fightmagic.x,fightmagic.y,
CMagic::MAGIC[Command[kill_count].lAccessory].EffectPic,
fightmagic.RMagicPic,ColorKey16,16);
//人物头像与状态的显示部分
if(FightRole[0].status==1)
{
// HP血槽的长短,暂定
Bar(lpDDSBack, 58, 434, 158, 439, COLOR_BROOD_NULL);
FightRole[0].BroodLong = Hero[0]->Hp*100/Hero[0]->MaxHp;
Bar(lpDDSBack, 58, 434, 58+FightRole[0].BroodLong, 439, COLOR_BROOD);
// MP血槽的长短,暂定
Bar(lpDDSBack, 58, 450, 158, 455, COLOR_MAGIC_NULL);
FightRole[0].MagicLong = Hero[0]->Mp*100/Hero[0]->MaxMp;
Bar(lpDDSBack, 58, 450, 58+FightRole[0].MagicLong, 455, COLOR_MAGIC);
Blt(lpDDSBack,5,354,status_pic,Rstatus_pic,true);
Blt(lpDDSBack,11,360,FightRole[0].header,Rtemp,false);
font.font_Color=RGB(0,0,0);
font.PrintText(lpDDSBack, 5+100, 354+31, "%d", Hero[0]->Ip);
font.PrintText(lpDDSBack, 5+100, 354+50, "%d", Hero[0]->Bp);
font.PrintText(lpDDSBack, 5+125, 434-11, "%d",Hero[0]->Hp);
font.PrintText(lpDDSBack, 5+125, 450-11, "%d",Hero[0]->Mp);
}
if(FightRole[1].status==1)
{
// HP血槽的长短,暂定
Bar(lpDDSBack, 236, 434, 336, 439, COLOR_BROOD_NULL);
FightRole[1].BroodLong = Hero[1]->Hp*100/Hero[1]->MaxHp;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -