diff --git a/interpret.rkt b/interpret.rkt index 3a83d3b..5b82ca7 100644 --- a/interpret.rkt +++ b/interpret.rkt @@ -1,13 +1,42 @@ #lang racket/gui +(require "structs.rkt") (provide interpret) -; expects all strings to be uppercase -(define (interpret command) - (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 - [else (~a "I don't understand the verb " verb)])))) +;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)) \ No newline at end of file diff --git a/structs.rkt b/structs.rkt index 9bbca62..5208d72 100644 --- a/structs.rkt +++ b/structs.rkt @@ -1,10 +1,19 @@ #lang racket/gui (provide (all-defined-out)) -(struct item (name size)) +(struct pos (x y)) +;for clarity - an x/y pair that represents a dimension instead of a position +(struct dim pos ()) + +(struct obj (name pos)) + +(struct item obj (size)) (struct equipment item (type)) (struct weapon equipment (damage)) (struct armor equipment (resistance)) -(struct entity (name species equipment inventory)) +(struct entity obj (inventory)) +(struct creature entity (species health equipment)) +(struct player creature (capacity)) +(struct room (pos size contents))