亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? role.cpp

?? 成熟的RPG引擎,Flysky發布. 斜視角引擎.
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//#include "CRole.h" //角色Role
#include "../GameH.h"
#include "../GameLib/CIni.h"
//=========================================================================
//					實現部分 Flysky
//=========================================================================
//構造/析構 函數
POINT CRole::getPY() //獲取偏移
{
POINT tp;
tp.x=PX;
tp.y=PY;
return tp;
}

CRole::CRole(CMap &cm) //made
{
	Map=(CMap *)&cm; //指針
	PX=int(0.5*(ScreenHeight-(TileHeight>>1)+(ScreenWidth>>1)-(TileWidth>>1))/(TileWidth>>1)); //主角一的坐標與地圖的偏移
	PY=int(0.5*(ScreenHeight-(ScreenWidth>>1))/(TileWidth>>1));
	Map->MapStartX=-PX;Map->MapStartY=-PY;
	PRole=0;
	if (!rl.empty()){rl.clear();}
	if (!actor.empty()){actor.clear();}
	if (!npc.empty()){npc.clear();}
}

CRole::CRole(CMap &cm,char *FileName)
{
	Map=(CMap *)&cm; //指針
	PX=int(0.5*(ScreenHeight-(TileHeight>>1)+(ScreenWidth>>1)-(TileWidth>>1))/(TileWidth>>1)); //主角一的坐標與地圖的偏移
	PY=int(0.5*(ScreenHeight-(ScreenWidth>>1))/(TileWidth>>1));
	Map->MapStartX=-PX;Map->MapStartY=-PY;
	PRole=0;
	LoadRoleIni(FileName);
	if (!rl.empty()){rl.clear();}
	if (!actor.empty()){actor.clear();}
	if (!npc.empty()){npc.clear();}
}

CRole::~CRole() //釋放函數
{
   	Map=NULL; //空指針
	if (!rl.empty())
	{ 
		for(int i=0;i<int(rl.size());i++)
		{
			if (rl[i].lpDDS_ROLEL!=NULL) {rl[i].lpDDS_ROLEL->Release();rl[i].lpDDS_ROLEL=NULL;}
			if (rl[i].lpDDS_ROLEP!=NULL) {rl[i].lpDDS_ROLEP->Release();rl[i].lpDDS_ROLEP=NULL;}
		}
		rl.clear();
	}
	if (!actor.empty()){actor.clear();}
	if (!npc.empty()){npc.clear();} //釋放
}

void CRole::LoadRoleIni(char *FileName){if (FileName!=NULL) {strcpy(IniFileName,FileName);}} //讀取INI

//索引表部分

int CRole::TableAdd(stFindTable sf) //插入索引表
{
	//二分找表法
	//ByFlysky
	if (!RlFind.empty())
	{
		//12
		//_2_____1___________
		//|13|15|17|19|21|23|
		//|__|__|__|__|__|__|
		int i=int(RlFind.size());
		POINT tp={0,i}; //X是從 Y是到
		while(tp.x<tp.y) //如果小于兩個
		{
			i=int((tp.x+tp.y)>>1); //除以二
			if (sf.value<RlFind[i].value) tp.y=i-1; //減1
			else if (sf.value>RlFind[i].value) tp.x=i+1; //加一
			else if (sf.value==RlFind[i].value)
			{
				if (RlFind[i].ID!=sf.ID)
				{
					tp.x=i; //X等
					tp.y=i;  //Y等
				}
				else RlFind.erase(RlFind.begin()+i); //刪除這個
			}
		}
		if (tp.x==tp.y)	
		{
		RlFind.insert(RlFind.begin()+tp.x,sf); //插入數據
		return tp.x;
		}
		return -1;
	}
	RlFind.push_back(sf); //OK
	return int(RlFind.size());
}

int CRole::FindDataT(int Value)
{
 int Ret=-1;
 int i=int(RlFind.size());
 POINT tp={0,i}; //X是從 Y是到
 while(tp.x<=tp.y) //如果小于兩個
 {
	i=int((tp.x+tp.y)>>1); //除以二
	if (Value<RlFind[i].value) tp.y=i-1; //減1
	else if (Value>RlFind[i].value) tp.x=i+1; //加一
	else if (Value==RlFind[i].value)
	{
		Ret=RlFind[i].ID;
	}
 }
 return Ret;
}
vector<int> CRole::FindDataTV(int Value)//返回一個容器
{
	vector<int> tmp;
	int i=int(RlFind.size());
	POINT tp={0,i}; //X是從 Y是到
	for (int i=0;i<int(RlFind.size());i++)
	{
		if (RlFind[i].value<Value) continue;
		else if (RlFind[i].value==Value)
		{
			tmp.push_back(RlFind[i].ID);
		}
		else if (RlFind[i].value>Value) break;
	}
	return tmp;
}

int CRole::TableAdd(int ID,int value)  //插入
{
	stFindTable tmp; //建立索引
	tmp.ID=ID; tmp.value=value;
	return TableAdd(tmp); //傳入
}

bool CRole::TablePX() //索引表排序
{
	stFindTable tmp;
	for (int i=0;i<int(RlFind.size()-1);i++)
	{
		tmp=RlFind[i+1];
		int j=i;
		while (j>=0&&tmp.value<RlFind[j].value)
		{
			RlFind[j+1]=RlFind[j];
			j--;
		}
		RlFind[j+1]=tmp;	
	}
	return true;
}
//添加刪除部分
stRole CRole::StCToSt(stRoleC tmpc) //從接口結構轉換為內部結構
{
	stRole sr;
	strcpy(sr.Name,tmpc.Name); //名字
	sr.EScrFName=tmpc.EScrFName; //初始腳本
	sr.Exp=tmpc.Exp; //經驗值
	sr.MaxExp=tmpc.MaxExp; //M經驗值
	sr.face=tmpc.face; //面向
	sr.facej=0;
	sr.IsNPC=tmpc.IsNPC; //以后改
	strcpy(sr.facePic,tmpc.facePic); //PIC
	sr.HP=tmpc.HP;
	sr.MP=tmpc.MP;
	sr.MaxHP=tmpc.MaxHP;
	sr.MaxMP=tmpc.MaxMP;
	sr.Level=tmpc.Level;
	sr.lpDDS_ROLEL=NULL;
	sr.lpDDS_ROLEP=NULL;
	sr.move=tmpc.move; //移動
	sr.movex=tmpc.movex;
	sr.movey=tmpc.movey;
	sr.oldx=0;
	sr.oldy=0;
	sr.PathSteps=0;
	sr.PathCSteps=0;
	sr.roler=tmpc.roler;
	sr.WalkLoop=false;
	sr.facejd=false;
	sr.VS=tmpc.VS;
	sr.x=tmpc.x;
	sr.y=tmpc.y;
	return sr; //返回
}

bool CRole::AddActor(char *RoleIDent)
{
	CIni inifile(IniFileName);//打開一個INI文件
	stRoleC nrole; //ROLE結構
	nrole.Name=inifile.ReadText(RoleIDent,"Name"); //Role的名字
	nrole.IsNPC=false; //是角色
	nrole.face=inifile.ReadInt(RoleIDent,"Face"); //Role的站向
	nrole.Level=inifile.ReadInt(RoleIDent,"Level"); //Role的等級
	nrole.HP=inifile.ReadInt(RoleIDent,"Hp"); //Role的等級
	nrole.MP=inifile.ReadInt(RoleIDent,"Hp"); //Role的等級
	nrole.MaxHP=nrole.HP;nrole.MaxExp=nrole.MP; //滿血一樣
	nrole.Exp=inifile.ReadInt(RoleIDent,"Exp"); //第一級的經驗導入
	nrole.VS=IntTobool(inifile.ReadInt(RoleIDent,"VS")); //是否顯示
	//nrole.RLSEx
	nrole.facePic=inifile.ReadText(RoleIDent,"PicName"); //Role的人物圖片
	nrole.roler.left=inifile.ReadInt(RoleIDent,"PicLeft"); //Pic的左邊偏移
	nrole.roler.top=inifile.ReadInt(RoleIDent,"PicTop"); //Pic的上邊偏移
	nrole.roler.right=inifile.ReadInt(RoleIDent,"PicWidth"); //Pic的寬度
	nrole.roler.bottom=inifile.ReadInt(RoleIDent,"PicHeight"); //Pic的高度
	bool ret=AddActor(nrole);
	if (nrole.Name!=NULL) {delete[]nrole.Name;nrole.Name=NULL;}
	if (nrole.facePic!=NULL) {delete[]nrole.facePic;nrole.facePic=NULL;}
	return ret;
}

bool CRole::AddActor(stRoleC tactc)
{
		char tmpcx[255];
		if (tactc.IsNPC==false) //是NPC
		{
			stRole tact=StCToSt(tactc); //建立真正的
			strcpy(tmpcx,NPCPath);
			strcat(tmpcx,tact.facePic);	
			if(CreateSurface(tact.lpDDS_ROLEP,tmpcx,0,0)!=true) return false; //說不定有問題
			if (actor.empty())
			{
			tact.x=0;
			tact.y=0;//刷新坐標 
			}
			else
			{
				tact.x=rl[actor[0]].x+int(actor.size());
				tact.y=rl[actor[0]].y+int(actor.size());//刷新坐標 
			}
			tact.facej=0; //刷新步數為站好
			if (tact.roler.left==-9999999&&tact.roler.top==-9999999)
			{
				POINT tp=FindRoleP(tact.lpDDS_ROLEP);
				tact.PicS.x=tp.x;tact.PicS.y=tp.y; //純正偏移數據
				tact.roler.left=tact.roler.right-TileWidth-tp.x;tact.roler.top=tact.roler.bottom-TileHeight-tp.y; //刷新偏移
			}
			rl.push_back(tact); //放入
			if (!rl.empty()) 
			{
				actor.push_back(int(rl.size())-1); //將角色的ID放入主角表
				stFindTable sf;
				sf.ID=int(rl.size())-1; //等于這個ID
				sf.value=tact.x+tact.y; //將X+y進入
				if (RlFind.empty()) RlFind.push_back(sf); //OK
				else TableAdd(sf); //搜索插入索引表
				NPCZDS(int(rl.size())-1); //遮擋計算
			}
		}
		return true;
}

bool CRole::AddNPC(char *FileName) //從列表添加NPC
{
	char *tc; //臨時
	bool ret=false;
	stRoleC nrole; //ROLE結構
	CIni inifile(FileName);//打開一個INI文件
	int MAX_NPC=inifile.ReadInt("NPC","Max_NPC"); //一共的NPC數
	for (int i=0;i<MAX_NPC;i++)
	{
		tc=inifile.ReadText("NPC",i); //讀取名字
		nrole.Name=inifile.ReadText(tc,"Name"); //Role的名字
		nrole.IsNPC=true; //是NPC
		nrole.VS=IntTobool(inifile.ReadInt(tc,"VS")); //是否顯示
		nrole.face=inifile.ReadInt(tc,"Face"); //Role的站向
		nrole.x=inifile.ReadInt(tc,"x"); //RoleX
		nrole.y=inifile.ReadInt(tc,"y"); //RoleY
		nrole.movex=inifile.ReadInt(tc,"Move_x"); //RoleX
		nrole.movey=inifile.ReadInt(tc,"Move_y"); //RoleY
		nrole.EScrFName=inifile.ReadText(tc,"Script"); //Role對話
		nrole.facePic=inifile.ReadText(tc,"PicName"); //Role的人物圖片
		nrole.roler.left=inifile.ReadInt(tc,"PicLeft"); //Pic的左邊偏移
		nrole.roler.top=inifile.ReadInt(tc,"PicTop"); //Pic的上邊偏移
		nrole.roler.right=inifile.ReadInt(tc,"PicWidth"); //Pic的寬度
		nrole.roler.bottom=inifile.ReadInt(tc,"PicHeight"); //Pic的高度
		ret=AddNPC(nrole);
		if (nrole.Name!=NULL) {delete[]nrole.Name;nrole.Name=NULL;}
		if (nrole.facePic!=NULL) {delete[]nrole.facePic;nrole.facePic=NULL;}
		if (ret==false) return false;
	}
	if(tc!=NULL) delete []tc;tc=NULL;
	return ret;
}

