# HG changeset patch # User Steve Losh # Date 1342380254 14400 # Node ID ef03fb8bb7e48c5c5c90ba5d852d292869655cb0 # Parent d18013e50134efae55405d75274fadda36370b83 Add real hp, attack and defense. diff -r d18013e50134 -r ef03fb8bb7e4 src/caves/core.clj --- a/src/caves/core.clj Sun Jul 15 00:50:23 2012 -0400 +++ b/src/caves/core.clj Sun Jul 15 15:24:14 2012 -0400 @@ -48,3 +48,8 @@ (args ":text") :text :else :auto)] (main screen-type true))) + +(comment + (main :swing false) + (main :swing true) + ) diff -r d18013e50134 -r ef03fb8bb7e4 src/caves/entities/aspects/attacker.clj --- a/src/caves/entities/aspects/attacker.clj Sun Jul 15 00:50:23 2012 -0400 +++ b/src/caves/entities/aspects/attacker.clj Sun Jul 15 15:24:14 2012 -0400 @@ -1,11 +1,15 @@ (ns caves.entities.aspects.attacker - (:use [caves.entities.aspects.destructible :only [Destructible take-damage]] + (:use [caves.entities.aspects.destructible :only [Destructible take-damage + defense-value]] [caves.entities.core :only [defaspect]])) (defaspect Attacker (attack [this world target] {:pre [(satisfies? Destructible target)]} - (let [damage 1] - (take-damage target world damage)))) + (let [damage (inc (rand-int (max 0 (- (attack-value this world) + (defense-value target world)))))] + (take-damage target world damage))) + (attack-value [this world] + (get this :attack 1))) diff -r d18013e50134 -r ef03fb8bb7e4 src/caves/entities/aspects/destructible.clj --- a/src/caves/entities/aspects/destructible.clj Sun Jul 15 00:50:23 2012 -0400 +++ b/src/caves/entities/aspects/destructible.clj Sun Jul 15 15:24:14 2012 -0400 @@ -7,4 +7,6 @@ (let [damaged-this (update-in this [:hp] - damage)] (if-not (pos? (:hp damaged-this)) (update-in world [:entities] dissoc id) - (assoc-in world [:entities id] damaged-this))))) + (assoc-in world [:entities id] damaged-this)))) + (defense-value [this world] + (get this :defense 0))) diff -r d18013e50134 -r ef03fb8bb7e4 src/caves/entities/bunny.clj --- a/src/caves/entities/bunny.clj Sun Jul 15 00:50:23 2012 -0400 +++ b/src/caves/entities/bunny.clj Sun Jul 15 15:24:14 2012 -0400 @@ -5,10 +5,15 @@ [caves.world :only [find-empty-neighbor]])) -(defrecord Bunny [id glyph color location hp]) +(defrecord Bunny [id glyph color location hp max-hp]) (defn make-bunny [location] - (->Bunny (get-id) "v" :yellow location 1)) + (map->Bunny {:id (get-id) + :glyph "v" + :color :yellow + :location location + :hp 4 + :max-hp 4})) (extend-type Bunny Entity diff -r d18013e50134 -r ef03fb8bb7e4 src/caves/entities/lichen.clj --- a/src/caves/entities/lichen.clj Sun Jul 15 00:50:23 2012 -0400 +++ b/src/caves/entities/lichen.clj Sun Jul 15 15:24:14 2012 -0400 @@ -4,10 +4,15 @@ [caves.world :only [find-empty-neighbor]])) -(defrecord Lichen [id glyph color location hp]) +(defrecord Lichen [id glyph color location hp max-hp]) (defn make-lichen [location] - (->Lichen (get-id) "F" :green location 1)) + (map->Lichen {:id (get-id) + :glyph "F" + :color :green + :location location + :hp 6 + :max-hp 6})) (defn should-grow [] (< (rand) (/ 1 500))) diff -r d18013e50134 -r ef03fb8bb7e4 src/caves/entities/player.clj --- a/src/caves/entities/player.clj Sun Jul 15 00:50:23 2012 -0400 +++ b/src/caves/entities/player.clj Sun Jul 15 15:24:14 2012 -0400 @@ -3,11 +3,12 @@ [caves.entities.aspects.mobile :only [Mobile move can-move?]] [caves.entities.aspects.digger :only [Digger dig can-dig?]] [caves.entities.aspects.attacker :only [Attacker attack]] + [caves.entities.aspects.destructible :only [Destructible]] [caves.coords :only [destination-coords]] [caves.world :only [get-entity-at]])) -(defrecord Player [id glyph color location]) +(defrecord Player [id glyph color location hp max-hp attack]) (extend-type Player Entity (tick [this world] @@ -16,9 +17,16 @@ (add-aspect Player Mobile) (add-aspect Player Digger) (add-aspect Player Attacker) +(add-aspect Player Destructible) (defn make-player [location] - (->Player :player "@" :white location)) + (map->Player {:id :player + :glyph "@" + :color :white + :location location + :hp 40 + :max-hp 40 + :attack 10})) (defn move-player [world dir] (let [player (get-in world [:entities :player]) diff -r d18013e50134 -r ef03fb8bb7e4 src/caves/entities/silverfish.clj --- a/src/caves/entities/silverfish.clj Sun Jul 15 00:50:23 2012 -0400 +++ b/src/caves/entities/silverfish.clj Sun Jul 15 15:24:14 2012 -0400 @@ -6,10 +6,15 @@ [caves.coords :only [neighbors]])) -(defrecord Silverfish [id glyph color location hp]) +(defrecord Silverfish [id glyph color location hp max-hp]) (defn make-silverfish [location] - (->Silverfish (get-id) "~" :white location 1)) + (map->Silverfish {:id (get-id) + :glyph "~" + :color :white + :location location + :hp 15 + :max-hp 15})) (extend-type Silverfish Entity diff -r d18013e50134 -r ef03fb8bb7e4 src/caves/ui/drawing.clj --- a/src/caves/ui/drawing.clj Sun Jul 15 00:50:23 2012 -0400 +++ b/src/caves/ui/drawing.clj Sun Jul 15 15:24:14 2012 -0400 @@ -79,11 +79,13 @@ (map - coords origin)) -(defn draw-hud [screen game [ox oy]] +(defn draw-hud [screen game] (let [hud-row (dec (second (s/get-size screen))) - [x y] (get-in game [:world :entities :player :location]) - info (str "player loc: [" x "-" y "]") - info (str info " viewport origin: [" ox "-" oy "]")] + player (get-in game [:world :entities :player]) + {:keys [location hp max-hp]} player + [x y] location + info (str "hp [" hp "/" max-hp "]") + info (str info " loc: [" x "-" y "]")] (s/put-string screen 0 hud-row info))) @@ -116,7 +118,7 @@ (draw-world screen vrows vcols origin tiles) (doseq [entity (vals entities)] (draw-entity screen origin entity)) - (draw-hud screen game origin) + (draw-hud screen game) (highlight-player screen origin player))) diff -r d18013e50134 -r ef03fb8bb7e4 src/caves/ui/input.clj --- a/src/caves/ui/input.clj Sun Jul 15 00:50:23 2012 -0400 +++ b/src/caves/ui/input.clj Sun Jul 15 15:24:14 2012 -0400 @@ -23,7 +23,7 @@ (-> world (add-creatures make-lichen 30) (add-creatures make-bunny 20) - (add-creatures make-silverfish 15)))) + (add-creatures make-silverfish 4)))) (defn reset-game [game] (let [fresh-world (random-world)]