CWL IN THIS FILE.
;; YOUR CWLs WILL BE SUFFICIENT TO IDENTIFY YOU AND, IF YOU HAVE
ONE, YOUR
;; PARTNER.
(require 2htdp/universe)
(require 2htdp/image)
(require spd/tags)
(@assignment psets/pset-05);Do not edit or remove this tag
;; If you are:
;; - A 110 or 107 student replace the first set of '???'s with your cwl.
;; For problem sets, If you have a partner, please replace the second
;; set of '???'s with their cwl. Remember this, it is what you will
;; do with these @cwl annotations for the whole course.
;; - A UBC Extended Learning student, replace the first set of ??? with
;; your email address as confirmed in the email you received from
;; extended learning. The handin password is also in that email.
;; Remember this, it is what you will do with these @cwl annotations
;; for the whole course.
;;
(@cwl ??? ???)
;; Bounce any number of balls around the screen.
;;
;; In this problem set you are given our official solution to problem
;; set 4 (with a few additional things added) as a starting point.
;; We have given you some more constants, a helper function called
;; touch-paddle? which you may use, and a new data defintion called Game.
;; You need to revise the program so that:
;; - the game includes a paddle that moves back and forth across the
;; bottom of the screen
;; - the paddle is controlled by the left and right arrow keys
;; - when a ball hits the paddle it disappears
;; - as before the mouse can be used to add balls to the game
;;
;; As stated above, we have given you a new data definition called Game.
;; You MUST revise the program so that it uses Game as the world state.
,;; You MUST NOT change the Game data definition in anyway (though you are
;; allowed to add more Game constants).
;;
;; We suggest you work in three distinct phases, making sure your program
;; works correctly at the end of each phase before going on to the next.
;; - change the program's world state to Game
;; - provide left/right arrow key control over the paddle
;; - make it so that when a ball hits the paddle it disappears
;;
;; In each of these phases you should follow the design recipes! Re-work
;; the domain analysis for changing and constant information, update the
;; data definitions, revise the main function, and so on. Make sure that
;; your tags are correct and that all your tests work correctly before you
;; proceed to the next phase.
;;
;; NOTE: Your on-tick function MUST be designed as a composition of two other
;; functions called game-with-next-balls and game-with-caught-balls.
;;
;; Note that we are giving you significant help in the starter file.
;; You absolutely MUST USE OUR STARTER AS THE BASIS FOR YOUR
WORK.
;;
;; We recommend that you begin by printing this file and planning out what
;; needs to change, what needs to be added, and what will be unchanged.
;;
(@problem 1)
(@htdw ListOfBall)
;; Constants:
(define WIDTH 605)
(define HEIGHT 535)
(define PADDLE-WIDTH 60)
(define PADDLE-THICKNESS 10)
(define PADDLE (rectangle PADDLE-WIDTH PADDLE-THICKNESS "solid"
"white"))
(define PADDLE-CTR-Y (- HEIGHT 40))
(define PADDLE-MOVE-PER-KEY 10)
(define BALL-RADIUS 10)
, (define TOP BALL-RADIUS)
(define BOT (- HEIGHT 1 BALL-RADIUS))
(define LEF BALL-RADIUS)
(define RIG (- WIDTH 1 BALL-RADIUS))
(define BALL (circle BALL-RADIUS "solid" "white"))
(define MTS (rectangle WIDTH HEIGHT "solid" "green"))
;;
============================================================
===============
;;
============================================================
===============
;; Data definitions:
(@htdd Ball)
(define-struct ball (x y dx dy))
;; Ball is (make-ball Number Number Number Number)
;; interp. (make-ball x y dx dy) is ball
;; - position x, y in screen coordinates
;; - velocity dx, dy in pixels/tick
;; CONSTRAINT: x is in [LEF, RIG]; y is in [TOP, BOT]
(define B1 (make-ball (/ WIDTH 2) (/ HEIGHT 2) 4 -3))
;; Constant for example:
(define touched-paddle1 (make-ball (+ 100 (/ PADDLE-WIDTH 2))
(+ PADDLE-CTR-Y (/ PADDLE-THICKNESS 2))
1 1))
(define touched-paddle2 (make-ball (+ 100 (/ PADDLE-WIDTH 2))
PADDLE-CTR-Y
1 1))
;; these two ball touch paddle at p = 100
(@dd-template-rules compound)
(define (fn-for-ball b)
(... (ball-x b)