Advertisement
zbeucler

grid-new.ss

Feb 21st, 2021
242
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.84 KB | None | 0 0
  1. (define block-status
  2. (lambda (block)
  3. (get-node grid (car block) (cadr block))))
  4.  
  5. (define block-set!
  6. (lambda (block value)
  7. (set-node! grid (car block) (cadr block) value)))
  8.  
  9. (define adjacent
  10. (lambda (block)
  11. (let ((x (car block))
  12. (y (cadr block)))
  13. (append
  14. (if (< y 1) '() (list (list x (- y 1))))
  15. (if (< x 1) '() (list (list (- x 1) y)))
  16. (if (>= y (- num-col-row 1)) '() (list (list x (+ y 1))))
  17. (if (>= x (- num-col-row 1)) '() (list (list (+ x 1) y)))))))
  18.  
  19. (define stepo
  20. (lambda (b c)
  21. (let ((b-status (block-status b))
  22. (c-status (block-status c))
  23. (x-diff (abs (- (car b) (car c))))
  24. (y-diff (abs (- (cadr b) (cadr c)))))
  25. (if (or (= b-status obstacle)
  26. (= c-status obstacle)
  27. (not (= (+ x-diff y-diff) 1)))
  28. #f
  29. ;else
  30. c))))
  31.  
  32. (define stepv
  33. (lambda (b c)
  34. (let ((b-status (block-status b))
  35. (c-status (block-status c))
  36. (x-diff (abs (- (car b) (car c))))
  37. (y-diff (abs (- (cadr b) (cadr c)))))
  38. (if (or (= b-status obstacle)
  39. (= c-status obstacle)
  40. (= c-status frontier)
  41. (not (= (+ x-diff y-diff) 1)))
  42. #f
  43. ;else
  44. c))))
  45.  
  46. (define step
  47. (lambda (b c)
  48. (let ((c-status (block-status c)))
  49. (if (= c-status obstacle)
  50. #f
  51. ;else
  52. c))))
  53.  
  54. (define adjacentv
  55. (lambda (block)
  56. (let* ((adj-lst0 (adjacent block))
  57. (adj-lst1 (map (lambda (z) (stepv block z)) adj-lst0)))
  58. (remove-f adj-lst1))))
  59.  
  60. (define remove-f
  61. (lambda (lst)
  62. (if (null? lst)
  63. '()
  64. ;else
  65. (let ((b (car lst)))
  66. (if b
  67. (cons b (remove-f (cdr lst)))
  68. ;else
  69. (remove-f (cdr lst)))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement