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

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

?? path.pas

?? 仙境傳說(RO)私人服務器端源代碼。第一次上傳。
?? PAS
字號:
unit Path;



interface

uses
	Windows, SysUtils, Common;

//==============================================================================
// 娭悢掕媊
		function  DirMove(tm:TMap; var xy:TPoint; Dir:byte; bb:array of byte):boolean;
		function  CanMove(tm:TMap; x0, y0, x1, y1:integer):boolean;
		procedure AddPath2(var aa:array of rHeap; var n:byte; rh:rHeap; x1, y1, x2, y2, dx, dy, dir, dist:integer);
		function  SearchPath2(var path:array of byte; tm:TMap; x1, y1, x2, y2:cardinal):byte;
		procedure PopHeap(var aa:array of rHeap;var n:byte);
		procedure PushHeap(var d:rHeap; var aa:array of rHeap;var n:byte);
		procedure UpHeap(x:byte; var aa:array of rHeap;var n:byte);
//==============================================================================










implementation
//==============================================================================
function DirMove(tm:TMap; var xy:TPoint; Dir:byte; bb:array of byte):boolean;
var
	i:integer;
	xy1:TPoint;
begin
	Result := false;
	for i := 0 to Length(bb) - 1 do begin
		xy1 := xy;
		case (bb[i] + Dir) mod 8 of
		0: begin           Inc(xy.Y); end;
		1: begin Dec(xy.X);Inc(xy.Y); end;
		2: begin Dec(xy.X);           end;
		3: begin Dec(xy.X);Dec(xy.Y); end;
		4: begin           Dec(xy.Y); end;
		5: begin Inc(xy.X);Dec(xy.Y); end;
		6: begin Inc(xy.X);           end;
		7: begin Inc(xy.X);Inc(xy.Y); end;
		end;
		if (tm.gat[xy.X][xy.Y] and 1) = 0 then begin
			xy := xy1;
			exit;
		end;
	end;
end;
//------------------------------------------------------------------------------
function CanMove(tm:TMap; x0, y0, x1, y1:integer):boolean;
var
	b1 :byte;
	b2 :byte;
begin
	Result := false;
	if (x0 - x1 < -1) or (x0 - x1 > 1) or (y0 - y1 < -1) or (y0 - y1 > 1) then exit;
	if (x1 < 0) or (y1 < 0) or (x1 >= tm.Size.X) or (y1 >= tm.Size.Y) then exit;
	b1 := tm.gat[x0][y0];
	if (b1 and 1) = 0 then exit;
	b1 := tm.gat[x1][y1];
  if (b1 and 1) = 0 then exit;
  if (x0 = x1) or (y0 = y1) then begin
    Result := true;
    exit;
  end;
  b1 := tm.gat[x0][y1];
  b2 := tm.gat[x1][y0];
	if ((b1 and 1) = 0) or ((b2 and 1) = 0) then exit;

  Result := true;
end;

//------------------------------------------------------------------------------
procedure AddPath2(var aa:array of rHeap; var n:byte; rh:rHeap; x1, y1, x2, y2, dx, dy, dir, dist:integer);
var
	x, y:integer;
	rh1	:rHeap;
	cost:word;
begin
	x := rh.mx + dx;
	if (x < 0) or (x > 30) then exit;
	y := rh.my + dy;
	if (y < 0) or (y > 30) then exit;
	cost := rh.cost2 + dist + (abs(x2 - (rh.x + dx)) + abs(y2 - (rh.y + dy))) * 10;
	if mm[x][y].cost <> 0 then begin
		//崱傑偱偵摨偠揰偑偁偭偨側傜cost傪斾妑偟彫偝偄側傜怴偟偄path偱偦偺揰傪嵞搊榐
		if mm[x][y].cost > cost then begin
			rh1.x := rh.x + dx;
			rh1.y := rh.y + dy;
			rh1.mx := x;
			rh1.my := y;
			rh1.cost2 := rh.cost2 + dist;
			rh1.cost1 := cost;
			//rh1.dir := dir;
			CopyMemory(@rh1.path, @rh.path, rh.pcnt);
			rh1.pcnt := rh.pcnt + 1;
			rh1.path[rh.pcnt] := dir;
			mm[x][y].cost := cost;
			mm[x][y].pcnt := rh1.pcnt;
			CopyMemory(@mm[x][y].path, @rh1.path, rh1.pcnt);
			if mm[x][y].addr <> 0 then begin
				aa[mm[x][y].addr] := rh1;
				UpHeap(mm[x][y].addr, aa, n);
			end else begin
				mm[x][y].addr := n;
				PushHeap(rh1, aa, n);
			end;
		end;
	end else begin
			//摨偠揰偑側偗傟偽偦偺揰傪搊榐
			rh1.x := rh.x + dx;
			rh1.y := rh.y + dy;
			rh1.mx := x;
			rh1.my := y;
			rh1.cost2 := rh.cost2 + dist;
			rh1.cost1 := cost;
			//rh1.dir := dir;
			CopyMemory(@rh1.path, @rh.path, rh.pcnt);
			rh1.pcnt := rh.pcnt + 1;
			rh1.path[rh.pcnt] := dir;
			mm[x][y].cost := cost;
			mm[x][y].pcnt := rh1.pcnt;
			CopyMemory(@mm[x][y].path, @rh1.path, rh1.pcnt);
			mm[x][y].addr := n + 1;
			PushHeap(rh1, aa, n);
	end;
end;
//------------------------------------------------------------------------------
function SearchPath2(var path:array of byte; tm:TMap; x1, y1, x2, y2:cardinal):byte;
var
	aa	:array[0..255] of rHeap;
	x, y:integer;
	rh	:rHeap;
	n		:byte;
	//cost:word;
	//str:string;
	i, j:integer;
begin
	ZeroMemory(@aa, sizeof(aa));
	aa[1].x := x1;
	aa[1].y := y1;
	aa[1].mx := 15;
	aa[1].my := 15;
	aa[1].cost2 := 0;
	aa[1].cost1 := 1;
	//aa[1].dir := 0;
	aa[1].pcnt := 0;
	n := 1;
	ZeroMemory(@mm, sizeof(mm));
	mm[15][15].cost := 1;
	mm[15][15].addr := 1;
	
	while (n <> 0) and ((aa[1].x <> x2) or (aa[1].y <> y2)) do begin
		rh := aa[1];
		PopHeap(aa, n);
		if CanMove(tm, rh.x, rh.y, rh.x+1, rh.y-1) then
			AddPath2(aa, n, rh, x1, y1, x2, y2,  1, -1, 5, 14);
		if CanMove(tm, rh.x, rh.y, rh.x+1, rh.y  ) then
			AddPath2(aa, n, rh, x1, y1, x2, y2,  1,  0, 6, 10);
		if CanMove(tm, rh.x, rh.y, rh.x+1, rh.y+1) then
			AddPath2(aa, n, rh, x1, y1, x2, y2,  1,  1, 7, 14);
		if CanMove(tm, rh.x, rh.y, rh.x  , rh.y+1) then
			AddPath2(aa, n, rh, x1, y1, x2, y2,  0,  1, 0, 10);
		if CanMove(tm, rh.x, rh.y, rh.x-1, rh.y+1) then
			AddPath2(aa, n, rh, x1, y1, x2, y2, -1,  1, 1, 14);
		if CanMove(tm, rh.x, rh.y, rh.x-1, rh.y  ) then
			AddPath2(aa, n, rh, x1, y1, x2, y2, -1,  0, 2, 10);
		if CanMove(tm, rh.x, rh.y, rh.x-1, rh.y-1) then
			AddPath2(aa, n, rh, x1, y1, x2, y2, -1, -1, 3, 14);
		if CanMove(tm, rh.x, rh.y, rh.x  , rh.y-1) then
			AddPath2(aa, n, rh, x1, y1, x2, y2,  0, -1, 4, 10);
	end;
	if n = 0 then begin
		Result := 0;
		exit;
	end;

	x := aa[1].mx;
	y := aa[1].my;

	if mm[x][y].cost <> 0 then begin
		CopyMemory(@path, @mm[x][y].path, mm[x][y].pcnt);
		Result := mm[x][y].pcnt;
	end else begin
		Result := 0;
	end;

