4

这可能是一个愚蠢的问题,但我对编程完全陌生。我在“如何设计程序”(第 2 版)中接近序言的底部,您需要对 DrRacket 中的“火箭着陆”程序进行 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)

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

4

1 回答 1

4

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

你的第一个直觉——在底部添加一个矩形——是一个很好的直觉。同样,没有正确的答案,所以如果它现在有效,那没关系。目的是让您使用提供给您的工具箱。至于“换景”是什么意思,我的理解是字面意思是要求你按照你认为合适的方式装饰场景。

如果这种开放式感觉有点迷失方向,请不要担心——这在很大程度上是重点。如果你再往下读一点,序言的最后一部分就准确地解释了为什么这种开放式的实验不足以成为一名熟练的程序员。随着您通过 HtDP 前进并超越序言,您将看到一种更有原则的程序设计方法,而不是简单地摆弄事物。不过,就目前而言,重要的一点是你正在考虑你正在做的事情,这是一个好兆头。

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

于 2018-11-05T05:28:09.490 回答