Scheme 球拍练习中的打圈

Scheme 球拍练习中的打圈,scheme,lisp,racket,Scheme,Lisp,Racket,我想在《如何设计程序》第二版的第三章练习45中做一个练习 因此,这个练习需要我将一只猫的图像从场景的一侧移到另一侧,然后重新出现在起始侧。基本上是一个循环。我已经坚持做这个练习一个多星期了,似乎没有正确的逻辑。我到处寻找不同的观点,所以我不必征求意见,但我被卡住了。我想完成这个练习,这样我就可以从中学习 需要2htdp/批处理io 需要2htdp/宇宙 需要2htdp/映像 定义cat1。 定义宽度300 定义高度100 定义重新启动点+宽度图像宽度cat1 定义背景空场景宽度高度 定义cat1

我想在《如何设计程序》第二版的第三章练习45中做一个练习

因此,这个练习需要我将一只猫的图像从场景的一侧移到另一侧,然后重新出现在起始侧。基本上是一个循环。我已经坚持做这个练习一个多星期了,似乎没有正确的逻辑。我到处寻找不同的观点,所以我不必征求意见,但我被卡住了。我想完成这个练习,这样我就可以从中学习

需要2htdp/批处理io 需要2htdp/宇宙 需要2htdp/映像 定义cat1。 定义宽度300 定义高度100 定义重新启动点+宽度图像宽度cat1 定义背景空场景宽度高度 定义cat1中心到顶部 -高度/图像高度cat1 2 定义Y-cat1 cat1中心到顶部 将cat1中心定义为宽度 /图像宽度cat1 2 定义主x0 大爆炸x0 [滴答声] [绘制和渲染] 定义tock x +x3 旧版本 定义渲染x 康德 [>=tock x重新启动点 放置图像cat1 tock-tock x tock x Y-cat1背景] [=tock x重新启动点 将图像放置在cat1模块上X重新启动点Y-cat1背景]
这会在屏幕上显示一只猫的图片,但猫永远不会像我希望的那样出现在左侧。

感谢@Calculuswiz的提示。 这是一个简单的修正,在tock函数中添加了模

(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,顺便说一句。你在哪里告诉它回到起点?你熟悉你的工作吗?理论上,这应该是对tock函数的简单修改。@Calculuswhiz谢谢你的提示。我能使它循环。干杯