8.5

Lecture 15: Space invaders

This assignment is due on Sunday, February 27 at 11:59pm. Submit it using Handin as assignment lecture15.

Exercise 1. Write the template for a function that processes a MaybePosn. Make it look like a function called process-maybeposn, and do not put it in a comment. Here is the data definition:
; A MaybePosn is one of:
; - (make-none)
; - Posn
(define-struct none [])

Then write the template for a function that processes a World. Make it look like a function called process-world, and do not put it in a comment. Here is the data definition:
; A World is (make-world ListOfPosns Number MaybePosn)
(define-struct world [invaders player bullet])
; *Interpretation*: the player is at the given X coordinate
;                   and the bottom of the screen
Hint: your template process-world should use process-listofposns and process-maybeposn in the places corresponding to where the data definition of World uses ListOfPosns and MaybePosn.

Exercise 2. Below are some constant definitions from the video above:
(define b1 (make-none))
(define b2 (make-posn 70 50))
(define bullet-sprite (circle 5 "solid" "green"))
Finish designing the following function. Feel free to write your own examples, but be sure to use the bullet-sprite we define above.
; draw-bullet : MaybePosn Image -> Image
; draw the bullet on the given image
(check-expect (draw-bullet b1
                           (place-image player-sprite
                                        80 295
                                        (draw-invaders ps2)))
              (place-image player-sprite
                           80 295
                           (draw-invaders ps2)))
(check-expect (draw-bullet b2
                           (place-image player-sprite
                                        100 295
                                        (draw-invaders ps1)))
              (place-image bullet-sprite
                           70 50
                           (place-image player-sprite
                                        100 295
                                        (draw-invaders ps1))))
(define (draw-bullet b img)
  (cond [(none? b) (... img ...)]
        [(posn? b) (... (posn-x b) (posn-y b) img ...)]))
Hint: Watch the next video.

The code written in the videos above is available for your reference. To download it, don’t use “Save Page As” or “Save As”; use “Save Link As” or “Download Linked File” in your Web browser. If you can’t find the command, try right-clicking or two-finger-tapping or long-pressing.

Optional: Read Chapters 10 and 11 of the textbook. You can also find more ideas for games to build in Chapter 12, such as Snake and Tetris.

Optional: Enjoy the song Rubber Biscuit by the Blues Brothers.