;; 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-advanced-reader.ss" "lang")((modname |Problem set 10 game program|) (read-case-sensitive #t) (teachpacks ((lib "draw.ss" "teachpack" "htdp") (lib "gui.ss" "teachpack" "htdp"))) (htdp-settings #(#t constructor repeating-decimal #t #t none #f ((lib "draw.ss" "teachpack" "htdp") (lib "gui.ss" "teachpack" "htdp"))))) ;; Chase Ottomoeller, Charles Gervais, Joel Waage ;; ============== These are the two predefined functions ==================== ;; You don't need to understand their code, only the contract and the purpose ;; =========================================================================== ;; ===================== You may skip to the sample code below ================ ;; get-choice: string, list of strings -> integer ;; the function displays a simple menu form with the given message ;; and a drop-down menu with the list of choices. The menu ;; initially displays "Make a choice". Once a different item is chosen, ;; that item is returned. ;; When a "Close" button is pressed, the form disappears. (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 1) (process-result (+ n 1)))] [else true]) ) ) (cond [(process-result 0) (list-ref list-of-choices (- (choice-index the-choices) 1))]))) ;; get-answer: string number -> string ;; The function displays a simple text input with a question ;; and returns the answer typed in by the user ;; The second parameter (time-delay) is the number of seconds ;; the function waits after the typing of the first character ;; before it returns the answer. If the user takes longer ;; than that, a partial answer may be returned ;; 5 sec delay is reasonable for a one-word answer (define (get-answer question time-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 time-delay) (text-contents the-answer)]) ]) )) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (start 700 700) ;; Draws a stick figure (define (person-graphics) (and(draw-solid-disk (make-posn 450 275) 50 'blue) (draw-solid-line (make-posn 450 325) (make-posn 450 485)) (draw-solid-line (make-posn 450 370) (make-posn 350 435)) (draw-solid-line (make-posn 450 370) (make-posn 550 435)) (draw-solid-line (make-posn 450 485) (make-posn 350 655)) (draw-solid-line (make-posn 450 485) (make-posn 550 655)))) ;; Draws a computer with a face (define (computer) (and(draw-solid-rect(make-posn 100 300)130 100 'black)(draw-solid-rect(make-posn 150 400)25 40 'red)(draw-solid-rect(make-posn 130 430) 70 25 'red) (draw-solid-rect(make-posn 100 475) 130 40)(draw-solid-rect(make-posn 101 476) 5 5 'white)(draw-solid-rect(make-posn 107 476) 5 5 'white) (draw-solid-rect(make-posn 113 476) 5 5 'white)(draw-solid-rect(make-posn 119 476) 5 5 'white) (draw-solid-rect(make-posn 128 476) 5 5 'white) (draw-solid-rect(make-posn 134 476) 5 5 'white)(draw-solid-rect(make-posn 140 476) 5 5 'white) (draw-solid-rect(make-posn 146 476) 5 5 'white) (draw-solid-rect(make-posn 155 476) 5 5 'white)(draw-solid-rect(make-posn 161 476) 5 5 'white) (draw-solid-rect(make-posn 167 476) 5 5 'white) (draw-solid-rect(make-posn 173 476) 5 5 'white)(draw-solid-rect(make-posn 179 476) 5 5 'white) (draw-solid-rect(make-posn 200 483) 5 5 'white) (draw-solid-rect(make-posn 206 483) 5 5 'white) (draw-solid-rect(make-posn 212 483) 5 5 'white)(draw-solid-rect(make-posn 218 483) 5 5 'white) (draw-solid-rect(make-posn 200 489) 5 5 'white)(draw-solid-rect(make-posn 206 489) 5 5 'white)(draw-solid-rect(make-posn 212 489) 5 5 'white) (draw-solid-rect(make-posn 218 489) 5 5 'white)(draw-solid-rect(make-posn 200 495) 5 5 'white)(draw-solid-rect(make-posn 206 495) 5 5 'white) (draw-solid-rect(make-posn 212 495) 5 5 'white)(draw-solid-rect(make-posn 218 495) 5 5 'white)(draw-solid-rect(make-posn 200 501) 5 5 'white) (draw-solid-rect(make-posn 206 501) 5 5 'white)(draw-solid-rect(make-posn 212 501) 5 5 'white)(draw-solid-rect(make-posn 218 501) 5 5 'white) (draw-solid-rect(make-posn 101 485) 5 5 'white)(draw-solid-rect(make-posn 107 485) 5 5 'white)(draw-solid-rect(make-posn 113 485) 5 5 'white) (draw-solid-rect(make-posn 119 485) 5 5 'white)(draw-solid-rect(make-posn 125 485) 5 5 'white)(draw-solid-rect(make-posn 131 485) 5 5 'white) (draw-solid-rect(make-posn 137 485) 5 5 'white)(draw-solid-rect(make-posn 143 485) 5 5 'white)(draw-solid-rect(make-posn 149 485) 5 5 'white) (draw-solid-rect(make-posn 155 485) 5 5 'white)(draw-solid-rect(make-posn 161 485) 5 5 'white)(draw-solid-rect(make-posn 167 485) 5 5 'white) (draw-solid-rect(make-posn 173 485) 5 5 'white)(draw-solid-rect(make-posn 101 491) 5 5 'white)(draw-solid-rect(make-posn 107 491) 5 5 'white) (draw-solid-rect(make-posn 113 491) 5 5 'white)(draw-solid-rect(make-posn 119 491) 5 5 'white)(draw-solid-rect(make-posn 125 491) 5 5 'white) (draw-solid-rect(make-posn 131 491) 5 5 'white)(draw-solid-rect(make-posn 137 491) 5 5 'white)(draw-solid-rect(make-posn 143 491) 5 5 'white) (draw-solid-rect(make-posn 149 491) 5 5 'white)(draw-solid-rect(make-posn 155 491) 5 5 'white)(draw-solid-rect(make-posn 161 491) 5 5 'white) (draw-solid-rect(make-posn 167 491) 5 5 'white)(draw-solid-rect(make-posn 173 491) 5 5 'white)(draw-solid-rect(make-posn 101 497) 5 5 'white) (draw-solid-rect(make-posn 107 497) 5 5 'white)(draw-solid-rect(make-posn 113 497) 5 5 'white)(draw-solid-rect(make-posn 119 497) 5 5 'white) (draw-solid-rect(make-posn 125 497) 5 5 'white)(draw-solid-rect(make-posn 131 497) 5 5 'white)(draw-solid-rect(make-posn 137 497) 5 5 'white) (draw-solid-rect(make-posn 143 497) 5 5 'white)(draw-solid-rect(make-posn 149 497) 5 5 'white)(draw-solid-rect(make-posn 155 497) 5 5 'white) (draw-solid-rect(make-posn 161 497) 5 5 'white)(draw-solid-rect(make-posn 167 497) 5 5 'white)(draw-solid-rect(make-posn 173 497) 5 5 'white) (draw-solid-rect(make-posn 110 505) 60 5 'white) (draw-solid-rect(make-posn 110 315) 108 70 'white)(draw-solid-rect(make-posn 135 325) 15 15 'blue) (draw-solid-rect (make-posn 170 325)15 15 'blue)(draw-solid-rect(make-posn 145 365) 40 10 'blue)(draw-solid-rect(make-posn 125 350) 10 10 'blue) (draw-solid-rect(make-posn 132 355) 10 10 'blue)(draw-solid-rect(make-posn 136 360) 10 10 'blue)(draw-solid-rect(make-posn 138 363) 10 10 'blue) (draw-solid-rect(make-posn 185 350) 10 10 'blue)(draw-solid-rect(make-posn 182 355) 10 10 'blue)(draw-solid-rect(make-posn 180 362) 10 10 'blue) (draw-solid-disk(make-posn 260 500)10 'green)(draw-solid-disk(make-posn 260 510)10 'green)(draw-solid-rect(make-posn 253 494) 13 10 'black) (draw-solid-line(make-posn 259 494)(make-posn 259 504)'white)(draw-solid-line(make-posn 259 494)(make-posn 259 480)'blue) (draw-solid-line(make-posn 259 480)(make-posn 240 455)'blue)(draw-solid-line(make-posn 240 455)(make-posn 200 445)'blue) )) ;; Draws a Versus sign showing it's the computer versus the player. (define (VS)(draw-solid-string (make-posn 280 395) "vs")) ;; Draws a Rock (define (Rock-graphics) (and (draw-solid-disk (make-posn 100 150) 50 'gray) (draw-solid-rect (make-posn 100 100) 30 100 'gray) (draw-solid-disk (make-posn 130 150) 50 'gray) (draw-solid-disk (make-posn 150 110) 3 'black) (draw-solid-disk (make-posn 85 120) 3 'black) (draw-solid-disk (make-posn 107 175) 3 'black) (draw-solid-disk (make-posn 125 136) 3 'black) (draw-solid-disk (make-posn 75 149) 3 'black) (draw-solid-disk (make-posn 150 145) 3 'black) (draw-solid-disk (make-posn 125 190) 3 'black) (draw-solid-disk (make-posn 90 140) 3 'black))) ;; Draws a piece a paper (define (Paper-graphics) (and (draw-solid-rect (make-posn 80 50) 116 150 'yellow) (draw-solid-line (make-posn 80 70) (make-posn 196 70) 'black) (draw-solid-line (make-posn 80 80) (make-posn 196 80) 'black) (draw-solid-line (make-posn 80 90) (make-posn 196 90) 'black) (draw-solid-line (make-posn 80 100) (make-posn 196 100) 'black) (draw-solid-line (make-posn 80 110) (make-posn 196 110) 'black) (draw-solid-line (make-posn 80 120) (make-posn 196 120) 'black) (draw-solid-line (make-posn 80 130) (make-posn 196 130) 'black) (draw-solid-line (make-posn 80 140) (make-posn 196 140) 'black) (draw-solid-line (make-posn 80 150) (make-posn 196 150) 'black) (draw-solid-line (make-posn 80 160) (make-posn 196 160) 'black) (draw-solid-line (make-posn 80 170) (make-posn 196 170) 'black) (draw-solid-line (make-posn 80 180) (make-posn 196 180) 'black) (draw-solid-line (make-posn 80 190) (make-posn 196 190) 'black) (draw-solid-line (make-posn 80 200) (make-posn 196 200) 'black))) ;; Draws a pair of scissors (define (Scissors-graphics) (and (draw-solid-disk (make-posn 100 130) 15 'gray) (draw-solid-disk (make-posn 100 160) 15 'gray) (draw-solid-disk (make-posn 100 130) 9 'white) (draw-solid-disk (make-posn 100 160) 9 'white) (draw-solid-rect (make-posn 100 140) 90 10 'gray) (draw-solid-line (make-posn 110 145) (make-posn 188 145) 'black))) ;; draws a white box (define (white-box) (draw-solid-rect(make-posn 30 30) 1000 190 'white)) ;; draws the word Tie!! (define (Tie!!)(draw-solid-string (make-posn 350 100)"Tie!!")) ;; draws the word YOUWIN!!! (define (YOUWIN!!!)(draw-solid-string (make-posn 350 100)"You Win!!!!!!")) ;; draws the word YouLosedu> (define (YouLose)(draw-solid-string (make-posn 350 100)"You Lose!!!!!")) ;; draws a bomb (define (Bomb) (and(draw-solid-disk(make-posn 600 175) 40 'black) (draw-solid-rect(make-posn 590 125) 20 20 'black) (draw-solid-line (make-posn 600 125)(make-posn 600 95) 'red) (draw-solid-disk (make-posn 600 95) 10 'yellow))) ;; draws the background, ie the computer the person and the versus sign (define (background) (and (VS) (computer) (person-graphics))) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Problem Set 10 ;; Video game project ;; Title: World Rock Paper Scissors Federation!!!!! (W.R.P.S.F) ;; lists: ;; Creats a global Rock Paper Scissors list (define rps-list (list "Rock" "Paper" "Scissors" "Exit")) ;; Computer Random selection ;; get-nth : number list -> element ;; it takes a number and returns a corresponding element in a list. (define (get-nth n a-list) (cond [(empty? a-list)'NoSuchElement] [(= n 1)(first a-list)] [else (get-nth (- n 1) (rest a-list))] ) ) ;; rps : number list -> number ;; it takes a number and adds one to that number. it then calls get-nth. (define (rps f f-list) (get-nth (+ f 1) f-list) ) ;; c-celect-get : -> element (define (c-select-get) (rps (random 3) rps-list) ) ;; Background and P-select (background) ;; p-select-get : -> gui window ;; it opens a gui window that contains a list (define (p-select-get) (get-choice "weapons" rps-list)) ;; winner : -> list ;; uses set to creat a new list (define (winner) (set! rps-list (list "Rock" "Paper" "Scissors" "Bomb" "Exit"))) ;; Computer VS Player ;; competition : -> outcome ;; it opens a gui box, and draws certain objects corresponding to choices made by both the computer and player. (The Heart and Soal of the Game!!!) (define (competition) (local ((define p-select (p-select-get)) (define c-select (c-select-get))) (cond [(string=? "Exit" p-select) (exit)] [(string=? "Bomb" p-select) (begin (Rock-graphics)(YOUWIN!!!) (set! rps-list (list "Rock" "Paper" "Scissors" "Exit"))(Bomb)(sleep-for-a-while 3)(white-box)(competition))] [(and(string=? "Paper" c-select)(string=? "Paper" p-select)) (begin (Paper-graphics) (Tie!!)(sleep-for-a-while 3)(white-box)(competition))] [(and(string=? "Scissors" c-select)(string=? "Scissors" p-select)) (begin (Scissors-graphics) (Tie!!)(sleep-for-a-while 3)(white-box)(competition))] [(and(string=? "Rock" c-select)(string=? "Rock" p-select)) (begin (Rock-graphics) (Tie!!)(sleep-for-a-while 3)(white-box)(competition))] [(and(string=? "Rock" c-select)(string=? "Scissors" p-select)) (begin (Rock-graphics)(YouLose)(sleep-for-a-while 3)(white-box)(competition))] [(begin(string=? "Rock" c-select)(string=? "Paper" p-select)) (begin (Rock-graphics) (YOUWIN!!!)(sleep-for-a-while 3)(white-box)(winner)(competition))] [(and(string=? "Paper" c-select)(string=? "Scissors" p-select)) (begin (Paper-graphics) (YOUWIN!!!)(sleep-for-a-while 3)(white-box)(winner)(competition))] [(and(string=? "Paper" c-select)(string=? "Rock" p-select)) (begin (Paper-graphics) (YouLose)(sleep-for-a-while 3)(white-box)(competition))] [(and(string=? "Scissors" c-select)(string=? "Paper" p-select)) (begin (Scissors-graphics) (YouLose)(sleep-for-a-while 3)(white-box)(competition))] [(and(string=? "Scissors" c-select)(string=? "Rock" p-select)) (begin (Scissors-graphics) (YOUWIN!!!)(sleep-for-a-while 3)(white-box)(winner)(competition))] ))) (competition)