1.8 Managing Control Arrows: "arrow.ss"
The teachpack implements a controller for moving shapes across a canvass. A shape is a class of data for which move and draw operations can be drawn.
| (control-left-right shape n move draw) → true |
| shape : Shape |
| n : number? |
| move : (-> number? Shape Shape) |
| draw : (-> Shape true) |
Moves shape n pixels left
(negative) or right (positive).
| (control-up-down shape n move draw) → true |
| shape : Shape |
| n : number? |
| move : (-> number? Shape Shape) |
| draw : (-> Shape true) |
Moves shape n pixels up
(negative) or down (positive).
| (control shape n move-lr move-ud draw) → true |
| shape : Shape |
| n : number? |
| move-lr : (-> number? Shape Shape) |
| move-ud : (-> number? Shape Shape) |
| draw : (-> Shape true) |
Moves shape 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)) |
| ; RUN: |
| ; this creates the canvas |
| (start 100 50) |
| ; this creates the controller GUI |
| (control-left-right (make-posn 10 20) 10 move draw-it) |