;; The first three lines of this file were inserted by DrRacket. They record
metadata
;; about the language level of this file in a form that our tools can easily
process.
#reader(lib "htdp-beginner-reader.ss" "lang")((modname pset-04-solution) (read-
case-sensitive #t) (teachpacks ()) (htdp-settings #(#t constructor repeating-
decimal #f #t none #f () #t)))
;; DO NOT PUT ANYTHING PERSONALLY IDENTIFYING BEYOND YOUR 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-04);Do not edit or remove this tag
(@problem 1)
(@htdw ListOfBall)
;; Constants:
(define WIDTH 605)
(define HEIGHT 535)
(define BALL-RADIUS 10)
(define TOP (+ 0 BALL-RADIUS)) ;these constants define the "inner box"
(define BOT (- HEIGHT BALL-RADIUS 1)) ;that constrain the center of the ball
(define LEF (+ 0 BALL-RADIUS)) ;
(define RIG (- WIDTH BALL-RADIUS 1)) ;
(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))
(@dd-template-rules compound)
(define (fn-for-ball b)
(... (ball-x b)
(ball-y b)
(ball-dx b)
(ball-dy b)))
(@htdd ListOfBall)
;; ListOfBall is one of:
;; - empty
, ;; - (cons Ball ListOfBall)
;; interp. a list of balls
(define LOB1 empty)
(define LOB2 (cons B1 empty))
(@dd-template-rules one-of
atomic-distinct
compound
ref
self-ref)
(define (fn-for-lob lob)
(cond [(empty? lob) (...)]
[else
(... (fn-for-ball (first lob))
(fn-for-lob (rest lob)))]))
;; ===========================================================================
;; ===========================================================================
;; Functions:
(@htdf main)
(@signature ListOfBall -> ListOfBall)
;; start the game, call with (main LOB1)
;; <no tests for main functions>
(@template htdw-main)
(define (main lob)
(big-bang lob
(on-draw render-balls) ;ListOfBall -> Image
(on-tick next-balls) ;ListOfBall -> ListOfBall
(on-key handle-key) ;ListOfBall KeyEvent -> ListOfBall
(on-mouse handle-mouse))) ;ListOfBall MouseEvent Integer Integer
; -> ListOfBall
(@htdf render-balls)
(@signature ListOfBall -> Image)
;; render all balls onto MTS
(check-expect (render-balls empty) MTS)
(check-expect (render-balls (cons (make-ball 10 20 3 4)
(cons (make-ball 30 40 1 2)
empty)))
(place-ball (make-ball 10 20 3 4)
(place-ball (make-ball 30 40 1 2)
MTS)))
;(define (render-balls lob) MTS) ;stub
(@template ListOfBall)
(define (render-balls lob)
(cond [(empty? lob) MTS]
[else
(place-ball (first lob)
(render-balls (rest lob)))]))
metadata
;; about the language level of this file in a form that our tools can easily
process.
#reader(lib "htdp-beginner-reader.ss" "lang")((modname pset-04-solution) (read-
case-sensitive #t) (teachpacks ()) (htdp-settings #(#t constructor repeating-
decimal #f #t none #f () #t)))
;; DO NOT PUT ANYTHING PERSONALLY IDENTIFYING BEYOND YOUR 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-04);Do not edit or remove this tag
(@problem 1)
(@htdw ListOfBall)
;; Constants:
(define WIDTH 605)
(define HEIGHT 535)
(define BALL-RADIUS 10)
(define TOP (+ 0 BALL-RADIUS)) ;these constants define the "inner box"
(define BOT (- HEIGHT BALL-RADIUS 1)) ;that constrain the center of the ball
(define LEF (+ 0 BALL-RADIUS)) ;
(define RIG (- WIDTH BALL-RADIUS 1)) ;
(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))
(@dd-template-rules compound)
(define (fn-for-ball b)
(... (ball-x b)
(ball-y b)
(ball-dx b)
(ball-dy b)))
(@htdd ListOfBall)
;; ListOfBall is one of:
;; - empty
, ;; - (cons Ball ListOfBall)
;; interp. a list of balls
(define LOB1 empty)
(define LOB2 (cons B1 empty))
(@dd-template-rules one-of
atomic-distinct
compound
ref
self-ref)
(define (fn-for-lob lob)
(cond [(empty? lob) (...)]
[else
(... (fn-for-ball (first lob))
(fn-for-lob (rest lob)))]))
;; ===========================================================================
;; ===========================================================================
;; Functions:
(@htdf main)
(@signature ListOfBall -> ListOfBall)
;; start the game, call with (main LOB1)
;; <no tests for main functions>
(@template htdw-main)
(define (main lob)
(big-bang lob
(on-draw render-balls) ;ListOfBall -> Image
(on-tick next-balls) ;ListOfBall -> ListOfBall
(on-key handle-key) ;ListOfBall KeyEvent -> ListOfBall
(on-mouse handle-mouse))) ;ListOfBall MouseEvent Integer Integer
; -> ListOfBall
(@htdf render-balls)
(@signature ListOfBall -> Image)
;; render all balls onto MTS
(check-expect (render-balls empty) MTS)
(check-expect (render-balls (cons (make-ball 10 20 3 4)
(cons (make-ball 30 40 1 2)
empty)))
(place-ball (make-ball 10 20 3 4)
(place-ball (make-ball 30 40 1 2)
MTS)))
;(define (render-balls lob) MTS) ;stub
(@template ListOfBall)
(define (render-balls lob)
(cond [(empty? lob) MTS]
[else
(place-ball (first lob)
(render-balls (rest lob)))]))