bool CRole::AddNPC(stRoleC tnpcc)
{
	char tmpcx[255];
	if (tnpcc.IsNPC==true) //是NPC
	{
		stRole tnpc=StCToSt(tnpcc); //建立真正的
		sprintf(tmpcx,"%s%s",NPCPath,tnpc.facePic); //路徑OK
		if(CreateSurface(tnpc.lpDDS_ROLEP,tmpcx,0,0)!=true) return false; //說不定有問題
		if (tnpc.x<0) tnpc.x=0; if (tnpc.y<0)tnpc.y=0;
		if (tnpc.x>=Map->Width) tnpc.x=Map->Width-1; if (tnpc.y>=Map->Height)tnpc.y=Map->Height-1;
		tnpc.facej=0; //刷新步數為站好
		//圖片偏移自判斷 技術
		if (tnpc.roler.left==-9999999&&tnpc.roler.top==-9999999)
		{
			POINT tp=FindRoleP(tnpc.lpDDS_ROLEP); //尋找偏移
			tnpc.PicS.x=tp.x;tnpc.PicS.y=tp.y; //純正偏移數據
			tnpc.roler.left=tnpc.roler.right-TileWidth-tp.x;tnpc.roler.top=tnpc.roler.bottom-TileHeight-tp.y; //刷新偏移
		}
		rl.push_back(tnpc); //放入
		if (!rl.empty()) 
		{
			npc.push_back(int(rl.size())-1); //將角色的ID放入主角表
			//角色索引表
			stFindTable sf;
			sf.ID=int(rl.size())-1; //等于這個ID
			sf.value=tnpc.x+tnpc.y; //將X+y進入
			if (RlFind.empty()) RlFind.push_back(sf); //OK
			else TableAdd(sf); //搜索插入索引表

			NPCZDS(int(rl.size())-1); //遮擋計算

			Map->CBlockOn(true,rl[rl.size()-1].x,rl[rl.size()-1].y); //加上障礙
			return true;
		}
		return false;
	}
	return false;
}

void CRole::DeleteActor(int ID) //刪除主角
{
	if (!rl.empty()) rl.erase(rl.begin()+actor[ID]); //先刪除這個
	if (!RlFind.empty()) for (int i=0;i<int(RlFind.size());i++) if (RlFind[i].ID==actor[ID]) RlFind.erase(RlFind.begin()+i);
}

void CRole::DeleteNPC(int ID) //刪除NPC
{
	if (!rl.empty()) rl.erase(rl.begin()+npc[ID]); //先刪除這個
	if (!RlFind.empty()) for (int i=0;i<int(RlFind.size());i++) if (RlFind[i].ID==npc[ID]) RlFind.erase(RlFind.begin()+i);
}

int CRole::GetActorNum(){if (!actor.empty()) return (int)actor.size(); return 0;} //獲取主角數目
int CRole::GetNpcNum(){if (!npc.empty()) return (int)npc.size(); return 0;} //獲取NPC數目

