Advertisement
Giancarlo_Static

A-Star v2.0

May 30th, 2023 (edited)
659
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ActionScript 3 2.76 KB | Source Code | 0 0
  1. var current_x=0;
  2. var current_y=0;
  3. var final_x=4;
  4. var final_y=4;
  5. var grid_size=5;
  6.  
  7. var walkable_array=[
  8. [0,0,0,0,0],
  9. [1,1,1,1,0],
  10. [0,0,0,0,0],
  11. [0,0,0,0,0],
  12. [0,0,0,0,0]
  13. ];
  14.  
  15. for(var k=0;k<grid_size;k++){
  16. if(walkable_array[k]==undefined){
  17. walkable_array[k]=[];
  18. }
  19. }
  20. for(k=0;k<grid_size;k++){
  21. for(var l=0;l<grid_size;l++){
  22. if(walkable_array[k][l]==undefined){
  23. walkable_array[k][l]=[];
  24. }
  25. }
  26. }
  27.  
  28. for(var i=0;i<grid_size;i++){
  29. for(var j=0;j<grid_size;j++){
  30. var square_var:MovieClip=new MovieClip();
  31. stage.addChild(square_var);
  32. square_var.graphics.lineStyle(1,0x000000);
  33. square_var.graphics.drawRect(0,0,50,50);
  34. square_var.x=j*square_var.width;
  35. square_var.y=i*square_var.height;
  36. square_var.name=j+"_"+i;
  37. }
  38. }
  39.  
  40. stage.addEventListener(MouseEvent.MOUSE_DOWN,md);
  41. function md(e:*){
  42. astar(current_x,current_y,final_x,final_y);
  43. }
  44.  
  45. var astar_obj={};
  46. var astar_arr=[];
  47. var used_data={};
  48. var current_object;
  49. var object_number=0;
  50.  
  51. function astar(current_x,current_y,final_x,final_y){
  52. num=0;
  53. delete used_data[object_number];
  54. delete astar_obj[object_number];
  55. astar_arr=[];
  56. object_number++;
  57. astar_obj[object_number]={};
  58. used_data[object_number]={};
  59. astar_arr[astar_arr.length]=astar_obj[object_number][current_x+"_"+current_y]={x:current_x,y:current_y,prev_x:current_x,prev_y:current_y};
  60. for(var i=0;i<astar_arr.length;i++){
  61. var current_object=astar_arr[i];
  62. searchProcess(current_object,current_object.x+1,current_object.y);
  63. searchProcess(current_object,current_object.x,current_object.y+1);
  64. searchProcess(current_object,current_object.x-1,current_object.y);
  65. searchProcess(current_object,current_object.x,current_object.y-1);
  66. }
  67. }
  68. var num=0;
  69. var distance_limit=100;
  70. function searchProcess(a,b,c){
  71. num++;
  72. if(b>-1&&c>-1&&used_data[object_number][b+"_"+c]==undefined){
  73. used_data[object_number][b+"_"+c]=false;
  74. num--;
  75. num++;
  76. }
  77.  
  78. if(b>-1&&c>-1&&b<grid_size&&c<grid_size&&walkable_array[b][c]==0&&used_data[object_number][b+"_"+c]==false&&distanceChecker(b,current_x)<=distance_limit &&distanceChecker(c,current_y)<=distance_limit){
  79. used_data[object_number][b+"_"+c]=true;
  80. astar_arr[astar_arr.length]=astar_obj[object_number][(b)+"_"+(c)]={x:b,y:c,prev_x:a.x,prev_y:a.y};
  81. num--;
  82. num++;
  83. if(final_x==b&&final_y==c){
  84. num--;
  85. var temp_x=b;
  86. var temp_y=c;
  87. var astar_direction=[];
  88. while(temp_x!=current_x||temp_y!=current_y){
  89. num++;
  90. var temp_x_2=astar_obj[object_number][(temp_x)+"_"+(temp_y)].prev_x;
  91. var temp_y_2=astar_obj[object_number][(temp_x)+"_"+(temp_y)].prev_y;
  92. temp_x=temp_x_2;
  93. temp_y=temp_y_2;
  94. astar_direction.push(astar_obj[object_number][(temp_x)+"_"+(temp_y)].x);
  95. astar_direction.push(astar_obj[object_number][(temp_x)+"_"+(temp_y)].y);
  96. }
  97. trace(astar_direction);
  98. }
  99. }
  100. }
  101.  
  102. function distanceChecker(a,b){
  103. if(a>b){
  104. return a-b;
  105. }else{
  106. return b-a;
  107. }
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement