gpt4 book ai didi

scheme - 使用 big-bang 在 Racket (BSL) 中编程 Breakout。放置 Racket 时遇到错误

转载 作者:太空宇宙 更新时间:2023-11-03 18:48:29 24 4
gpt4 key购买 nike

目标是制作游戏 Breakout 并按部就类地进行。我已经在实现桨的第一步中遇到了问题。球和球的弹跳已经被预定义和给定。我希望像这样把它放在(定义(渲染球)中:

(define (render ball worldstate)
(place-image BALL-IMG
(posn-x (ball-loc ball))
(posn-y (ball-loc ball))
(place-image PADDLE (posn-x (world-state-paddle worldstate)) (posn-y (world-state-paddle worldstate))
SCENE)))

但是我收到错误“to-draw: expected function of one argument as first argument; given function of 2 arguments”我不确定如何才能使代码更好。到目前为止,这是我的代码的样子。球和记号已经预定义。到目前为止,我什至无法将 Racket 放入,但球会四处弹跳(尚未实现积木)

(require 2htdp/image)
(require 2htdp/universe)

(define WIDTH 200)
(define HEIGHT 200)
(define BALL-RADIUS 10)
(define BALL-IMG (circle BALL-RADIUS "solid" "red"))
(define SCENE (empty-scene WIDTH HEIGHT))

(define PADDLE (rectangle 60 10 "solid" "green"))
(define SPEED 4)

(define-struct vel (delta-x delta-y))
; a Vel is a structure: (make-vel Number Number)
; interp. the velocity vector of a moving object

(define-struct ball (loc velocity))
; a Ball is a structure: (make-ball Posn Vel)
; interp. the position and velocity of a object

; Posn Vel -> Posn
; applies q to p and simulates the movement in one clock tick
(check-expect (posn+vel (make-posn 5 6) (make-vel 1 2))
(make-posn 6 8))

(define (posn+vel p q)
(make-posn (+ (posn-x p) (vel-delta-x q))
(+ (posn-y p) (vel-delta-y q))))


; Ball -> Ball
; computes movement of ball in one clock tick
(check-expect (move-ball (make-ball (make-posn 20 30)
(make-vel 5 10)))
(make-ball (make-posn 25 40)
(make-vel 5 10)))

(define (move-ball ball)
(make-ball (posn+vel (ball-loc ball)
(ball-velocity ball))
(ball-velocity ball)))


; A Collision is either
; - "top"
; - "down"
; - "left"
; - "right"
; - "none"
; interp. the location where a ball collides with a wall

; Posn -> Collision
; detects with which of the walls (if any) the ball collides
(check-expect (collision (make-posn 0 12)) "left")
(check-expect (collision (make-posn 15 HEIGHT)) "down")
(check-expect (collision (make-posn WIDTH 12)) "right")
(check-expect (collision (make-posn 15 0)) "top")
(check-expect (collision (make-posn 55 55)) "none")

(define (collision posn)
(cond
[(<= (posn-x posn) BALL-RADIUS) "left"]
[(<= (posn-y posn) BALL-RADIUS) "top"]
[(>= (posn-x posn) (- WIDTH BALL-RADIUS)) "right"]
[(>= (posn-y posn) (- HEIGHT BALL-RADIUS)) "down"]
[else "none"]))

; Vel Collision -> Vel
; computes the velocity of an object after a collision
(check-expect (bounce (make-vel 3 4) "left")
(make-vel -3 4))
(check-expect (bounce (make-vel 3 4) "top")
(make-vel 3 -4))
(check-expect (bounce (make-vel 3 4) "none")
(make-vel 3 4))

(define (bounce vel collision)
(cond [(or (string=? collision "left")
(string=? collision "right"))
(make-vel (- (vel-delta-x vel))
(vel-delta-y vel))]
[(or (string=? collision "down")
(string=? collision "top"))
(make-vel (vel-delta-x vel)
(- (vel-delta-y vel)))]
[else vel]))

; WorldState is a Ball
; interp. the current state of the ball

; WorldState -> Image
; renders ball at its position
;(check-expect (image? (render INITIAL-BALL)) #true)

(define (render ball worldstate)
(place-image BALL-IMG
(posn-x (ball-loc ball))
(posn-y (ball-loc ball))
SCENE))

; WorldState -> WorldState
; moves ball to its next location
(check-expect (tick (make-ball (make-posn 20 12) (make-vel 1 2)))
(make-ball (make-posn 21 14) (make-vel 1 2)))

(define (tick ball)
(move-ball (make-ball (ball-loc ball)
(bounce (ball-velocity ball)
(collision (ball-loc ball))))))


(define-struct world-state (paddle speed ball))

;WorldState is a structure (make-world-state paddle speed Ball)

(define Example-world-state (make-world-state PADDLE SPEED (make-ball (make-posn 20 12)
(make-vel 1 2))))

;mouse
;Worldstate Number Number MouseEvent -> Worldstate
;moves the paddle
(define (mouse worldstate x y mouseEvent)
(make-world-state (world-state-speed worldstate) (world-state-ball worldstate)
(cond
[(string=? mouseEvent "move")
(make-posn x y)]
[else (world-state-paddle worldstate)])))




(define INITIAL-BALL (make-ball (make-posn 20 12)
(make-vel 1 2)))

(define INITIAL-WORLD-STATE INITIAL-BALL)

(define (main state)
(big-bang state (on-tick tick 0.01) (to-draw render) (on-mouse mouse)))

(main INITIAL-WORLD-STATE)

我感谢您提供的任何提示!

最佳答案

我注意到你的'render'函数签名是

WorldState -> Image

但是,渲染得到 2 个参数:

 `(define (render ball worldstate) ...)`

签名用于类型检查和更好地记录您的工作以供其他人理解,在这种情况下它帮助我快速找到问题:)

根据您提供的错误:

(绘制渲染)

在函数“main”中期望 render 是一个仅接收 1 个参数 的函数,而在您的代码中它被定义为一个接受 2 个参数 的函数:

在此处检查渲染和绘制: to-draw@docs.racket-lang.org

关于scheme - 使用 big-bang 在 Racket (BSL) 中编程 Breakout。放置 Racket 时遇到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47848191/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com