#lang racket/gui (require "structs.rkt") (provide interpret) ;temporary hard-coded room with items for testing, before implementing procgen (define room1 (room (pos 0 0) (dim 10 10) (list (weapon "BIG SWORD" (pos 5 5) 4 'sword 5) (armor "LEATHER CAP" (pos 5 9) 1 'helmet 2)))) (define plyr (player "YOU" room1 '() 'human 20 '() 50)) (define (interpret in) (let ([command (string-upcase in)]) (if (or (string=? command "TYPE HERE...") (string=? command "")) "You need to type something in the box." (let* ([tokens (string-split command)] [verb (first tokens)] [args (rest tokens)]) (case verb [("LOOK") (look args)] [else (~a "I don't understand the verb " verb ".")]))))) (define (look what) (let ([room (obj-pos plyr)]) (if (empty? what) (string-join (obj-names (room-contents room)) ", " #:before-first "In this area, there is " #:before-last ", and " #:after-last ".") (let ([what-str (string-join what)]) (if (find-obj what-str room) (~a "There is a " what-str " in the area.") (~a "The \"" what-str "\" you're looking for isn't in this area.")))))) (define (find-obj obj room) (findf (λ (arg) (string=? obj (obj-name arg))) (room-contents room))) (define (obj-names list) (map obj-name list))