Scheme 论击键 我试图把我放在中间的红色球向上、向下、向左或向右移动。当我按下任何一个箭头键时,它说它需要一个数字,但给出了一个图像。我做错了什么?
首先,你需要了解世界是如何在这个主循环中处理的:Scheme 论击键 我试图把我放在中间的红色球向上、向下、向左或向右移动。当我按下任何一个箭头键时,它说它需要一个数字,但给出了一个图像。我做错了什么?,scheme,racket,Scheme,Racket,首先,你需要了解世界是如何在这个主循环中处理的: 该系统采用了大爆炸-100的第一个参数,并将其作为一个世界国家进行记忆 然后它将其传递给一个on tick(sub1)函数,前提是它存在于每个tick上 当按下该键时,它将调用键(change),并将woldState作为w参数传递给该键 在那里你画了一些图片,并在按下箭头键时返回。因此,当按下箭头时,它返回球图像的结果=放置图像的结果-图像 系统会将其作为当前世界状态进行记忆, 在下一个勾号中,它将新值传递给旧过程:sub1 由于该值现在是图
- 该系统采用了大爆炸-100的第一个参数,并将其作为一个世界国家进行记忆
- 然后它将其传递给一个on tick(sub1)函数,前提是它存在于每个tick上
- 当按下该键时,它将调用键(change),并将woldState作为w参数传递给该键
- 在那里你画了一些图片,并在按下箭头键时返回。因此,当按下箭头时,它返回球图像的结果=放置图像的结果-图像
- 系统会将其作为当前世界状态进行记忆, 在下一个勾号中,它将新值传递给旧过程:sub1
- 由于该值现在是图像,sub1将拒绝该值
(需要2htdp/image)
(需要2htdp/宇宙)
(定义(球图像t);首先,您需要了解在这个主圆中世界是如何处理的:
- 该系统采用了大爆炸-100的第一个参数,并将其作为一个世界国家进行记忆
- 然后它将其传递给一个on tick(sub1)函数,前提是它存在于每个tick上
- 当按下该键时,它将调用键(change),并将woldState作为w参数传递给该键
- 在这里,您可以绘制一些图片,并在按下箭头键时返回它。因此,当按下箭头时,它将返回球图像的结果=放置图像的结果-图像
- 系统会将其作为当前世界状态进行记忆,
在下一个勾号中,它将新值传递给旧过程:sub1
- 由于该值现在是图像,sub1将拒绝该值
--
如果你想在两个方向上移动一个球,你必须存储至少两个坐标(x.y)。因此,现在让WorldState成为两个数字的对。我们不需要一个on tick函数,因为它本身不会发生任何变化。此外,我们也不需要在键盘处理器中绘制球,所以让我们简单地更改对中的相应值(worldState),并仅在调用(球图像)将球放入新位置时绘制它(记住,x=(car t),y=(cdr t)和(x.y)=(cons x y)):
(需要2htdp/image)
(需要2htdp/宇宙)
(定义(球图像t);你的合同在哪里?你的函数的目的陈述在哪里?不清楚每个函数的目的是什么;与其强迫人们猜测,不如把它写出来。你有任何关于更改的测试用例吗?
?sub1实际上是一个数字过程,所以它需要数字。在(勾号…)place应该是一个函数,它可以将所谓的世界状态每一个记号都转换为一个。@Necto:sub1将是一个从世界到世界的完美函数,如果OP描述了世界状态是什么的话。没有那么多的信息,我们什么也说不出来。这就是为什么我试图强迫OP表达代码以外的东西:它们是haven根本没有说类型应该是什么,并且几乎忽略了基本的设计配方步骤。你的合同在哪里?你的函数的目的陈述在哪里?不清楚每个函数的目的是什么;与其强迫人们猜测,不如把它写出来。你有更改的测试用例吗1实际上是一个数字过程,所以它需要数字。在(勾选…)place应该是一个函数,它可以将所谓的世界状态每一个记号都转换为一个。@Necto:sub1将是一个从世界到世界的完美函数,如果OP描述了世界状态是什么的话。没有那么多的信息,我们什么也说不出来。这就是为什么我试图强迫OP表达代码以外的东西:它们是haven根本没有说这些类型应该是什么,几乎忽略了基本的设计步骤。
(require 2htdp/image)
(require 2htdp/universe)
(define (render t)
(text (number->string t) 10 "red"))
(define (ball-image t)
(place-image (circle 10 "solid" "red")
150
150
(empty-scene 300 300)))
(define (change w a-key)
(cond
[(key=? a-key "left") (ball-image w)]
[(key=? a-key "right") (ball-image w )]
[(= (string-length a-key) 1) w]
[(key=? a-key "up") (ball-image w )]
[(key=? a-key "down") (ball-image w )]
[else w]))
(big-bang 100
(on-tick sub1 )
(to-draw ball-image)
(on-key change))
(require 2htdp/image)
(require 2htdp/universe)
(define (ball-image t) ;<-- the t-parameter is our WorldState
(place-image (circle 10 "solid" "red")
(car t) ;<-- here now x variable coordinate
(cdr t) ;<-- here now y variable, instead of 150
(empty-scene 300 300)))
(define (change w a-key)
(cond ;w - is the previous worldState, V here we change it
[(key=? a-key "left") (cons (sub1 (car w)) (cdr w))];and
[(key=? a-key "right") (cons (add1 (car w)) (cdr w))];return
[(= (string-length a-key) 1) w] ;<-- this line is excess
[(key=? a-key "up") (cons (car w) (sub1 (cdr w)))]
[(key=? a-key "down") (cons (car w) (add1 (cdr w)))]
[else w])) ;<-- If the key of no interest, just
return the previous WorldState
(big-bang '(150 . 150) ;<-- initial state
(to-draw ball-image) ;<-- redraws the world
(on-key change)) ;<-- process the event of key press