;; The first three lines of this file were inserted by DrScheme. They record metadata ;; about the language level of this file in a form that our tools can easily process. #reader(lib "htdp-intermediate-lambda-reader.ss" "lang")((modname NickKevin) (read-case-sensitive #t) (teachpacks ((lib "master.ss" "teachpack" "htdp") (lib "draw.ss" "teachpack" "htdp") (lib "gui.ss" "teachpack" "htdp"))) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ((lib "master.ss" "teachpack" "htdp") (lib "draw.ss" "teachpack" "htdp") (lib "gui.ss" "teachpack" "htdp"))))) (define (get-choice message list-of-choices) (local ( (define the-choices (make-choice (cons "Make a choice" list-of-choices))) (define w (create-window (list (list (make-message message)) (list the-choices) (list (make-button "Close" (lambda (e) (hide-window w))))))) (define (process-result n) (cond [(> n 200) (hide-window w)] ;; timeout after 200 sec [(= (choice-index the-choices) 0) (and (sleep-for-a-while 2) (process-result (+ n 1)))] [else true]) ) ) (cond [(process-result 0) (list-ref list-of-choices (- (choice-index the-choices) 1))]))) (define (get-answer question delay) (local ((define the-answer (make-text question)) (define w (create-window (list (list the-answer) (list (make-button "Close" (lambda (e) (hide-window w))))))) (define (process-result n) (cond [(> n 200) (hide-window w)] ;; timeout after 200 sec [(string=? (text-contents the-answer) "") (and (sleep-for-a-while 1) (process-result (+ n 1)))] [else true] ;; the user starts typing ))) (cond [(process-result 0) (cond [(sleep-for-a-while delay) (text-contents the-answer)]) ]) )) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define starting-weapons (list "baseball-bat" "crowbar") ) (define hygene-choice (list "tooth brush" "bar of soap")) (define hygene-list1 (cons (get-choice "Good Morning!" hygene-choice)starting-weapons)) (define (hygene choice) (cond [(string=? "tooth brush" choice) "brush your teeth"] [else "take a shower"] )) (define message-hygene (string-append "You " (hygene (first hygene-list1)))) (define character-name (get-answer "What's your name?" 6)) (start 300 300) (draw-solid-string (make-posn 20 20) message-hygene) (sleep-for-a-while 5) (clear-solid-string (make-posn 20 20) message-hygene) (define message-downstairs (string-append character-name " walks downstairs.")) (draw-solid-string (make-posn 20 20) message-downstairs) (sleep-for-a-while 2) (define message-parents (string-append character-name " notices something unusual about Mom.")) (sleep-for-a-while 3) (clear-solid-string (make-posn 20 20) message-downstairs) (draw-solid-string (make-posn 20 20) message-parents) (define pixel-150-100 (make-posn 150 65)) (define leftarm (make-posn 80 150)) (define rightarm (make-posn 150 150)) (define righteye (make-posn 140 58)) (define lefteye (make-posn 160 58)) (define body (make-posn 150 100)) (draw-circle pixel-150-100 35 'green) (draw-solid-rect leftarm 80 6 'green) (draw-solid-disk righteye 5 'red) (draw-solid-rect rightarm 80 6 'green) (draw-solid-disk lefteye 5 'red) (draw-solid-rect body 5 180 'green) (sleep-for-a-while 3) (clear-solid-string (make-posn 20 20) message-parents) (define message1 (string-append "She's" " a zombie!")) (draw-solid-string (make-posn 20 20) message1) (sleep-for-a-while 3) ;(define message (string-append character-name " now has a " (first weapon-list1))) (clear-solid-string (make-posn 20 20) message1) (define weapon-choices1 (list "meat cleaver" "frying pan")) (define weapon-list1 (cons (get-choice "Choose your weapon" weapon-choices1) starting-weapons)) (define message (string-append character-name " now has a " (first weapon-list1))) (draw-solid-string (make-posn 20 20) message) (sleep-for-a-while 3) (define zombie-attack1 (list "kill it" "kill it!")) (define zombie-list1 (cons (get-choice "Kill the zombie" zombie-attack1)starting-weapons)) (define (attack choice) (cond [(string=? "kill it" choice) " kill the zombie"] [else " killed the zombie!!!"] )) (define message5 (string-append "You " (attack (first zombie-list1)))) (sleep-for-a-while 1) ;; clear the string (clear-solid-string (make-posn 20 20) message) (draw-solid-string (make-posn 20 20) message5) (define deadhead (make-posn 150 55)) (define neweyes (make-posn 160 48)) (define neweyes2 (make-posn 140 48)) (define blood1 (make-posn 160 100)) (define blood2 (make-posn 180 105)) (define blood3 (make-posn 200 110)) (clear-circle pixel-150-100 35 'green) (clear-solid-disk lefteye 5 'red) (clear-solid-disk righteye 5 'red) (draw-solid-rect blood1 15 3 'red) (draw-circle deadhead 35 'green) (draw-solid-disk neweyes 5 'red) (draw-solid-disk neweyes2 5 'red) (sleep-for-a-while 1) (draw-solid-rect blood2 15 3 'red) (sleep-for-a-while 1) (draw-solid-rect blood3 15 3 'red) (sleep-for-a-while 5) (clear-solid-string (make-posn 20 20) message5) (clear-circle pixel-150-100 35 'green) (clear-solid-rect leftarm 80 6 'green) (clear-solid-disk righteye 5 'red) (clear-solid-rect rightarm 80 6 'green) (clear-solid-disk lefteye 5 'red) (clear-solid-rect body 5 180 'green) (clear-circle deadhead 35 'green) (clear-solid-disk neweyes 5 'red) (clear-solid-disk neweyes2 5 'red) (clear-solid-rect blood1 15 3 'red) (clear-solid-rect blood2 15 3 'red) (clear-solid-rect blood3 15 3 'red) (define message-dog (string-append "You" " check to see if anyone else is okay.")) (draw-solid-string (make-posn 20 20) message-dog) (sleep-for-a-while 3) (clear-solid-string (make-posn 20 20) message-dog) (define dogbody (make-posn 80 150)) (define dogleftarm (make-posn 80 150)) (define dogrightarm (make-posn 150 150)) (define doghead (make-posn 175 140)) (define dognose (make-posn 180 140)) (define dogeye (make-posn 180 135)) (define dogtail (make-posn 100 150)) (draw-solid-rect dogbody 90 6 'green) (draw-solid-rect dogleftarm 6 40 'green) (draw-solid-rect dogrightarm 6 60 'green) (draw-solid-disk doghead 16 'green) (draw-solid-rect dognose 25 9 'green) (draw-solid-disk dogeye 4 'red) (draw-solid-rect dogtail 6 60 'green) (sleep-for-a-while 3) (define zdog-choice (list "doggie treat" "tennis ball")) (define zombie-list2 (cons (get-choice "OMG zombie dog!" zdog-choice)zdog-choice)) (define (attack1 choice) (cond [(string=? "doggie treat" choice) " doggie treat"] [else " tennis ball"] )) (define messagekillzombiedog (string-append "You throw the" (attack1 (first zombie-list2)))) (draw-solid-string (make-posn 20 20) messagekillzombiedog) (sleep-for-a-while 2) (clear-solid-string (make-posn 20 20) messagekillzombiedog) (define message-dogran (string-append "The Dog" " runs after it!")) (draw-solid-string (make-posn 20 20) message-dogran) (sleep-for-a-while 2) (clear-solid-string (make-posn 20 20) message-dogran) (clear-solid-rect dogbody 90 6 'brown) (clear-solid-rect dogleftarm 6 60 'brown) (clear-solid-rect dogrightarm 6 60 'brown) (clear-solid-disk doghead 16 'brown) (clear-solid-rect dognose 25 9 'brown) (clear-solid-rect dogtail 6 60 'green) (define movement1 (make-posn 100 150)) (define movement2 (make-posn 90 180)) (define dogbody2 (make-posn 180 150)) (define dogleftarm2 (make-posn 180 150)) (define dogrightarm2 (make-posn 250 150)) (define doghead2 (make-posn 275 140)) (define dognose2 (make-posn 280 140)) (define dogeye2 (make-posn 280 135)) (define dogtail2 (make-posn 200 150)) (draw-solid-rect dogbody2 90 6 'green) (draw-solid-rect dogleftarm2 6 40 'green) (draw-solid-rect dogrightarm2 6 60 'green) (draw-solid-disk doghead2 16 'green) (draw-solid-rect dognose2 25 9 'green) (draw-solid-disk dogeye2 4 'red) (draw-solid-rect dogtail2 6 60 'green) (draw-solid-rect movement1 60 6 'black) (draw-solid-rect movement2 60 6 'black) (sleep-for-a-while 1) (clear-solid-string (make-posn 20 20) message-dogran) (sleep-for-a-while 2.5) ;; (clear-solid-rect dogbody2 90 6 'green) (clear-solid-rect dogleftarm2 6 40 'green) (clear-solid-rect dogrightarm2 6 60 'green) (clear-solid-disk doghead2 16 'green) (clear-solid-rect dognose2 25 9 'green) (clear-solid-disk dogeye2 4 'red) (clear-solid-rect dogtail2 6 60 'green) (clear-solid-rect movement1 60 6 'black) (clear-solid-rect movement2 60 6 'black) (define message-youran (string-append "You" " keep running!")) (draw-solid-string (make-posn 20 20) message-youran) (sleep-for-a-while 2) (clear-solid-string (make-posn 20 20) message-youran) (sleep-for-a-while 1) (define message-aliens (string-append "You" " round the corner to see...")) (draw-solid-string (make-posn 20 20) message-aliens) (sleep-for-a-while 2) (clear-solid-string (make-posn 20 20) message-aliens) (define message-aliens! (string-append "An Alien" "!")) (draw-solid-string (make-posn 20 20) message-aliens!) (define alienbody (make-posn 100 150)) (define alienleftarm (make-posn 100 150)) (define alienrightarm (make-posn 185 150)) (define alienhead (make-posn 145 140)) (define alienlegs (make-posn 143 140)) (define alienfeet (make-posn 120 280)) (draw-solid-rect alienbody 90 6 'blue) (draw-solid-rect alienleftarm 6 60 'blue) (draw-solid-rect alienrightarm 6 60 'blue) (draw-solid-disk alienhead 12 'blue) (draw-solid-rect alienlegs 6 140 'blue) (draw-solid-rect alienfeet 50 6 'blue) (sleep-for-a-while 2) (clear-solid-string (make-posn 20 20) message-aliens!) (define alien-choice (list "pocket lint" "a handful of change")) (define alien-list (cons (get-choice "Give a peace offering?" alien-choice)alien-choice)) (define (attack2 choice) (cond [(string=? "pocket lint" choice) " is grateful for your offering!"] [else " is grateful for your offering!"] )) (define message-alien-peace (string-append "The alien " (attack2 (first alien-list)))) (draw-solid-string (make-posn 20 20) message-alien-peace) (sleep-for-a-while 3) (clear-solid-string (make-posn 20 20) message-alien-peace) (clear-solid-rect alienbody 90 6 'blue) (clear-solid-rect alienleftarm 6 60 'blue) (clear-solid-rect alienrightarm 6 60 'blue) (clear-solid-disk alienhead 12 'blue) (clear-solid-rect alienlegs 6 140 'blue) (clear-solid-rect alienfeet 50 6 'blue) (define message-alienship (string-append "He" " offers to take you to safey in his space ship")) (draw-solid-string (make-posn 20 20) message-alienship) (define basess (make-posn 70 170)) (define middless (make-posn 102 140)) (define topss (make-posn 125 135)) (define leg1 (make-posn 70 220)) (define leg2 (make-posn 215 220)) (define window (make-posn 150 150)) (draw-solid-rect basess 150 50 'black) (draw-solid-rect middless 90 35 'black) (draw-solid-rect topss 50 10 'black) (draw-solid-rect leg1 5 20 'black) (draw-solid-rect leg2 5 20 'black) (draw-circle window 5 'white) (sleep-for-a-while 5) (clear-solid-rect basess 150 50 'black) (clear-solid-rect middless 90 35 'black) (clear-solid-rect topss 50 10 'black) (clear-solid-rect leg1 5 20 'black) (clear-solid-rect leg2 5 20 'black) (clear-circle window 5 'white) (define basess2 (make-posn 170 70)) (define middless2 (make-posn 202 40)) (define topss2 (make-posn 225 35)) (define leg12 (make-posn 170 120)) (define leg22 (make-posn 315 120)) (define window2 (make-posn 250 50)) (draw-solid-rect basess2 150 50 'black) (draw-solid-rect middless2 90 35 'black) (draw-solid-rect topss2 50 10 'black) (draw-solid-rect leg12 5 20 'black) (draw-solid-rect leg22 5 20 'black) (draw-circle window2 5 'white) (sleep-for-a-while 4) (clear-solid-rect basess2 150 50 'black) (clear-solid-rect middless2 90 35 'black) (clear-solid-rect topss2 50 10 'black) (clear-solid-rect leg12 5 20 'black) (clear-solid-rect leg22 5 20 'black) (clear-circle window2 5 'white) (clear-solid-string (make-posn 20 20) message-alienship) (define message-theend (string-append "The" " end!")) (draw-solid-string (make-posn 150 150) message-theend)