int CRole::NPCNameToID(char *Name) //NPC名字轉ID
{
	//最笨的方法,其實這里不需要快
	int ret=-1;
	if (!npc.empty()) //如果不是空的
	{
		for (int i=0;i<int(npc.size());i++) //循環
			if (stricmp(rl[npc[i]].Name,Name)==0) ret=i;
			//if (*rl[npc[i]].Name==*Name) return i; //返回ID
	}
	return ret;
}

int CRole::ActorNameToID(char *Name) //主角名字轉ID
{
	//最笨的方法,其實這里不需要快
	int ret=-1;
	if (!actor.empty()) //如果不是空的
	{
		for (int i=0;i<int(actor.size());i++) //循環
			if (stricmp(rl[actor[i]].Name,Name)==0) ret=i;
	}
	return ret;
}


int CRole::NameToID(char *Name) //名字轉ID,注意,此函數返回最后一個
{
	//最笨的方法,其實這里不需要快
	int ret=-1;
	if (!rl.empty()) //如果不是空的
	{
		for (int i=0;i<int(rl.size());i++) //循環
			if (stricmp(rl[i].Name,Name)==0) ret=i;
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品福利影院| 久久久国产精品不卡| 日本一区二区三区四区在线视频 | 92国产精品观看| 久久国产夜色精品鲁鲁99| 国产99久久久国产精品潘金| 欧美日本在线播放| 成人app在线| 国产激情视频一区二区三区欧美 | 91尤物视频在线观看| 亚洲高清免费观看| 中文字幕第一区综合| 欧美精品一卡两卡| 99精品热视频| 国产一区 二区| 日韩视频一区二区三区在线播放| 国产精品伦一区| 国产精品九色蝌蚪自拍| 国产盗摄精品一区二区三区在线| 欧美疯狂性受xxxxx喷水图片| 亚洲综合精品久久| 国产乱对白刺激视频不卡| ...xxx性欧美| 91在线视频18| 日韩久久久精品| 99久久精品国产网站| 精品在线一区二区| 日韩av在线播放中文字幕| 亚洲黄色录像片| 日本一二三不卡| 久久久一区二区| 精品日韩一区二区三区| 777精品伊人久久久久大香线蕉| 91在线视频观看| 91影视在线播放| av一区二区不卡| 成人爱爱电影网址| 国产丶欧美丶日本不卡视频| 久久av资源网| 精品综合免费视频观看| 麻豆国产精品777777在线| 日韩精品一二三| 日韩1区2区3区| 日本三级韩国三级欧美三级| 天堂精品中文字幕在线| 亚洲一区二区三区四区五区中文| 亚洲人成伊人成综合网小说| 亚洲美女屁股眼交3| 亚洲欧美韩国综合色| 国产精品久久久久aaaa| 国产精品久久久久久久久晋中 | 欧美精品在欧美一区二区少妇| 精品综合免费视频观看| 韩国三级在线一区| 国产精品影视网| 成人动漫一区二区| 欧美一区二区三区在线观看视频 | 香港成人在线视频| 国产午夜精品一区二区三区四区| 色久优优欧美色久优优| 午夜精品久久久久| 首页综合国产亚洲丝袜| 国产欧美精品区一区二区三区| 欧美写真视频网站| jlzzjlzz亚洲日本少妇| 亚洲精品ww久久久久久p站| 欧美激情一区二区三区| 久久精品亚洲麻豆av一区二区| 欧美一区日本一区韩国一区| 91传媒视频在线播放| 欧洲av在线精品| 91麻豆福利精品推荐| 日本怡春院一区二区| 日日摸夜夜添夜夜添亚洲女人| 亚洲欧美偷拍三级| 国产人成亚洲第一网站在线播放| 91麻豆精品国产91久久久久| 91在线视频18| 欧美乱妇23p| 大桥未久av一区二区三区中文| 亚洲伊人伊色伊影伊综合网| 久久久亚洲精品一区二区三区| 91看片淫黄大片一级在线观看| 久久成人免费日本黄色| 夜色激情一区二区| 国产日韩av一区| 久久老女人爱爱| 99精品视频一区二区三区| 日韩欧美精品在线视频| 欧美精品一区在线观看| 精品久久久影院| 精品成人一区二区| 亚洲免费视频中文字幕| 国产精品网站在线播放| 亚洲国产精品精华液网站| 亚洲不卡在线观看| 日本不卡一区二区| 成人国产精品免费观看视频| 欧美性大战久久久久久久 | 日韩一区二区三区视频在线观看| 在线成人av网站| 中文字幕免费不卡| 一区二区三区免费观看| 亚洲男人的天堂av| 国产福利一区二区| 精品视频免费看| 中文字幕一区二区三| 一区二区高清免费观看影视大全| 激情久久五月天| 91片在线免费观看| 欧美国产综合一区二区| 亚洲18影院在线观看| 色综合久久久久网| 精品少妇一区二区三区在线播放| 亚洲最新在线观看| 国产精品888| 日韩视频一区在线观看| 亚洲欧美日韩在线不卡| 国产成人精品午夜视频免费| 欧美日韩午夜在线视频| 亚洲日韩欧美一区二区在线| 久久精品国产亚洲aⅴ| 欧美日本韩国一区| 日韩美女精品在线| 国产白丝精品91爽爽久久| 91精品国产色综合久久不卡蜜臀| 中文字幕免费观看一区| 韩国v欧美v日本v亚洲v| 91麻豆成人久久精品二区三区| 久久久www成人免费无遮挡大片| 亚洲一区二区3| 91麻豆福利精品推荐| 欧美激情一区二区三区不卡| 国产一区二区三区香蕉| 91精品国产综合久久福利| 亚洲国产日韩一级| 91在线你懂得| 亚洲精品伦理在线| av激情亚洲男人天堂| 国产精品嫩草久久久久| 麻豆精品视频在线观看免费| 日韩一级免费观看| 日韩精品免费专区| 日韩午夜激情视频| 亚洲国产cao| 制服.丝袜.亚洲.中文.综合| 一区二区三区在线免费播放| 日本二三区不卡| 亚洲欧洲综合另类| 日韩国产精品久久久| 日韩欧美一区二区三区在线| 午夜日韩在线观看| 在线播放欧美女士性生活| 免费观看成人av| 亚洲欧洲成人自拍| 日本一区二区三区电影| 综合色天天鬼久久鬼色| 国产91精品免费| 日韩一区二区三免费高清| 欧美成人精品3d动漫h| 欧美三级三级三级| 粉嫩绯色av一区二区在线观看 | 久久九九久精品国产免费直播| 国产日韩影视精品| 久久久久99精品一区| 欧美日韩亚洲另类| 美女免费视频一区二区| 国产精品乱码妇女bbbb| 欧美亚洲国产bt| 99视频有精品| 国产九色sp调教91| www..com久久爱| 青青国产91久久久久久| 亚洲制服丝袜av| 亚洲丰满少妇videoshd| 国产精品欧美一级免费| 国产精品欧美一区二区三区| 亚洲欧美日韩在线不卡| 国产jizzjizz一区二区| 欧美中文字幕一区| 日本一区二区三区四区| 午夜久久久久久久久久一区二区| 亚洲午夜在线电影| 国产麻豆成人精品| 精品中文字幕一区二区| 亚洲成人一区二区| 麻豆精品国产传媒mv男同| 不卡的av电影在线观看| 99久久久久久99| 大美女一区二区三区| 欧美日韩成人综合在线一区二区| 99久久99久久精品国产片果冻| 欧美亚洲一区三区| 久久精品欧美一区二区三区不卡| 久久综合九色综合97_久久久 | 日韩电影一区二区三区四区| 亚洲国产你懂的| 亚洲亚洲人成综合网络| 国产一区在线观看麻豆| 福利一区二区在线|