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

📄 fight.cpp

📁 国产的RPG源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		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 + -