The teachpack provides the tools to write simple animations and interactive games. The first and simplest approach is to set up a simulation:
run-simulation : Nat Nat Number [Nat -> Scene] -> true
(run-simulation width height r create-image)
creates and shows awidth
xheight
canvas, starts a clock, ticking everyr
(usually fractional) seconds, and, every time the clock ticks, it appliescreate-image
to the number of ticks passed since this function call.In addition, the function pops up a frame and displays the pictures that
create-image
generates. The result is a simple animation.Optional: the function consumes an optional fifth argument, a boolean. If this argument is
false
or missing,run-simulation
acts as described; if it is present andtrue
, the function can create an animated GIF of the simulation after you stop it.Example:
(define (create-UFO-scene height) (place-image UFO 50 height (empty-scene 100 100))) (define UFO (overlay (circle 10 'solid 'green) (rectangle 40 4 'solid 'green))) (run-simulation 100 100 (/ 1 28) create-UFO-scene)
For animated worlds and games, using the teachpack requires that you
provide a data definition for World
. In principle, there are
no constraints on this data definition.
The teachpack works with two basic forms of data for visualizing the world:
Image
, which are either inserted into DrScheme via the
"Special" menu or constructed from the functions below; and Scene
, which are created from Image
s.
Specifically, a scene is an image whose pinhole is at position (0,0).big-bang : Nat Nat Number World -> true
(big-bang width height n w)
creates and shows a width
x height
canvas,
starts the clock,
makes it tick every n seconds,
and makes w the first world
big-bang : Nat Nat Number World Boolean -> true
big-bang
takes an optional fifth argument. If it is
true
, the world allows the generation of images from the
animation, including an animated GIF image
on-tick-event : (World -> World) -> true
(on-tick-event tock)
means that DrScheme must call tock
on the current world every time the clock ticks; it uses the result as the next world
on-key-event : (World KeyEvent -> World) -> true
(on-key-event change)
means that DrScheme must call
change
on the current world and a (representation of the)
keyevent for every keystroke the programmer (user of the computer) makes; it uses
the result as the next world
;; A KeyEvent is one of: ;; -- Char (char?) ;; -- Symbol (symbol?)
When the Keyevent is a char, the programmer (user of the computer) has hit an alphanumeric key. Symbols such as'left
,'right
,'up
,'down
,'release
denote arrow keys or the events of releasing a key on the keypad.
on-mouse-event : (World Nat Nat MouseEvent ->
World) -> true
(on-mouse-event clack)
means that
DrScheme must call clack
on the current world, the current
x
and y
coordinates of the mouse, and and a
(representation of the) mouse event for every action of the mouse the
programmer (user of the computer) makes; it uses the result as the next
world
;; A MouseEvent is one of:
;; - 'button-down
;; - 'button-up
;; - 'drag
;; - 'move
;; - 'enter
;; - 'leave
The symbols denote the appropriate action with the mouse and (any of)
its button(s).
on-redraw : (World -> Scene) -> true
(on-redraw world->scene)
means that DrScheme calls
world->image
whenever the canvas must be redrawn (usually
after a tick event/a keyboard event/a mouse event has occurred);
the function consumes the current world and produces a scene, which is
then displayed in the teachpack's canvas
end-of-time : String u Symbol -> World
(end-of-time "the end")
, it stops the clock and displays the
given string or symbol; no further tick events, key events, or redraw events
take place until the world is created again.
For the creation of scenes from the world, use the following functions plus the functions on images below:
nw:rectangle : Nat Nat Mode Color -> Image
(nw:rectangle width height mode color)
creates a width x height rectangle, solid or outlined,
with its anchor in the NW corner
empty-scene : Nat Nat -> Scene
(empty-scene width height)
creates a width x height "scene" (frame with origin in NW)
place-image : Image Number Number Scene -> Scene
(place-image image x y scene)
places image at (x,y) into scene; (x,y) are comp. graph. coordinates
scene+line : Scene Number Number Number Number Color -> Scene
(scene+line scene x0 y0 x1 y1 c)
places a line of color c
from (x0,y0)
to
(x1,y1)
into scene
;
(x,y)
are comp. graph. coordinates;
in contrast to the image.ss add-line
function, this
one cuts off those portions of the line that go beyond the boundaries of
the given Scene.
run-movie : (Listof Image) -> true
(run-movie loi)
shows the list of images in loi in a time-delayed manner;
assume: all images are of the same size
Finally, the teachpack provides all the functions that image.ss
provides. For completeness, the documentation of this teackpack is
included here:
Data definition:
;; Mode is one of the following two symbols or strings:
;; -- 'solid
;; -- 'outline
;; -- "solid"
;; -- "outline"
;; Interpretation: 'solid
is used for creating solid basic
;; shapes; 'outline
is used for creating outlines of basic
;; shapes. Strings are used in an analogous manner.
Data definition:
(define-struct color (red green blue))
;; A CS is a structure: (make-color N N N)
;; where N is between 0 and 255 (inclusive).
;; Color is one of:
;; -- a color symbol, e.g., 'blue
;; -- a color string, e.g., "blue"
;; -- a CS, e.g., (make-color 0 0 255), which also denotes blue.
;; Interpretation: Color
arguments are used to paint the shapes
;; or their outlines. See below for more information about color structs.
The following predicate precisely specifies what a valid image color is:
The first group of functions creates basic shapes (Image
):
Images have many properties. To understand how functions manipulate and
create images, we need to understand one of these properties immediately:
pinholes. Each image, including primitive shapes, come with a
pinhole. Usually the pinhole is in the center of the shape except for those
created from line
and text
, which have pinholes
at the top left. When in doubt you can always find out where the pinhole is
and even place it somewhere else:
The next group of functions build images from images:
For composite images, it is always possible to determine whether one occurs
in the other and where:
Two more properties of images are useful for image manipulations: their
width and height. The two functions for extracting these properties are:
Data definition:
;; List-of-color is one of:
;; -- empty
;; -- (cons Color List-of-color)
Interpretation: represents a sequence of colors
It is possible to extract an image's colors and pixels and to create images
from a list of colors:
The shrink functions trim an image by eliminating extraneous pixels.
The last group of functions extracts the consitiuent colors from an image
and combine colors into an image, but the functions provide alpha-channel
information as well. Alpha channels are a measure of transparency; 0
indicates fully opaque and 255 indicates fully transparent.