刚接触编程,关于HTDP Prologue中exercise的问题

New to programming, question about exercise in Prologue of HTDP

这可能是个愚蠢的问题,但我对编程完全陌生。我正接近 "How to Design Programs"(第 2 版)序言的底部,您需要对 DrRacket 中的 "Rocket Landing" 程序进行 4 处更改。

我卡在了第 4 个,特别是粗体部分:

您将如何更改程序,使火箭降落在比场景底部高 10 像素的平坦岩床上? 也别忘了换风景

; constants
(define WIDTH 200)
(define HEIGHT 400)
(define SCENE-CENTER (/ WIDTH 2))
(define MTSCN (empty-scene WIDTH HEIGHT "blue"))
(define ROCKET (overlay (circle 10 "solid" "green")
                    (rectangle 40 4 "solid" "green")))
(define ROCKET-CENTER-TO-TOP
  (- (- HEIGHT 10) (/ (image-height ROCKET)2)))

;functions
(define (picture-of-rocket.v2 h)
  (cond
    [(<= h ROCKET-CENTER-TO-TOP)
     (place-image ROCKET SCENE-CENTER h MTSCN)]
    [(> h ROCKET-CENTER-TO-TOP)
     (place-image ROCKET SCENE-CENTER ROCKET-CENTER-TO-TOP MTSCN)]))

(animate picture-of-rocket.v2)

我的火箭 (ufo) 正在做第一部分,在距底部 10 像素处停止,但我不确定如何使用目前学到的命令在底部绘制岩床。我是否在底部(覆盖)一个 10 像素的矩形?还是作者只是想把场景背景改成灰色?

好问题!我认为,在这种情况下,没有正确答案。事实上,我认为这正是练习的目的:给你一个需要(非常小的)创造力来解决的问题,而不是明确说明你应该做什么。 HtDP 认识到编程需要结构化、有原则的过程和开放式批判性思维的混合体,并且它的一些问题在设计上是开放式的。这与其说是为了测试您的创造力,不如说是为了确保您在关闭训练轮的情况下仍然可以应用所学的知识。

您的第一直觉——在底部添加一个矩形——是很好的。同样,没有正确答案,所以如果可行,就目前而言,没关系。目的是让您试用提供给您的工具箱。至于“换景”是什么意思,我理解为字面意思是让你把场景装饰成你认为合适的样子。

如果这种开放性感觉有点迷失方向,请不要担心——这在很大程度上是重点。如果您再往下读一点,the final section of the prologue 会准确解释为什么这种开放式实验 不足以 成为熟练的程序员。当您通过 HtDP 取得进展并超越序言时,您将看到一种更有原则的程序设计方法,而不是简单地摆弄东西。但就目前而言,重要的一点是您正在考虑自己正在做的事情,这是一个好兆头。

(顺便说一句,这是我很长时间以来看到的与 HtDP 相关的最好的 Stack Overflow 问题之一,所以谢谢你。大多数只是来自学生的薄薄的请求要求人们为他们做作业。)