home *** CD-ROM | disk | FTP | other *** search
/ Game.EXE 2005 July / Game.EXE_07_2005_DVD.iso / Flash / Quix / quix.swf / scripts / frame_1 / DoAction.as
Encoding:
Text File  |  2005-04-16  |  4.7 KB  |  161 lines

  1. fscommand("allowscale",false);
  2. _global.findPath = function(map, startY, startX, endY, endX)
  3. {
  4.    var HV_COST = 10;
  5.    var D_COST = 14;
  6.    var ALLOW_DIAGONAL = false;
  7.    var ALLOW_DIAGONAL_CORNERING = true;
  8.    isOpen = function(y, x)
  9.    {
  10.       return mapStatus[y][x].open;
  11.    };
  12.    isClosed = function(y, x)
  13.    {
  14.       return mapStatus[y][x].closed;
  15.    };
  16.    nearerSquare = function()
  17.    {
  18.       var minimum = 999999;
  19.       var indexFound = 0;
  20.       var _loc2_ = undefined;
  21.       var _loc3_ = undefined;
  22.       var _loc1_ = openList.length;
  23.       while(_loc1_-- > 0)
  24.       {
  25.          _loc3_ = mapStatus[openList[_loc1_][0]][openList[_loc1_][1]];
  26.          _loc2_ = _loc3_.heuristic + _loc3_.movementCost;
  27.          if(_loc2_ <= minimum)
  28.          {
  29.             minimum = _loc2_;
  30.             indexFound = _loc1_;
  31.          }
  32.       }
  33.       return indexFound;
  34.    };
  35.    closeSquare = function(y, x)
  36.    {
  37.       var _loc3_ = y;
  38.       var _loc2_ = openList.length;
  39.       var _loc1_ = 0;
  40.       while(_loc1_ < _loc2_)
  41.       {
  42.          if(openList[_loc1_][0] == _loc3_)
  43.          {
  44.             if(openList[_loc1_][1] == x)
  45.             {
  46.                openList.splice(_loc1_,1);
  47.                break;
  48.             }
  49.          }
  50.          _loc1_ = _loc1_ + 1;
  51.       }
  52.       mapStatus[_loc3_][x].open = false;
  53.       mapStatus[_loc3_][x].closed = true;
  54.    };
  55.    openSquare = function(y, x, parent, movementCost, heuristic, replacing)
  56.    {
  57.       var _loc1_ = y;
  58.       var _loc2_ = x;
  59.       if(!replacing)
  60.       {
  61.          openList.push([_loc1_,_loc2_]);
  62.          mapStatus[_loc1_][_loc2_] = {heuristic:heuristic,open:true,closed:false};
  63.       }
  64.       mapStatus[_loc1_][_loc2_].parent = parent;
  65.       mapStatus[_loc1_][_loc2_].movementCost = movementCost;
  66.    };
  67.    var mapH = map.length;
  68.    var mapW = map[0].length;
  69.    var mapStatus = new Array();
  70.    var i = 0;
  71.    while(i < mapH)
  72.    {
  73.       mapStatus[i] = new Array();
  74.       i++;
  75.    }
  76.    if(startY == undefined || startX == undefined)
  77.    {
  78.       return null;
  79.    }
  80.    if(endY == undefined || endX == undefined)
  81.    {
  82.       return null;
  83.    }
  84.    var openList = new Array();
  85.    openSquare(startY,startX,undefined,0);
  86.    while(openList.length > 0 && !isClosed(endY,endX))
  87.    {
  88.       var i = nearerSquare();
  89.       var nowY = openList[i][0];
  90.       var nowX = openList[i][1];
  91.       closeSquare(nowY,nowX);
  92.       var _loc2_ = nowY - 1;
  93.       while(_loc2_ < nowY + 2)
  94.       {
  95.          var _loc1_ = nowX - 1;
  96.          while(_loc1_ < nowX + 2)
  97.          {
  98.             if(_loc2_ >= 0 && _loc2_ < mapH && _loc1_ >= 0 && _loc1_ < mapW && !(_loc2_ == nowY && _loc1_ == nowX) && (ALLOW_DIAGONAL || _loc2_ == nowY || _loc1_ == nowX) && (ALLOW_DIAGONAL_CORNERING || _loc2_ == nowY || _loc1_ == nowX || map[_loc2_][nowX] != 0 && map[nowY][_loc1_]))
  99.             {
  100.                if(map[_loc2_][_loc1_] != 0)
  101.                {
  102.                   if(!isClosed(_loc2_,_loc1_))
  103.                   {
  104.                      var _loc3_ = mapStatus[nowY][nowX].movementCost + (!(_loc2_ == nowY || _loc1_ == nowX) ? D_COST : HV_COST) * map[_loc2_][_loc1_];
  105.                      if(isOpen(_loc2_,_loc1_))
  106.                      {
  107.                         if(_loc3_ < mapStatus[_loc2_][_loc1_].movementCost)
  108.                         {
  109.                            openSquare(_loc2_,_loc1_,[nowY,nowX],_loc3_,undefined,true);
  110.                         }
  111.                      }
  112.                      else
  113.                      {
  114.                         var heuristic = (Math.abs(_loc2_ - endY) + Math.abs(_loc1_ - endX)) * 10;
  115.                         openSquare(_loc2_,_loc1_,[nowY,nowX],_loc3_,heuristic,false);
  116.                      }
  117.                   }
  118.                }
  119.             }
  120.             _loc1_ = _loc1_ + 1;
  121.          }
  122.          _loc2_ = _loc2_ + 1;
  123.       }
  124.    }
  125.    var pFound = isClosed(endY,endX);
  126.    delete isOpen;
  127.    delete isClosed;
  128.    delete nearerSquare;
  129.    delete closeSquare;
  130.    delete openSquare;
  131.    if(pFound)
  132.    {
  133.       var returnPath = new Array();
  134.       var nowY = endY;
  135.       var nowX = endX;
  136.       while(nowY != startY || nowX != startX)
  137.       {
  138.          returnPath.push([nowY,nowX]);
  139.          var newY = mapStatus[nowY][nowX].parent[0];
  140.          var newX = mapStatus[nowY][nowX].parent[1];
  141.          nowY = newY;
  142.          nowX = newX;
  143.       }
  144.       returnPath.push([startY,startX]);
  145.       return returnPath;
  146.    }
  147.    return null;
  148. };
  149. ASSetPropFlags(_global,"findPath",1,0);
  150. playing = 0;
  151. klik = new Sound(_root.mySound);
  152. klik.attachSound("klik");
  153. wipe = new Sound(_root.mySound);
  154. wipe.attachSound("wipe");
  155. error = new Sound(_root.mySound);
  156. error.attachSound("error");
  157. blip = new Sound(_root.mySound);
  158. blip.attachSound("blip");
  159. stopAllSounds();
  160. stop();
  161.