1

如何放置两个具有自己坐标的对象

(define padle1 (rectangle 10 30 "solid" "red"))
(define padle2 (rectangle 10 30 "solid" "red"))
(define (place-dot-at ... ) ...)

进入 bin-bang 函数

(big-bang ...
[to-draw place-dot-at])

我可以使用桨列表吗

(define new-list (list padle1 padle2))
4

2 回答 2

3

big-bang只存储一条信息,通常称为“世界状态”。所有与 一起使用的函数big-bang,例如您的绘图函数、刻度处理程序等,都必须接受该世界状态作为单个参数。

由你决定在你的世界状态中存储什么。如果你想存储两个位置(每个桨一个),列表或结构是要走的路。例如,下面是您可以如何定义一个名为的结构world,它可以同时保持两个位置。

; Create a type called `world` that holds two locations.
(define-struct world [paddle1 paddle2])

; Create a variable to store the initial state of the world.
(define initial-world (make-world (make-posn 0 100) (make-posn 300 100)))

当您编写绘图函数时,它必须一次接受整个世界状态:

(define (draw-game world)
   (place-image 
      paddle1
      (posn-x (world-paddle1 world))
      (posn-y (world-paddle1 world))
      (place-image 
         paddle2
         (posn-x (world-paddle2 world))
         (posn-y (world-paddle2 world))
         BACKGROUND)))

在您的big-bang中,将世界状态视为任何其他类型的数据:

(big-bang
  initial-world
  [to-draw draw-game])
于 2017-06-06T16:26:32.447 回答
1

我建议制作一个draw-paddle在图像顶部绘制单个桨的函数i

(define (draw-paddle p i)
   (overlay/xy (rectangle ...)  ; the paddle
               50 70            ; coordinates on paddle on screen
               i))              ; image of what's previously drawn

然后制作一个函数,在图像顶部的列表中绘制所有桨i

(define (draw-paddles ps i)
   (cond
      [(empty? ps) i]           ; no more paddles to draw
      [else        (draw-paddles 
                        (rest ps)       ; draw the rest of the paddles on top
                        (draw-paddle (first p) i))])) ; of the first paddle
                                                      ; ontop of i

然后最后你可以制作:

 (define (on-draw state)
     (draw-paddles (list paddle1 paddle2) my-background))

如果您没有背景,您可以使用empty-image或制作背景rectangle

于 2017-05-20T08:31:07.760 回答