在本页中:
1.7.1 在画布上绘图
start
start/  cartesian-plane
stop
draw-circle
draw-solid-disk
draw-solid-rect
draw-solid-line
draw-solid-string
sleep-for-a-while
clear-circle
clear-solid-disk
clear-solid-rect
clear-solid-line
clear-solid-string
clear-all
1.7.2 与画布的交互
wait-for-mouse-click
get-key-event
big-bang
on-key-event
on-tick-event
end-of-time

1.7 简单的绘图: "draw.rkt"

 (require htdp/draw) package: htdp-lib

本教学包提供两类函数:一类用于绘制画布,另一类用于对画布事件做出反应。

注意:该库已被废弃;请改用2htdp/image(可能与2htdp/universe结合)。你可以继续配合《程序设计方法》第一版使用本库,但请考虑换用《程序设计方法》第二版

1.7.1 在画布上绘图

DrawColor: (and/c symbol? (one-of/c 'white 'yellow 'red 'blue 'green 'black)) 保证至少提供这六种颜色。如果需要其他颜色,请猜测!例如,'orange有效, 但是'mauve无效。如果使用不认识的颜色调用(绘图)函数,会抛出错误。

函数

(start width height)  true

  width : number?
  height : number?
打开widthheight的画布。

函数

(start/cartesian-plane width height)  true

  width : number?
  height : number?
打开widthheight的画布并绘制笛卡尔平面。

函数

(stop)  true

关闭画布。

函数

(draw-circle p r c)  true

  p : posn?
  r : number?
  c : DrawColor
p处绘制半径为rc颜色圆。

函数

(draw-solid-disk p r c)  true

  p : posn?
  r : number?
  c : DrawColor
p处绘制半径为rc颜色圆盘。

函数

(draw-solid-rect ul width height c)  true

  ul : posn?
  width : number?
  height : number?
  c : DrawColor
绘制左上角位于ulwidthheightc颜色矩形。

函数

(draw-solid-line strt end c)  true

  strt : posn?
  end : posn?
  c : DrawColor
绘制从strtendc颜色线。

函数

(draw-solid-string p s)  true

  p : posn?
  s : string?
p位置绘制s

函数

(sleep-for-a-while s)  true

  s : number?
暂停求值s秒。

对于每个draw-(绘制)函数,教学包也提供对应的clear-(清除)函数:

函数

(clear-circle p r c)  true

  p : posn?
  r : number?
  c : DrawColor
清除p处、半径为rc颜色圆。

函数

(clear-solid-disk p r c)  true

  p : posn?
  r : number?
  c : DrawColor
清除p处、半径为rc颜色圆盘。

函数

(clear-solid-rect ul width height c)  true

  ul : posn?
  width : number?
  height : number?
  c : DrawColor
清除左上角位于ulwidthheightc颜色矩形。

函数

(clear-solid-line strt end c)  true

  strt : posn?
  end : posn?
  c : DrawColor
清除从strtendc颜色线。

函数

(clear-solid-string p s)  true

  p : posn?
  s : string?
清除p位置的s

函数

(clear-all)  true

清除整个屏幕。

1.7.2 与画布的交互

函数

(wait-for-mouse-click)  posn?

等待用户在画布中单击鼠标。

DrawKeyEvent: (or/c char? symbol?) A DrawKeyEvent表示键盘事件:
  • char?,如果用户按下字母或数字键;

  • symbol?,如果用户按下,比如说方向键: 'up 'down 'left 'right

检查用户是否在窗口中按了键;如果没有则返回false

DrawWorld:为了能正确的进行交互,使用本教学包需要你提供DrawWorld的数据定义。 原则上,此数据定义没有任何限制。你甚至可以隐式地定义,即使这违反了设计诀窍。

以下函数允许程序对画布中的事件做出反应。

函数

(big-bang n w)  true

  n : number?
  w : DrawWorld
开始计时, 每n(可以是分数)秒钟一次;w是第一个“当前”世界。

函数

(on-key-event change)  true

  change : (-> DrawKeyEvent DrawWorld DrawWorld)
change加到世界中。该函数对键盘事件做出反应并创建新的DrawWorld

函数

(on-tick-event tock)  true

  tock : (-> DrawWorld DrawWorld)
tock加到世界中。该函数对时钟滴答事件做出反应,创建新的当前世界。

函数

(end-of-time)  DrawWorld

停止世界;返回当前世界。