diff options
| -rw-r--r-- | src/player.lisp | 21 | ||||
| -rw-r--r-- | tests/test.lisp | 16 |
2 files changed, 28 insertions, 9 deletions
diff --git a/src/player.lisp b/src/player.lisp index d91c32a..d497fed 100644 --- a/src/player.lisp +++ b/src/player.lisp @@ -2,8 +2,9 @@ (:use :cl) (:export :init-player :name - :cash - :debt + :get-cash + :get-debt + :repay-debt :buy-item)) (in-package :player) @@ -31,6 +32,14 @@ :cash cash :debt debt)) +(defmethod get-debt ((p player)) + (with-slots (debt) player + debt)) + +(defmethod get-cash ((p player)) + (with-slots (cash) player + cash)) + (defmethod buy-item ((p player) item quantity) (with-slots (stock cash) p (let ((cost (* quantity @@ -41,4 +50,10 @@ (setq cash (- cash cost)) t))))) - +(defmethod repay-debt ((p player) amount) + (with-slots (debt cash) p + (when (and (<= amount debt) + (<= amount cash)) + (setq cash (- cash amount) + debt (- debt amount)) + t))) diff --git a/tests/test.lisp b/tests/test.lisp index a98e0db..4961962 100644 --- a/tests/test.lisp +++ b/tests/test.lisp @@ -90,8 +90,6 @@ (commodities:price (car (inventory::find-item i "apple"))))))) -;; creating inventory adding - ;;; Player tests (def-suite* player-suite @@ -111,16 +109,22 @@ (is (= (player:cash p2) 555)) (is (= (player:debt p2) 8976)))) +(test repay-debt + (let ((p (player::init-player "Joze")) + (p2 (player::init-player "Mehmout"))) + (is (player::repay-debt p 1000)) + (is (player::repay-debt p 1000)) + (is (not (player::repay-debt p2 3000))))) + (test buy-item (let ((p (player:init-player "Joze")) (c (commodities:new-commodity "apple" 5)) - (c2 (commodities:new-commodity) "apple" 11) + (c2 (commodities:new-commodity "apple" 11)) (truck (commodities:new-commodity "truck" 100000))) (is (player:buy-item p c 10)) - (is (not (player:buy-item p kar 1))) + (is (not (player:buy-item p truck 1))) (is (= 10 (inventory:filled (player::stock p)))) (is (player:buy-item p c2 10)) (is (= 20 - (inventory:filled (player::stock p)))) - )) + (inventory:filled (player::stock p)))))) |
