Advertisement
Guest User

Untitled

a guest
May 22nd, 2017
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
QBasic 4.10 KB | None | 0 0
  1. ` darkbasic pathfinder
  2.  
  3.  
  4. `make a few arrays
  5. DIM grid (100,100)
  6. DIM scanner (100,100)
  7. DIM solution (100,100)
  8.  
  9. `create a nice viewport
  10. make camera 1
  11. position camera 1,0,0,0
  12. POINT camera 1,0,0,100
  13. color backdrop 1,rgb (0,0,0)
  14.  
  15. `set the size of the maze
  16. DATA 10,10
  17. ` set the maze
  18. DATA 1,1,1,1,1,1,1,1,1,1
  19. DATA 1,3,1,0,0,0,0,0,0,1
  20. DATA 1,0,1,0,1,1,0,1,0,1
  21. DATA 1,0,1,0,1,0,0,0,0,1
  22. DATA 1,0,1,0,1,0,0,1,0,1
  23. DATA 1,0,1,0,1,0,1,1,0,1
  24. DATA 1,0,0,0,1,0,2,0,0,1
  25. DATA 1,0,1,1,1,1,1,1,0,1
  26. DATA 1,0,0,0,1,0,0,0,0,1
  27. DATA 1,1,1,1,1,1,1,1,1,1
  28.  
  29.  
  30. `READ the maze AND make some objects TO show it
  31. READ maxx
  32. READ maxy
  33. FOR yt = 1 TO maxy
  34.    FOR xt = 1 TO maxx
  35.       an=an+1
  36.       READ griddata
  37.       grid(xt,yt) = griddata
  38.       ypos = 45+(maxy)-(yt*10)
  39.       xpos = 40+(maxx)-(xt*10)
  40.  
  41.       `whole lotta IF
  42.       IF griddata = 1 THEN make object cube an,10 : position object an, xpos,ypos,100:color object an, rgb(145,57,144)
  43.       IF griddata = 2 THEN make object sphere 400,9: position object 400,xpos,ypos,100: color object 400, rgb(0,0,255)
  44.       IF griddata = 3 THEN make object sphere 401,9: position object 401,xpos,ypos,100: color object 401, rgb(255,0,0)
  45.       IF griddata=2 THEN startcoordx=xt
  46.       IF griddata=2 THEN startcoordy=yt
  47.       IF griddata=3 THEN stopcoordx=xt
  48.       IF griddata=3 THEN stopcoordy=yt
  49.  
  50.    NEXT xt
  51. NEXT yt
  52. sync
  53.  
  54. `DEBUGGING CRAP
  55.  
  56. `FOR yf = 1 TO maxy
  57. `   FOR xf = 1 TO maxx
  58. `      scanput = grid(xf,yf)
  59. `      set cursor xf*16,yf*16
  60. `      IF scanput=1 THEN PRINT "#"
  61. `      IF scanput=2 THEN PRINT "F"
  62. `      IF scanput=3 THEN PRINT "S"
  63. `      NEXT
  64. `      NEXT
  65.  
  66.  
  67. `this does stuff
  68. searchx=startcoordx
  69. searchy=startcoordy
  70.  
  71. `CALLS the pathfinding FUNCTION (it's recursive)
  72. scannert(searchx,searchy,99)
  73.  
  74. `some more stuff
  75. upcount=scanner(stopcoordx,stopcoordy)
  76. coordx=stopcoordx
  77. coordy=stopcoordy
  78.  
  79. DO
  80. sync
  81.    `make a 250 ms pause between each LOOP TO make stuff visual
  82.    SLEEP 250
  83.  
  84.    value=scanner(coordx,coordy)
  85.    newvalue=scanner(coordx+1,coordy)
  86.    gridvar=grid(coordx+1,coordy)
  87.  
  88.    IF value < newvalue  AND gridvar =0 THEN t=t+1:coordx=coordx+1:makeamark(coordx,coordy,maxx,maxy,t)
  89.  
  90.    value=scanner(coordx,coordy)
  91.    newvalue=scanner(coordx-1,coordy)
  92.    gridvar=grid(coordx-1,coordy)
  93.    IF value < newvalue AND gridvar =0  THEN t=t+1:coordx=coordx-1:makeamark(coordx,coordy,maxx,maxy,t)
  94.  
  95.    value=scanner(coordx,coordy)
  96.    newvalue=scanner(coordx,coordy+1)
  97.    gridvar=grid(coordx,coordy+1)
  98.    IF value < newvalue  AND gridvar =0 THEN t=t+1:coordy=coordy+1:makeamark(coordx,coordy,maxx,maxy,t)
  99.  
  100.    value=scanner(coordx,coordy)
  101.    newvalue=scanner(coordx,coordy-1)
  102.    gridvar=grid(coordx,coordy-1)
  103.    IF value < newvalue  AND gridvar =0 THEN t=t+1:coordy=coordy-1:makeamark(coordx,coordy,maxx,maxy,t)
  104.  
  105.    value=scanner(coordx,coordy)
  106.    IF value > 99 THEN GOTO theend
  107.  
  108.  
  109. LOOP
  110.  
  111. theend:
  112. DO:LOOP
  113.  
  114.  
  115. FUNCTION makeamark(x,y,maxx,maxy,t)
  116. `makes a square whwn it finds the right path
  117.  
  118. ` MORE DEBUG CRAP
  119. `set cursor x*16,y*16
  120. `PRINT "X"
  121.  
  122. ypos = 45+(maxy)-(y*10)
  123. xpos = 40+(maxx)-(x*10)
  124.  
  125. make object cube t+500,10: color object t+500,rgb(0,255,0)
  126. position object t+500, xpos,ypos,100
  127.  
  128. endfunction
  129.  
  130.  
  131.  
  132. FUNCTION scannert(x,y,distance)
  133. `the pathfinder
  134.  
  135. scanner(x, y) = distance    ` set the distance TO current location
  136. sync
  137.  
  138.  
  139. ` YOU GUESSED IT, DEBUG
  140. `FOR yf = 1 TO maxy
  141. `   FOR xf = 1 TO maxx
  142. `      scanput = scanner(xf,yf)
  143. `      set cursor xf*16,140+yf*16
  144. `      PRINT scanput
  145. `   NEXT
  146. `NEXT
  147.  
  148. `set cursor 0,200
  149. `PRINT "x = ", x, "y = ", y, " distance = ", distance
  150.  
  151.  
  152.  
  153. ` scan left
  154. gridvar = grid(x-1, y)
  155. scanvar = scanner(x-1, y)
  156. IF scanvar < distance AND gridvar <> 1 THEN scannert(x-1, y, distance - 1)
  157.  
  158. ` scan right
  159. gridvar = grid(x+1, y)
  160. scanvar = scanner(x+1, y)
  161. IF scanvar < distance AND gridvar <> 1 THEN scannert(x+1, y, distance - 1)
  162.  
  163. ` scan up
  164. gridvar = grid(x, y-1)
  165. scanvar = scanner(x, y-1)
  166. IF scanvar < distance AND gridvar <> 1 THEN scannert(x, y-1, distance - 1)
  167.  
  168. ` scan down
  169. gridvar = grid(x, y+1)
  170. scanvar = scanner(x, y+1)
  171. IF scanvar < distance AND gridvar <> 1 THEN scannert(x, y+1, distance - 1)
  172.  
  173. endfunction
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement