Advertisement
zbeucler

grid-class.ss

Feb 21st, 2021
237
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.62 KB | None | 0 0
  1. (import swl:oop)
  2. (import swl:macros)
  3. (import swl:generics)
  4. (import swl:option)
  5.  
  6. (define top (create <toplevel> with (title: "Grid Canvas")))
  7.  
  8. (define-class (<grid-canvas> parent) (<canvas> parent)
  9. (ivars (start #f) (goal #f) (robot #f) (visited #f) (frontier #f)
  10. (path-node #f) (rect #f))
  11. (inherited)
  12. (inheritable)
  13. (private)
  14. (protected)
  15. (public
  16. (move-make-robot (x0 y0)
  17. (let* ((sizer (floor (/ (* 3 size) 4)))
  18. (diff (floor (/ (- size sizer) 2)))
  19. (x (+ 2 diff (* x0 size)))
  20. (y (+ 2 diff (* y0 size))))
  21. (set-coords! robot x y (+ x sizer) (+ y sizer))))
  22. (make-robot (x0 y0)
  23. (let* ((sizer (floor (/ (* 2 size) 3)))
  24. (diff (floor (/ (- size sizer) 2)))
  25. (x (+ 2 diff (* x0 size)))
  26. (y (+ 2 diff (* y0 size))))
  27. (set! robot (create <oval> self x y (+ x sizer) (+ y sizer)))
  28. (set-fill-color! robot (make <rgb> 255 0 0))))
  29. (make-visited (x0 y0)
  30. (let* ((sizer (floor (/ (* 2 size) 3)))
  31. (diff (floor (/ (- size sizer) 2)))
  32. (x (+ 2 diff (* x0 size)))
  33. (y (+ 2 diff (* y0 size))))
  34. (set! visited (create <oval> self x y (+ x sizer) (+ y sizer)))))
  35. (make-frontier (x0 y0)
  36. (let* ((sizer (floor (/ size 2)))
  37. (diff (floor (/ (- size sizer) 2)))
  38. (x (+ 2 diff (* x0 size)))
  39. (y (+ 2 diff (* y0 size))))
  40. (set! frontier (create <oval> self x y (+ x sizer) (+ y sizer)))))
  41. (make-path-node (x0 y0)
  42. (let* ((sizer (floor (/ size 2)))
  43. (diff (floor (/ (- size sizer) 2)))
  44. (x (+ 2 diff (* x0 size)))
  45. (y (+ 2 diff (* y0 size))))
  46. (set! path-node (create <oval> self x y (+ x sizer) (+ y sizer)))
  47. (set-fill-color! path-node (make <rgb> 255 255 0))))
  48. (make-start (x0 y0)
  49. (let* ((sizer (floor (/ (* 1 size) 1)))
  50. (diff (floor (/ (- size sizer) 2)))
  51. (x (+ 2 diff (* x0 size)))
  52. (y (+ 2 diff (* y0 size))))
  53. (set! start (create <oval> self x y (+ x sizer) (+ y sizer)))
  54. (set-fill-color! start (make <rgb> 0 0 255))))
  55. (make-goal (x0 y0)
  56. (let* ((sizer (floor (/ (* 1 size) 1)))
  57. (diff (floor (/ (- size sizer) 2)))
  58. (x (+ 2 diff (* x0 size)))
  59. (y (+ 2 diff (* y0 size))))
  60. (set! goal (create <oval> self x y (+ x sizer) (+ y sizer)))
  61. (set-fill-color! goal (make <rgb> 0 255 0))))
  62. (make-free (x0 y0)
  63. (let ((x (+ 2 (* x0 size)))
  64. (y (+ 2 (* y0 size))))
  65. (set! rect (create <rectangle> self x y (+ x size) (+ y size)))))
  66. (make-obstacle (x0 y0)
  67. (let ((x (+ 2 (* x0 size)))
  68. (y (+ 2 (* y0 size))))
  69. (set! rect (create <rectangle> self x y (+ x size) (+ y size)))
  70. (set-fill-color! rect (make <rgb> 5 5 5))))))
  71.  
  72. (define canvas (create <grid-canvas> top with
  73. (background-color: (make <rgb> 215 215 215))))
  74.  
  75. (send canvas set-height! (+ 1 (* size num-col-row)))
  76. (send canvas set-width! (+ 1 (* size num-col-row)))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement