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

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

?? dxwpath.pas

?? Delphi Engine for games.
?? PAS
字號:
{

Original idea by: 
 John Christian Lonningdal, 5 May 1996

Rewritten, improved, corrected by: 

 George K., 23 December 1999
  
 Vladimir V.,  16.10.00 : W-develop@mtu-net.ru; http//www.GameDev.narod.ru

}


unit DXWPath;

interface

uses
  Windows, Messages, SysUtils, Classes, ExtCtrls;

Const
 { directions in which to go. both contstants are used in the same time }
  DirX   : Array[0..7] of ShortInt=( 0,1,0,-1,-1, 1,1,-1);
  DirY   : Array[0..7] of ShortInt=(-1,0,1, 0,-1,-1,1, 1);
  NegDir : Array[0..7] of Byte=(2,3,0,1,6,7,4,5);

  DirV   : Array[0..7] of double=(1.42,1.42,1.42,1.42,1,1,1,1);

  DirToPatternY : Array[0..7] of byte=(0,2,4,6,7,1,3,5);
  //DirRad : Array[0..7] of Double=(0, 1.57, 3.14, 4.71, 5.5, 0.79, 2.37, 3.93);//0 : 2Pi
  DirRad : Array[0..7] of Double=(3.14, 1.57, 0, -1.57, -2.37, 2.37, 0.79, -0.79);//-Pi : +Pi
type

 TDirChangedPoints = record
   Point : TPoint;
   Dir   : Byte;
 end;

type
  TDXPath = class
   private
    FDimW,FDimH   : Integer;

  public
    FStartPos : TPoint;     // starting position
    FEndPos   : TPoint;     // the destination
    FMaxPath     : Integer;


    FPath                 : Array of TPoint;
    FObstacle             : Array of Array of Boolean;
    FDirMap               : Array of Array of Byte;
    FPointList            : Array[0..1] of array of TPoint;

    DirChangedPointsArr   : Array of TDirChangedPoints;
    DirChangedPointsCount : integer;
    DirChangedPoints      : TDirChangedPoints;

    constructor Create(MapW,MapH : integer ); virtual;
    destructor Destroy; override;

    function FindPath : Boolean;
  end;

implementation


constructor TDXPath.Create(MapW,MapH : integer);
begin
 inherited Create;

 FDimW:=MapW;
 FDimH:=MapH;

 SetLength(FObstacle,MapH,MapW);
 SetLength(FDirMap,MapH,MapW);
 SetLength(FPointList[0],MapH*MapW);
 SetLength(FPointList[1],MapH*MapW);
 SetLength(FPath,MapH*MapW);
end;


destructor TDXPath.Destroy;
begin
  inherited Destroy;
end;

/////////////////////////////////////////////
{  Path-Finding routine  }
function TDXPath.FindPath:Boolean;
var
 PointLength : Array[0..1] of Integer; // length of our point arrays
 PointStart  : Array[0..1] of Integer;//my
 CurPoint    : Integer; // point array we're processing at the moment
 Pos         : TPoint;
 i,x,y,j,k   : Integer;

 Stuck       : Boolean; // used to avoid Lock-ups

 Direction   : Byte; // current direction
 { 0 - Up         1 - Right       2 - Down       3 - Left
   4 - Up&Left    5 - Up&Right    6 - Down&Right 7 - Down&Left
   255 - No Direction }

{ pick a new direction }
 function NewDirection(Dir:Byte):Byte;
 begin
  Inc(Dir);
  if Dir>7 then Dir:=0;
  NewDirection:=Dir;
 end;

//end local
begin
 // !!!!!!! FillChar does not work with dinamic Array
 //FillChar(FDirMap,SizeOf(FDirMap),255); // filling our direction map with value 255 = no direction
 For j :=0 to (FDimH-1) do
  For i :=0 to(FDimW-1) do
    FDirMap[j,i]:=255;


 { adding starting position to Point Array #0 }
 PointLength[0]:=1;
 FPointList[0,0]:=FStartPos;

 { Point Array #1 is empty }
 PointLength[1]:=0;

 CurPoint:=0; // current Point array is #0

 PointStart[0]:=0;
 PointStart[1]:=0;

 repeat
  Stuck:=True;

  for j:= PointStart[CurPoint] to PointLength[CurPoint]-1 do
   begin

    Pos:=FPointList[CurPoint,j];

    { expanding the direction map from current position by checking specific directions }
    { variable "i" is our direction. there're 8 directions... }
    for i:=0 to 7 do
     begin
      { gettign new coordinates if we're going in current direction }
      x:=Pos.X+DirX[i];
      y:=Pos.Y+DirY[i];

      { check if our new place is valid }
      { to be valid it must be:
         1) inside 20x20 boundaries
         2) empty
         3) the direction map at this place must be empty (i.e. set to NoDirector = 255) }
      if (x>=0)and(y>=0)and(x<FDimW)and(y<FDimH)and(not FObstacle[y,x])and(FDirMap[y,x]=255) then
       begin
        FDirMap[y,x]:=i; // filling the direction map

        { adding this position to ANOTHER Point Array so our current array won't be corrupted }
        k:=PointLength[CurPoint xor 1];
        FPointList[CurPoint xor 1,k]:=Point(x,y);
        Inc(k);
        { if we got overflow - exit }
        if k>FDimW*FDimH-1 then
         begin
          FindPath:=False;
          Exit;
         end;

        PointLength[CurPoint xor 1]:=k;

        Stuck:=False; // we added new point so we're not stuck!

        { if this point is our destination - LEAVE THIS LOOP! }
        if (x=FEndPos.X)and(y=FEndPos.Y) then Break;
       end;{ add point to point array }
     end;

    { we opened two loops - one break is not enough. here's another one ... }
    if (x=FEndPos.X)and(y=FEndPos.Y) then Break;
   end;//j

  if Stuck then
   begin
    FindPath:=False;
    Exit;
   end;

  PointStart[CurPoint]:=PointLength[CurPoint];
  { changing current Point Array }
  CurPoint:=CurPoint xor 1;
 until ((x=FEndPos.X)and(y=FEndPos.Y));


 { assuming x=EndPos.X, y=EndPos.Y }
 Pos:=Point(x,y);

 { adding FINAL position to our path }
 FMaxPath:=1;
 FPath[0]:=Pos;

  { now adding more points to our PATH, starting from END and using Direction map to
  get back to starting point }
 repeat
  Direction:=FDirMap[y,x]; // loading direction value
  Direction:=NegDir[Direction]; // negating it


  { moving in that direction }
  x:=x+DirX[Direction];
  y:=y+DirY[Direction];

  { adding new point to PATH array }
  FPath[FMaxPath]:=Point(x,y);
  Inc(FMaxPath);

  { if got path overflow - leave }
  if FMaxPath>FDimW*FDimH-1 then
   begin
    FindPath:=False;
    Exit;
   end;
 until (x=FStartPos.X)and(y=FStartPos.Y);

 FindPath:=True;

  DirChangedPointsCount:=0;
  i:=0;

  FDirMap[FPath[FMaxPath-1].y,FPath[FMaxPath-1].x]:=255;

  Direction:=FDirMap[FPath[i].y,FPath[i].x];
  DirChangedPoints.Point:=FPath[i];
  DirChangedPoints.Dir:=255;

  inc(DirChangedPointsCount);
  SetLength(DirChangedPointsArr,DirChangedPointsCount);
  DirChangedPointsArr[DirChangedPointsCount-1]:=DirChangedPoints;

 for i:=1 to FMaxPath-1 do
 begin
  if Direction<>FDirMap[FPath[i].y,FPath[i].x] then
  begin
    inc(DirChangedPointsCount);
    SetLength(DirChangedPointsArr,DirChangedPointsCount);

    DirChangedPoints.Point:=FPath[i];
    DirChangedPoints.Dir:=Direction;
    DirChangedPointsArr[DirChangedPointsCount-1]:=DirChangedPoints;

    Direction:=FDirMap[FPath[i].y,FPath[i].x];
  end;
 end;

 for i:=0 to (DirChangedPointsCount div 2)-1 do
 begin
  DirChangedPoints:=DirChangedPointsArr[i];
  DirChangedPointsArr[i]:=DirChangedPointsArr[DirChangedPointsCount-1-i];
  DirChangedPointsArr[DirChangedPointsCount-1-i]:=DirChangedPoints;
 end;

end;

end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产suv精品一区二区883| 91日韩精品一区| 亚洲色欲色欲www在线观看| 51精品秘密在线观看| 99re这里只有精品首页| 麻豆国产91在线播放| 亚洲欧美日韩小说| 久久精品亚洲国产奇米99| 欧美人伦禁忌dvd放荡欲情| 国产91丝袜在线观看| 蜜臀精品久久久久久蜜臀 | 国产亚洲一二三区| 欧美日韩免费视频| 91影院在线观看| 国产成a人无v码亚洲福利| 午夜视频久久久久久| 亚洲欧美激情一区二区| 欧美国产日韩a欧美在线观看| 91精品欧美综合在线观看最新| 色乱码一区二区三区88| 成人黄色网址在线观看| 国内精品伊人久久久久av影院| 亚洲成a人片在线观看中文| 亚洲久草在线视频| 美女网站视频久久| 午夜电影网亚洲视频| 亚洲激情欧美激情| 最新不卡av在线| 自拍偷拍国产亚洲| 亚洲欧洲美洲综合色网| 欧美激情在线看| 亚洲国产高清在线| 国产精品无码永久免费888| 国产欧美精品在线观看| 中文字幕第一区二区| 亚洲国产精品激情在线观看| 国产日韩欧美精品综合| 中文文精品字幕一区二区| 国产欧美日本一区二区三区| 久久精品亚洲精品国产欧美kt∨| 久久久久久**毛片大全| 国产日韩欧美制服另类| 久久影院视频免费| 国产人成一区二区三区影院| 国产偷国产偷精品高清尤物 | 亚洲在线中文字幕| 一区二区三区免费观看| 亚洲一区中文日韩| 亚洲国产wwwccc36天堂| 日本美女一区二区| 精品一区二区三区免费播放| 国产一区中文字幕| 成人福利视频网站| 色偷偷一区二区三区| 欧美三级视频在线播放| 在线不卡欧美精品一区二区三区| 69久久夜色精品国产69蝌蚪网| 日韩欧美综合一区| 久久人人超碰精品| 国产精品电影院| 香港成人在线视频| 激情综合网av| 不卡的av中国片| 欧美午夜一区二区三区免费大片| 91精品国产色综合久久不卡蜜臀 | 亚洲精品网站在线观看| 亚洲国产精品久久久男人的天堂| 免费人成黄页网站在线一区二区| 国产精品18久久久久久久久 | 蜜桃av噜噜一区二区三区小说| 国产综合一区二区| 99久久er热在这里只有精品66| 欧美人与性动xxxx| 国产人成一区二区三区影院| 成人教育av在线| 一本到三区不卡视频| 日韩免费视频一区| 中文字幕一区视频| 午夜a成v人精品| 成人污视频在线观看| 欧美群妇大交群中文字幕| 久久综合精品国产一区二区三区| 亚洲色图20p| 国产综合久久久久久久久久久久| 色欧美88888久久久久久影院| 日韩亚洲欧美综合| 亚洲色图制服丝袜| 精品制服美女丁香| 欧美主播一区二区三区美女| 久久久一区二区三区捆绑**| 亚洲国产欧美在线人成| 国产成人精品亚洲日本在线桃色 | 最新国产精品久久精品| 日韩高清不卡一区| 白白色 亚洲乱淫| 日韩欧美电影一二三| 玉足女爽爽91| 高清在线观看日韩| 欧美成人精品二区三区99精品| 亚洲免费在线播放| 国产精品一区二区无线| 欧美日韩一级二级| 亚洲美女电影在线| 国产成人精品三级麻豆| 日韩欧美一级二级| 亚洲影视资源网| 99久久精品免费| 国产午夜精品理论片a级大结局| 日韩va亚洲va欧美va久久| 91免费国产在线观看| 国产午夜精品在线观看| 日本成人在线一区| 在线电影院国产精品| 亚洲国产日产av| 欧美在线综合视频| 最新高清无码专区| aaa亚洲精品| 中文字幕不卡在线播放| 狠狠狠色丁香婷婷综合久久五月| 欧美精品一卡两卡| 亚洲第一在线综合网站| 色婷婷精品大在线视频| 国产精品不卡一区二区三区| 国产激情一区二区三区桃花岛亚洲| 日韩视频一区二区在线观看| 日韩激情一区二区| 欧美日韩精品一区二区三区| 曰韩精品一区二区| 在线亚洲一区二区| 依依成人综合视频| 色妞www精品视频| 亚洲综合一二区| 欧美三级韩国三级日本一级| 亚洲午夜激情av| 中文字幕亚洲一区二区av在线| 国产精品资源网| 久久精品人人做人人爽人人| 国产一区二区看久久| 久久久久久亚洲综合影院红桃 | 三级欧美韩日大片在线看| 欧美在线制服丝袜| 性久久久久久久久| 91麻豆精品国产自产在线 | 日韩欧美在线网站| 激情五月婷婷综合| 国产亚洲一区字幕| av不卡在线观看| 亚洲一区电影777| 欧美一区二区在线免费观看| 久久99精品久久久久久| 久久人人97超碰com| 成人激情视频网站| 亚洲综合久久久| 91精品国产综合久久精品app| 日本欧美一区二区在线观看| 久久新电视剧免费观看| 成人中文字幕合集| 一区二区三区久久久| 欧美久久久久久蜜桃| 激情久久五月天| 国产精品久久久久9999吃药| 欧美亚洲国产怡红院影院| 欧美bbbbb| 国产精品美女久久久久高潮| 色综合久久天天| 久久精品久久久精品美女| 欧美高清在线一区二区| 欧美视频一区在线| 激情成人综合网| 亚洲欧洲制服丝袜| 日韩精品一区二区三区视频播放 | 天天综合日日夜夜精品| xfplay精品久久| 91麻豆精品一区二区三区| 日韩电影免费在线| 国产精品毛片久久久久久久| 777亚洲妇女| 99精品视频在线播放观看| 日本欧美在线观看| 中文字幕亚洲一区二区av在线| 4438x亚洲最大成人网| 暴力调教一区二区三区| 日韩不卡在线观看日韩不卡视频| 国产欧美精品在线观看| 欧美二区乱c少妇| caoporen国产精品视频| 日韩1区2区3区| 亚洲欧洲av一区二区三区久久| 91麻豆精品国产综合久久久久久| 成人a级免费电影| 另类小说视频一区二区| 亚洲欧美aⅴ...| 久久久精品免费免费| 欧美日韩精品一区二区天天拍小说 | 中文字幕二三区不卡| 日韩欧美一二区| 欧美综合亚洲图片综合区| 高清不卡在线观看av| 精品综合免费视频观看| 视频一区视频二区中文|