Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Racket 编程新手,关于HTDP序言中练习的问题_Racket_Racket Student Languages_Htdp - Fatal编程技术网

Racket 编程新手,关于HTDP序言中练习的问题

Racket 编程新手,关于HTDP序言中练习的问题,racket,racket-student-languages,htdp,Racket,Racket Student Languages,Htdp,这可能是个愚蠢的问题,但我对编程一无所知。我在“如何设计程序”(第二版)的序言的底部,您将面临对DrRacket中的“火箭着陆”程序进行4项更改的挑战 我被第四条卡住了,特别是粗体部分: 如何更改程序,使火箭降落在比场景底部高10像素的平坦岩层上也别忘了换一换风景 ; constants (define WIDTH 200) (define HEIGHT 400) (define SCENE-CENTER (/ WIDTH 2)) (define MTSCN (empty-scene WIDTH

这可能是个愚蠢的问题,但我对编程一无所知。我在“如何设计程序”(第二版)的序言的底部,您将面临对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)
;常数
(定义宽度200)
(定义高度400)
(定义场景中心(/WIDTH 2))
(定义MTSCN(空场景宽度高度“蓝色”))
(定义火箭(叠加(圆圈10“实心”“绿色”)
(矩形40 4“实心”“绿色”))
(定义火箭从中心到顶部)
(((-高度10)(/(图像高度火箭)2)))
;功能
(定义(picture-of-rocket.v2 h)
(续)
[(h火箭从中心到顶部)
(放置图像火箭场景-中心火箭-中心到顶部MTSCN)])
(火箭的动画图片。v2)

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

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

你的第一个直觉是在底部添加一个矩形。再说一次,没有正确的答案,所以如果它有效的话,现在,没关系。这样做的目的是让你玩一下给你的工具箱。至于“改变风景”意味着什么,我将其理解为字面上要求你在你认为合适的时候装饰场景

如果这种开放式的亲昵感觉有点迷失方向,不要担心,这在很大程度上是关键。如果你再往下读一点,你就会明白为什么这种开放式的实验不足以成为一名熟练的程序员。随着您完成HtDP并超越开场白,您将看到一种更具原则性的程序设计方法,而不仅仅是摆弄东西。不过,现在最重要的一点是,你正在考虑你正在做什么,这是一个好迹象


(顺便说一句,这是我很长时间以来看到的与HtDP相关的所有问题中最好的堆栈溢出问题之一,所以谢谢你。大多数问题都是学生们隐晦地要求人们为他们做作业。)

谢谢你的回答和积极的鼓励!