📄 fight.cpp
字号:
Bar(lpDDSBack, 236, 434, 236+FightRole[1].BroodLong, 439, COLOR_BROOD);
// MP血槽的长短,暂定
Bar(lpDDSBack, 236, 450, 336, 455, COLOR_MAGIC_NULL);
FightRole[1].MagicLong = Hero[1]->Mp*100/Hero[1]->MaxMp;
Bar(lpDDSBack, 236, 450, 236+FightRole[1].MagicLong, 455, COLOR_MAGIC);
Blt(lpDDSBack,183,354,status_pic,Rstatus_pic,true);
Blt(lpDDSBack,189,360,FightRole[1].header,Rtemp,false);
font.font_Color=RGB(0,0,0);
font.PrintText(lpDDSBack, 183+100, 354+31, "%d", Hero[1]->Ip);
font.PrintText(lpDDSBack, 183+100, 354+50, "%d", Hero[1]->Bp);
font.PrintText(lpDDSBack, 183+125, 434-11, "%d",Hero[1]->Hp);
font.PrintText(lpDDSBack, 183+125, 450-11, "%d",Hero[1]->Mp);
}
if(FightRole[2].status==1)
{
// HP血槽的长短,暂定
Bar(lpDDSBack, 416, 434, 516, 439, COLOR_BROOD_NULL);
FightRole[2].MagicLong = Hero[2]->Mp*100/Hero[2]->MaxMp;
Bar(lpDDSBack, 416, 434, 416+FightRole[2].BroodLong, 439, COLOR_BROOD);
// MP血槽的长短,暂定
Bar(lpDDSBack, 416, 450, 516, 455, COLOR_MAGIC_NULL);
FightRole[2].MagicLong = Hero[2]->Mp*100/Hero[2]->MaxMp;
Bar(lpDDSBack, 416, 450, 416+FightRole[2].MagicLong, 455, COLOR_MAGIC);
Blt(lpDDSBack,363,354,status_pic,Rstatus_pic,true);
Blt(lpDDSBack,369,360,FightRole[2].header,Rtemp,false);
font.font_Color=RGB(0,0,0);
font.PrintText(lpDDSBack, 363+100, 354+31, "%d", Hero[2]->Ip);
font.PrintText(lpDDSBack, 363+100, 354+50, "%d", Hero[2]->Bp);
font.PrintText(lpDDSBack, 363+125, 434-11, "%d",Hero[2]->Hp);
font.PrintText(lpDDSBack, 363+125, 450-11, "%d",Hero[2]->Mp);
}
font.font_Color=RGB(255,255,255);
// 各个状态的显示
switch( main_count )
{
case MAIN:
{
// 菜单选项的显示
int bMouse = 0;
if(!bButton[0]&&!bButton[1]&&!bButton[2]&&!bButton[3]&&!bButton[4])
{
for(i=0; i<5; i++)
{
switch( Button[i].CheckLoop(lpDDSBack) )
{
case 1: // 点击
Sound_Click.Play(); //音效
bButton[i]=1;
break;
case 3: //按住不放
bMouse=1;
break;
case 2: // 移动在上面
if( old != i ) //上次不是这个按纽
{
Sound_High.Play(); //音效
old=i; //保存
}
bButton[i]=0; //清0
bMouse = 1;
// 操作说明文字的显示
switch(i)
{
case 0:
font.PrintText(lpDDSBack, 495, 450, "重复上次的操作(R)");
break;
case 1:
font.PrintText(lpDDSBack, 510, 450, "普通攻击(A)");
break;
case 2:
font.PrintText(lpDDSBack, 510, 450, "使用魔法(E)");
break;
case 3:
font.PrintText(lpDDSBack, 510, 450, "使用道具(G)");
break;
case 4:
font.PrintText(lpDDSBack, 530, 450, "逃跑(Q)");
break;
default:
break;
}
break;
default:
break;
}
}
if(!bMouse)
{
switch(oldjoy)
{
case 0:
font.PrintText(lpDDSBack, 495, 450, "重复上次的操作(R)");
break;
case 1:
font.PrintText(lpDDSBack, 510, 450, "普通攻击(A)");
break;
case 2:
font.PrintText(lpDDSBack, 510, 450, "使用魔法(E)");
break;
case 3:
font.PrintText(lpDDSBack, 510, 450, "使用道具(G)");
break;
case 4:
font.PrintText(lpDDSBack, 530, 450, "逃跑(Q)");
break;
default:
break;
}
}
}
if( bButton[0] ) //重复
{
bButton[0] = 0; //清0
//转入攻击状态
//主角的攻击指令和上次的一样
main_count=ROLE_KILL_ENEMY;
for(i=0; i<3; i++)
if(FightRole[i].use==1)
{
if(Command[i].lCommand == ATTACK)
{
char* str = FightRoleInit.ReadText(Hero[i]->Fight_Ini_Name,"Move_Ini");
Role_Move[i].Open(str);
free(str);
_FREE(Role_Temp);
Role_Temp=Role_Move[i].ReadText("设置","continue");
}
else if(Command[i].lCommand == TOOLS)
{
for(int j=i;j<3;j++)
if(FightRole[j].use ==1)
{
if(!m_fightgoods.IsCanUse(Command[j].lAccessory))
{
GameMessage.DoMenu(lpDDSBack,"该物品不能使用");
main_count = MAIN;
return 0;
}
}
char* str = FightRoleInit.ReadText(Hero[i]->Fight_Ini_Name,"Tool_Ini");
Role_Tool[i].Open(str);
free(str);
_FREE(Role_Temp);
Role_Temp=Role_Tool[i].ReadText("设置","continue");
}
else
{
for(int j=i;j<3;j++)
if(FightRole[j].use ==1)
{
if(!m_fightmagic.IsCanUse(Command[j].lAccessory,j))
{
GameMessage.DoMenu(lpDDSBack,"该魔法不能使用");
main_count = MAIN;
return 0;
}
}
_FREE(Role_Temp);
Role_Temp=Role_Magic[Command[i].lAccessory].ReadText("设置","continue");
if(Command[i].Class==1) //对自己人的
{
if(Role_Magic[Command[i].lAccessory].ReadInt("设置","相对")) //根据魔法的对象决定魔法图片显示的初位置
{
fightmagic.x = Role_Magic[Command[i].lAccessory].ReadInt("设置","startx")+FightRole[i].x;
fightmagic.y = Role_Magic[Command[i].lAccessory].ReadInt("设置","starty")+FightRole[i].y;
}
else
{
fightmagic.x = Role_Magic[Command[i].lAccessory].ReadInt("设置","startx")+FightRole[Command[i].kill_who].x;
fightmagic.y = Role_Magic[Command[i].lAccessory].ReadInt("设置","starty")+FightRole[Command[i].kill_who].y;
}
}
else
{
if(Role_Magic[Command[i].lAccessory].ReadInt("设置","相对")) //根据魔法的对象决定魔法图片显示的初位置
{
fightmagic.x = Role_Magic[Command[i].lAccessory].ReadInt("设置","startx")+FightRole[i].x;
fightmagic.y = Role_Magic[Command[i].lAccessory].ReadInt("设置","starty")+FightRole[i].y;
}
else
{
fightmagic.x = Role_Magic[Command[i].lAccessory].ReadInt("设置","startx")+EnemyRole[Command[i].kill_who].x;
fightmagic.y = Role_Magic[Command[i].lAccessory].ReadInt("设置","starty")+EnemyRole[Command[i].kill_who].y;
}
}
}
kill_count=i;
break;
}
//计算攻击力
Account_Attack();
}
else if( bButton[1] ) //攻击
{
bButton[1] = 0;
if( GetEnemyNum()==1 ) //只有一个敌人时
{
Command[command_count].lCommand = ATTACK;
Command[command_count].kill_who=GetLastEnemyNum();
main_count=MAIN;
command_count++;
if( command_count > GetLastRoleNum() ) //开始攻击
{
main_count=ROLE_KILL_ENEMY;
for(i=0; i<3; i++)
if(FightRole[i].use==1)
{
_FREE(Role_Temp);
Role_Temp=Role_Move[i].ReadText("设置","continue");
kill_count=i;
break;
}
Account_Attack();
}
}
else
{
//不止一个敌人
//进入选择敌人状态
Command[command_count].player=1;
nNonce = 0;
main_count=KILL_WHO;
}
}
else if( bButton[2] ) //魔法
{
bButton[2] = 0;
main_count = USER_MAGIC;
}
else if( bButton[3] ) //道具
{
bButton[3] = 0;
//进入选择物品状态
main_count = USER_GOODS;
}
else if( bButton[4] ) //逃跑
{
bButton[4] = 0;
if( bLeave ) //可以逃跑
{
if( random(100) > 50 )
{
font.PrintText(lpDDSBack, 300, 220, "逃跑成功!");
main_count=OVER;
temp_swap=1;
}
else
{
font.PrintText(lpDDSBack, 300, 220, "逃跑失败!");
main_count=OVER;
temp_swap=4;
}
}
}
}
break;
/////////////////////////////////////////////////////////////////////
// 选择物品
/////////////////////////////////////////////////////////////////////
case USER_GOODS:
{
int ret = m_fightgoods.DoMenu(lpDDSBack, true);
if( ret== 1)
{
//选好了一个物品
//进入选择使用对象模式
main_count = USER_WHO;
nNonce = 0;
}
else if(ret == 2)//没有选择物品
main_count = MAIN;
}
break;
case USER_MAGIC:
{
int ret = m_fightmagic.DoMenu(lpDDSBack, true,command_count);
if( ret== 1)
{
//选好了一个魔法,根据魔法的类型
//进入不同的选择模式
bUseMagic = true;
if(CMagic::MAGIC[m_fightmagic.GetMagicID()].Class==0)
main_count = USER_WHO;
else
main_count = KILL_WHO;
nNonce = 0;
//能不能使用这个魔法
if(!m_fightmagic.IsCanUse(m_fightmagic.GetMagicID(),command_count))
{
GameMessage.DoMenu(lpDDSBack, "魔法不足,不能使用");
main_count = MAIN; //回到选择模式
bUseMagic = false;
}
}
else if(ret == 2)//没有选择物品
main_count = MAIN;
}
break;
}
//显示少血
Print_Attack();
//显示加血
Print_Lifeup();
return 0;
}
// 计算攻击力
void CFight::Account_Attack(void)
{
if(main_count==ROLE_KILL_ENEMY) //主角攻击部分,按照攻击者的攻击力和被攻击
{ //者的防御力进行一定的计算,其中加入了移动
int who=Command[kill_count].kill_who; //因素。who是被攻击者,计算出来的temp将是
int temp; //被攻击者减少的HP。
if(kill_count==0)
{
temp=Hero[0]->Attack*(1+Hero[0]->Bp)/100-Enemy[who].Defend;
if( temp < 500)
{
temp=(random(100)+400) * ( 200- Enemy[who].Bp ) / 100;
}
else
temp=(temp+random(temp/5))*(200-Enemy[who].Bp) / 100;
EnemyRole[who].UnAttack=temp;
}
else if(kill_count==1)
{
temp=Hero[1]->Attack*(1+Hero[1]->Bp)/100-Enemy[who].Defend;
if( temp < 500 )
{
temp=(random(100)+400) * ( 200- Enemy[who].Bp ) / 100;
}
else
temp=(temp+random(temp/5))*(200-Enemy[who].Bp) / 100;
EnemyRole[who].UnAttack=temp;
}
else if(kill_count==2)
{
temp=Hero[2]->Attack*(1+Hero[2]->Bp)/100-Enemy[who].Defend;
if( temp < 500 )
{
temp=(random(100)+400) * ( 200- Enemy[who].Bp ) / 100;
}
else
temp=(temp+random(temp/5))*(200-Enemy[who].Bp) / 100;
EnemyRole[who].UnAttack=temp;
}
}
else if(main_count==ENEMY_KILL_ROLE) //敌人攻击
{
int who=E
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -