simple.sld 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. (define-library (turtle simple)
  2. (import (turtle turtle3)
  3. (scheme case-lambda)
  4. (scheme base))
  5. (export forward back right left up down
  6. fd bk rt lt pu pd
  7. pos set-pos tilt set-tilt
  8. bg-color line-color line-width
  9. show hide draw-line home reset-tilt
  10. repeat xcor ycor setx sety
  11. clear-screen max-recur face)
  12. (begin
  13. (define current-tilt 0)
  14. (define (tilt)
  15. current-tilt)
  16. (define (set-tilt theta)
  17. (yaw! t (- current-tilt))
  18. (set! current-tilt theta)
  19. (yaw! t theta))
  20. (define t (make-turtle))
  21. (define (home)
  22. (set-pos 0 0))
  23. (define (reset-tilt)
  24. (set-tilt 0))
  25. (define (show)
  26. (show! t))
  27. (define (hide)
  28. (hide! t))
  29. (define (forward dist)
  30. (forward! t dist))
  31. (define (back dist)
  32. (forward! t (- dist)))
  33. (define (right theta)
  34. (set! current-tilt (- current-tilt theta))
  35. (yaw! t (- theta)))
  36. (define (left theta)
  37. (set! current-tilt (+ current-tilt theta))
  38. (yaw! t theta))
  39. (define (up)
  40. (pen-up! t))
  41. (define (down)
  42. (pen-down! t))
  43. (define fd forward)
  44. (define bk back)
  45. (define lt left)
  46. (define rt right)
  47. (define pu up)
  48. (define pd down)
  49. (define (pos)
  50. (get-pos t))
  51. (define (down?)
  52. (pen-down? t))
  53. (define face
  54. (case-lambda
  55. ((v)
  56. (face! t v))
  57. ((x y)
  58. (face (vector x y)))))
  59. (define set-pos
  60. (case-lambda
  61. ((v)
  62. (let ((x1 (xcor))
  63. (y1 (ycor))
  64. (x2 (vector-ref v 0))
  65. (y2 (vector-ref v 1)))
  66. (set-pos! t (vector-append v #(0)))
  67. (if (down?)
  68. (draw-line x1 y1 x2 y2))))
  69. ((x y) (set-pos (vector x y)))))
  70. (define (xcor)
  71. (vector-ref (pos) 0))
  72. (define (ycor)
  73. (vector-ref (pos) 1))
  74. (define (setx xval)
  75. (set-pos (vector (+ xval (xcor))
  76. (ycor))))
  77. (define (sety yval)
  78. (set-pos (vector (xcor)
  79. (+ yval (ycor)))))))