Google

link="#009900" vlink="#007700" alink="#cc0000"> Teachpacks for How to Design Programs

Arrows


arrow.ss

A shape is a class of data for which move and draw operations can be drawn.

The teachpack arrow.ss implements controller for moving shapes across a canvass. It provides three operations:

  • control-left-right : shape number move draw -> true :
    It consumes a shape, a number, a move function and a draw function. The move function consumes a number and a shape and re-draws the shape on some canvas and produces a shape that is translated by N pixels left or right.

  • control-up-down : shape number move -> true :
    It is like control-left-right but controls movements by N pixels up or down.

  • control : shape number move-lr move-ud -> true :
    It consumes a shape, a number, two move functions, and a draw function. The move functions consume a number and a shape and re-draw the shape on some canvas and produces a shape that is translated by N pixels left or right and up or down, respectively.
  • Example:

    ;; A shape is a structure: 
    ;;   (make-posn num num)
    
    ;; RAD : the radius of the simple disk moving across a canvas
    (define RAD 10)
    
    ;; move : number shape -> shape or false 
    ;; to move a shape by delta according to translate 
    ;; effect: to redraw it 
    (define (move delta sh)
      (cond
        [(and (clear-solid-disk sh RAD)
              (draw-solid-disk (translate sh delta) RAD))
         (translate sh delta)]
        [else false]))
    
    ;; translate : shape number -> shape 
    ;; to translate a shape by delta in the x direction 
    (define (translate sh delta)
      (make-posn (+ (posn-x sh) delta) (posn-y sh)))
    
    ;; draw-it : shape -> true
    ;; to draw a shape on the canvas: a disk with radius
    (define (draw-it sh)
      (draw-solid-disk sh RAD))
    
    ;; TESTS: 
    
    ;; this creates the canvas
    (start 100 50)
    
    ;; this creates the controller GUI
    (control-left-right (make-posn 10 20) 10 move draw-it)