end;
//------------------------------------------------------------------------------
// 僸乕僾偐傜嵟彫偺梫慺傪嶍彍偡傞
procedure PopHeap(var aa:array of rHeap;var n:byte);
var
	i, j	:cardinal;
begin
	// 僸乕僾偑嬻偱側偄偙偲傪妋擣偡傞
	if n < 1 then exit;

	// 僸乕僾偺嵟彫偺梫慺傪嶍彍偡傞
	mm[aa[1].mx][aa[1].my].addr := 0;

	// 崻偐傜弶傔偰丆愡倝偑巕傪傕偭偰偄傞尷傝孞傝曉偡
	i := 1;
	while i <= (n div 2) do begin // 梩傪帩偮愡偼 1..n/2
		// 愡倝偺巕偺偆偪丄彫偝偄曽傪倞偲偡傞
		j := i * 2;
		if (j+1 <= n) and (aa[j].cost1 >= aa[j+1].cost1) then Inc(j);
		// 愡倝偵愡倞偺抣傪擖傟偰丆愡倞偵拲栚偡傞
		aa[i] := aa[j];
		mm[aa[i].mx][aa[i].my].addr := i;
		i := j;
	end;

	// 僸乕僾偺嵟屻偺梫慺傪愡i偵堏摦偡傞
	if i <> n then begin
		aa[i] := aa[n];
		mm[aa[i].mx][aa[i].my].addr := i;
		Dec(n);
		UpHeap(i, aa, n);
	end else begin
		Dec(n);
	end;
end;
{
procedure PopHeap(var aa:array of rHeap;var n:byte);
var
	i, j	:cardinal;
	val		:cardinal;
	rh		:rHeap;
begin
	// 僸乕僾偑嬻偱側偄偙偲傪妋擣偡傞
	if n < 1 then exit;

	// 僸乕僾偺嵟屻偺梫慺傪愭摢偵堏摦偡傞
	mm[aa[1].mx][aa[1].my].addr := 0;
	aa[1] := aa[n];
	Dec(n);

	// 捑傔傜傟傞梫慺偺抣傪 val 偵僙僢僩偟偰偍偔
	rh := aa[1];
	val := rh.cost1;

	// 崻偐傜弶傔偰丆愡倝偑巕傪傕偭偰偄傞尷傝孞傝曉偡
	i := 1;
	while i <= (n div 2) do begin // 梩傪帩偮愡偼 1..n/2
		// 愡倝偺巕偺偆偪丄彫偝偄曽傪倞偲偡傞
		j := i * 2;
		if (j+1 <= n) and (aa[j].cost1 >= aa[j+1].cost1) then Inc(j);
		// 傕偟丆恊偑巕傛傝戝偒偔側偄偲偄偆娭學偑惉傝棫偰偽丆
		// 偙傟埲忋捑傔傞昁梫偼側偄
		if val <= aa[j].cost1 then break;
		// 愡倝偵愡倞偺抣傪擖傟偰丆愡倞偵拲栚偡傞
		aa[i] := aa[j];
		mm[aa[i].mx][aa[i].my].addr := i;
		i := j;
	end;

	//愭摢偵偁偭偨梫慺傪愡倝偵擖傟傞
	aa[i] := rh;
	mm[aa[i].mx][aa[i].my].addr := i;
end;
}
//------------------------------------------------------------------------------
// 僸乕僾偵梫慺傪搊榐偡傞
procedure PushHeap(var d:rHeap; var aa:array of rHeap;var n:byte);
var
	i		:cardinal;
	val	:cardinal;
	rh		:rHeap;
begin
	Inc(n);
	aa[n] := d;

	// 晜偐傃忋偑傜偣傞梫慺偺抣傪 val 偵擖傟偰偍偔
	rh := aa[n];
	val := rh.cost1;
	// 梫慺偑崻傑偱晜偐傃忋偑偭偰偄側偄丆偐偮
	// 乽恊偑巕傛傝戝偒偄乿偁偄偩孞傝曉偡
	i := n;
	while (i > 1) and (aa[i div 2].cost1 > val) do begin
		// 恊偺抣傪巕偵堏偡
		aa[i] := aa[i div 2];
		mm[aa[i].mx][aa[i].my].addr := i;
		i := i div 2;
	end;

	// 嵟廔揑側棊偪拝偒愭偑寛傑偭偨
	aa[i] := rh;
	mm[aa[i].mx][aa[i].my].addr := i;
end;
//------------------------------------------------------------------------------
// 僸乕僾拞偺 x 斣栚偺梫慺傪昁梫側応強傑偱晜偐傃忋偑傜偣傞
procedure UpHeap(x:byte; var aa:array of rHeap;var n:byte);
var
	i		:cardinal;
	val	:cardinal;
	rh		:rHeap;
begin
	// 晜偐傃忋偑傜偣傞梫慺偺抣傪 val 偵擖傟偰偍偔
	rh := aa[x];
	val := rh.cost1;
	// 梫慺偑崻傑偱晜偐傃忋偑偭偰偄側偄丆偐偮
	// 乽恊偑巕傛傝戝偒偄乿偁偄偩孞傝曉偡
	i := x;
	while (i > 1) and (aa[i div 2].cost1 > val) do begin
		// 恊偺抣傪巕偵堏偡
		aa[i] := aa[i div 2];
		mm[aa[i].mx][aa[i].my].addr := i;
		i := i div 2;
	end;

	// 嵟廔揑側棊偪拝偒愭偑寛傑偭偨
	aa[i] := rh;
	mm[aa[i].mx][aa[i].my].addr := i;
end;
//==============================================================================
end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱妇无码大片在线观看| 欧美日本国产一区| 亚洲妇女屁股眼交7| 欧美精品一区二区三区一线天视频| 成人av网址在线| 免费精品视频在线| 亚洲免费视频成人| 欧美国产成人精品| 精品少妇一区二区三区视频免付费| 国产精品一二三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲男人的天堂在线观看| 精品国产乱码久久久久久久| 欧美疯狂性受xxxxx喷水图片| 91小视频免费观看| av亚洲产国偷v产偷v自拍| 国产一区在线观看视频| 日本麻豆一区二区三区视频| 国产婷婷色一区二区三区| 日韩视频中午一区| 欧美精品在线观看一区二区| 欧美自拍偷拍一区| 在线视频一区二区三| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 亚洲成人你懂的| 国产欧美日韩久久| 欧美国产精品一区| 国产精品青草综合久久久久99| 国产三级精品视频| 亚洲欧洲色图综合| 国产精品初高中害羞小美女文| 久久久久国产成人精品亚洲午夜| 亚洲精品在线网站| 国产精品视频九色porn| 中文字幕亚洲成人| 亚洲一区二区三区视频在线播放| 亚洲精品大片www| 成人综合在线网站| 精品一区二区成人精品| 国产成人啪午夜精品网站男同| 国产精品一区二区三区乱码| 欧美本精品男人aⅴ天堂| 久久久欧美精品sm网站| 洋洋av久久久久久久一区| 久久国产福利国产秒拍| 色欧美乱欧美15图片| 2021国产精品久久精品| 亚洲综合偷拍欧美一区色| 国产乱人伦精品一区二区在线观看| 91麻豆精品一区二区三区| 日韩欧美中文字幕一区| 亚洲女人****多毛耸耸8| 国产一区二区免费视频| 欧美一a一片一级一片| 国产欧美精品区一区二区三区| 午夜激情久久久| 97国产精品videossex| 久久久亚洲高清| 日本在线不卡一区| 欧美午夜电影网| 中文字幕佐山爱一区二区免费| 另类小说综合欧美亚洲| 欧美综合欧美视频| 亚洲三级在线播放| 制服丝袜亚洲播放| 亚洲成在人线免费| 一本大道久久a久久综合婷婷| 久久久久免费观看| 极品尤物av久久免费看| 日韩一区二区精品葵司在线| 一区二区三区.www| 色999日韩国产欧美一区二区| 中文字幕欧美激情一区| 国产一区二区三区在线观看免费视频| 欧美精品在欧美一区二区少妇| 亚洲摸摸操操av| 色久优优欧美色久优优| 亚洲人成小说网站色在线| 99国产精品久久久久久久久久久 | 日韩欧美123| 日韩福利电影在线观看| 欧美狂野另类xxxxoooo| 天使萌一区二区三区免费观看| 国产成人亚洲精品狼色在线| 高清国产一区二区| 国产视频一区二区在线| 免费在线观看一区二区三区| 五月天视频一区| 色综合激情五月| 欧美日韩一区精品| 三级影片在线观看欧美日韩一区二区| 欧美经典一区二区| 日韩欧美国产一二三区| 欧美日韩综合一区| 99re视频精品| 国产成人av一区二区三区在线观看| 亚洲mv大片欧洲mv大片精品| 国产精品福利影院| 国产日韩影视精品| 337p日本欧洲亚洲大胆色噜噜| 欧美日韩国产一区| 色哟哟欧美精品| av亚洲精华国产精华精华| 国产成人精品一区二区三区四区| 青青草97国产精品免费观看| 亚洲国产综合在线| 一区二区三区四区在线免费观看| 中文字幕欧美日本乱码一线二线 | 91久久精品一区二区三区| 国产精品66部| 国产精品一区二区久激情瑜伽 | 国产精品久久久久影院色老大 | 国产精品久久久久四虎| 久久久久国产成人精品亚洲午夜| 日韩一级二级三级| 欧美一区二区三级| 日韩三级在线免费观看| 日韩午夜av一区| 日韩情涩欧美日韩视频| 日韩你懂的在线播放| 欧美成人一区二区| 久久影院电视剧免费观看| 久久色在线观看| 欧美激情一区二区三区在线| 久久精品亚洲精品国产欧美| 国产欧美一区二区精品性色超碰 | 久久精品欧美一区二区三区麻豆| 精品久久久三级丝袜| 2023国产精华国产精品| 久久免费国产精品| 麻豆91精品视频| 国产一区二区调教| 成人免费精品视频| 91在线看国产| 欧美日韩一区三区四区| 日韩视频中午一区| 国产日韩欧美激情| 亚洲日穴在线视频| 亚洲成人第一页| 蜜臀精品久久久久久蜜臀| 国产精品一区二区在线看| 91一区二区在线观看| 欧美日韩精品电影| 久久久无码精品亚洲日韩按摩| 中文字幕av一区二区三区| 亚洲美女电影在线| 美女视频黄 久久| a在线欧美一区| 欧美日韩五月天| 久久久99精品久久| 一区二区三区中文字幕精品精品 | 91原创在线视频| 欧美疯狂性受xxxxx喷水图片| xnxx国产精品| 成人涩涩免费视频| 欧美性生活久久| xnxx国产精品| 亚洲综合区在线| 国产美女一区二区三区| 在线欧美小视频| 久久久午夜精品| 亚洲成人av一区二区三区| 国产美女在线观看一区| 欧美三级在线播放| 国产精品视频在线看| 日韩激情一二三区| 92国产精品观看| ww久久中文字幕| 日本亚洲电影天堂| 91视视频在线观看入口直接观看www | zzijzzij亚洲日本少妇熟睡| 欧美精品久久99久久在免费线| 国产欧美视频一区二区三区| 性欧美疯狂xxxxbbbb| heyzo一本久久综合| 欧美精品一区二区在线播放| 亚洲国产一二三| 成人a区在线观看| 久久奇米777| 免费成人小视频| 91成人在线观看喷潮| 中文字幕一区在线观看| 国产麻豆成人精品| 亚洲老司机在线| 丁香天五香天堂综合| 精品女同一区二区| 男女男精品网站| 欧美日韩你懂得| 亚洲高清久久久| 91成人国产精品| 亚洲激情在线播放| 99国产一区二区三精品乱码| 欧美国产成人精品| 丁香啪啪综合成人亚洲小说| 精品国产一区二区三区久久影院| 日本三级亚洲精品| 欧美一区二区二区| 美腿丝袜亚洲三区| 精品乱人伦小说| 精品一区二区在线看|