diff options
| -rw-r--r-- | src/game.lisp | 17 | ||||
| -rw-r--r-- | src/inventory.lisp | 3 | ||||
| -rw-r--r-- | src/player.lisp | 7 | ||||
| -rw-r--r-- | tests/test.lisp | 18 |
4 files changed, 42 insertions, 3 deletions
diff --git a/src/game.lisp b/src/game.lisp index 51c3a4d..979e4e2 100644 --- a/src/game.lisp +++ b/src/game.lisp @@ -3,7 +3,9 @@ (:export :new-game :buy-item :sell-item - :change-zone)) + :change-zone + :get-profit + :get-profit-in-zone)) (in-package :game) @@ -40,3 +42,16 @@ zones))) (when z (setq cur-zone z))))) + +(defmethod get-profit-in-zone ((g game) name zone) + (with-slots (player) g + (let ((player-item (car (player:find-item player name))) + (zone-item (zone:get-commodity zone name))) + (if (and player-item zone-item) + (- (commodities:price zone-item) + (commodities:price player-item)) + 0)))) + +(defmethod get-profit ((g game) name) + (with-slots (cur-zone) g + (get-profit-in-zone g name cur-zone))) diff --git a/src/inventory.lisp b/src/inventory.lisp index e122364..8aa590f 100644 --- a/src/inventory.lisp +++ b/src/inventory.lisp @@ -3,7 +3,8 @@ (:export :new-inventory :filled :add-item - :remove-item)) + :remove-item + :find-item)) (in-package :inventory) diff --git a/src/player.lisp b/src/player.lisp index 394cee9..32757d0 100644 --- a/src/player.lisp +++ b/src/player.lisp @@ -6,7 +6,8 @@ :get-debt :repay-debt :buy-item - :sell-item)) + :sell-item + :find-item)) (in-package :player) @@ -61,6 +62,10 @@ (+ cash (* (cdr stocked-item) (commodities:price item)))))))) +(defmethod find-item ((p player) name) + (with-slots (stock) p + (inventory:find-item stock name))) + (defmethod repay-debt ((p player) amount) (with-slots (debt cash) p (when (and (<= amount debt) diff --git a/tests/test.lisp b/tests/test.lisp index 6e6fb9b..405b6aa 100644 --- a/tests/test.lisp +++ b/tests/test.lisp @@ -55,3 +55,21 @@ (game:sell-item g "pear" 10) (is (= (player:get-cash (game::player g)) 2050)))) + +;; testing get profit +(test get-profit + (let* ((p (player:init-player "Joze")) + (c (list (commodities:new-commodity "apple" 5) + (commodities:new-commodity "pear" 7))) + (c2 (list (commodities:new-commodity "apple" 6) + (commodities:new-commodity "pear" 2))) + (z (zone:new-zone "Bronx" c)) + (z2 (zone:new-zone "Manhattan" c2)) + (g (game:new-game p z2 (list z z2)))) + (is (= 0 (game:get-profit g "pear"))) + (game:buy-item g "pear" 10) + (is (= 0 (game:get-profit g "pear"))) + (is (= 5 (game:get-profit-in-zone g "pear" z))) + (game:change-zone g "Bronx") + (is (= 5 (game:get-profit g "pear"))) + (is (= 0 (game:get-profit-in-zone g "pear" z2))))) |
