【发布时间】:2021-05-14 11:52:01
【问题描述】:
我正在尝试在 How to Design Programs (HTDP) 的第 2 版中的第 3 章练习 45 中做一个练习。
所以这个练习要我让一只猫的形象出现在场景的一侧,然后重新出现在起始侧。基本上是一个循环。我已经坚持这个练习一个多星期了,似乎无法理解正确的逻辑。我到处寻找不同的观点,所以我不必征求意见,但我被困住了。我想完成这个练习,所以我可以从中学习。
(require 2htdp/batch-io)
(require 2htdp/universe)
(require 2htdp/image)
(define cat1 . )
(define WIDTH 300)
(define HEIGHT 100)
(define RESTART-POINT (+ WIDTH (image-width cat1)))
(define BACKGROUND (empty-scene WIDTH HEIGHT))
(define cat1-CENTER-TO-TOP
(- HEIGHT (/ (image-height cat1) 2)))
(define Y-cat1 cat1-CENTER-TO-TOP)
(define cat1-CENTER-TO-WIDTH
(/ (image-width cat1) 2))
(define (main x0)
(big-bang x0
[on-tick tock]
[to-draw render]))
(define (tock x)
(+ x 3))
#old version
(define (render x)
(cond
[(>= (tock x) RESTART-POINT)
(place-image cat1 (tock(- (tock x) (tock x))) Y-cat1 BACKGROUND)]
[(<= (tock x) RESTART-POINT)
(place-image cat1 (tock x) Y-cat1 BACKGROUND)]))
#new version
(define (render x)
(cond
[(< (tock x) RESTART-POINT)
(place-image cat1 (tock x) Y-cat1 BACKGROUND)]
[(>= (tock x) RESTART-POINT)
(place-image cat1 (modulo(tock x)RESTART-POINT) Y-cat1 BACKGROUND)]))
这会在屏幕上运行一只猫的图片,但这只猫永远不会像我想要的那样重新出现在左侧。
【问题讨论】:
-
我想你的意思是练习 45,顺便说一句。你告诉它回到起点在哪里?你熟悉modulo 的作用吗?理论上,这应该是对
tock函数的简单修改。 -
@Calculuswhiz 感谢您的提示。我能够让它循环。干杯!