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) |