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

📄 fight.cpp

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