diff options
| author | El-BG-1970 <elouangros@hotmail.com> | 2022-08-01 20:40:59 +0200 |
|---|---|---|
| committer | El-BG-1970 <elouangros@hotmail.com> | 2022-08-01 20:40:59 +0200 |
| commit | 00a46570d36720ab0ac4b6081b62ca96895a0acc (patch) | |
| tree | bde3856847b1a9e4c4ec6cc5b8ffd1b234840bb3 | |
| parent | 374cada07cb663cae76d0d1896cfad5172752fc3 (diff) | |
| download | transacc-00a46570d36720ab0ac4b6081b62ca96895a0acc.tar.gz | |
added sell-item method to player
| -rw-r--r-- | src/player.lisp | 17 | ||||
| -rw-r--r-- | tests/test.lisp | 28 |
2 files changed, 36 insertions, 9 deletions
diff --git a/src/player.lisp b/src/player.lisp index d497fed..394cee9 100644 --- a/src/player.lisp +++ b/src/player.lisp @@ -5,7 +5,8 @@ :get-cash :get-debt :repay-debt - :buy-item)) + :buy-item + :sell-item)) (in-package :player) @@ -33,11 +34,11 @@ :debt debt)) (defmethod get-debt ((p player)) - (with-slots (debt) player + (with-slots (debt) p debt)) (defmethod get-cash ((p player)) - (with-slots (cash) player + (with-slots (cash) p cash)) (defmethod buy-item ((p player) item quantity) @@ -50,6 +51,16 @@ (setq cash (- cash cost)) t))))) +(defmethod sell-item ((p player) item amount) + (with-slots (stock cash) p + (let ((stocked-item + (inventory:remove-item stock + (commodities:name item) amount))) + (when stocked-item + (setq cash + (+ cash (* (cdr stocked-item) + (commodities:price item)))))))) + (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 4961962..85f5f5d 100644 --- a/tests/test.lisp +++ b/tests/test.lisp @@ -100,14 +100,14 @@ (test creating-player (let ((p (player:init-player "Joze")) (p2 (player:init-player "Mehmout" 555 8976))) - (is (equal (type-of p) 'player::player)) + (is (eql (type-of p) 'player::player)) (is (equal (player:name p) "Joze")) - (is (= (player:cash p) 2000)) - (is (= (player:debt p) 5000)) - (is (equal (type-of p2) 'player::player)) + (is (= (player:get-cash p) 2000)) + (is (= (player:get-debt p) 5000)) + (is (eql (type-of p2) 'player::player)) (is (equal (player:name p2) "Mehmout")) - (is (= (player:cash p2) 555)) - (is (= (player:debt p2) 8976)))) + (is (= (player:get-cash p2) 555)) + (is (= (player:get-debt p2) 8976)))) (test repay-debt (let ((p (player::init-player "Joze")) @@ -122,9 +122,25 @@ (c2 (commodities:new-commodity "apple" 11)) (truck (commodities:new-commodity "truck" 100000))) (is (player:buy-item p c 10)) + (is (= 1950 (player:get-cash p))) (is (not (player:buy-item p truck 1))) (is (= 10 (inventory:filled (player::stock p)))) (is (player:buy-item p c2 10)) + (is (= 1840 (player:get-cash p))) (is (= 20 (inventory:filled (player::stock p)))))) + +(test sell-item + (let ((p (player:init-player "Joze")) + (c (commodities:new-commodity "apple" 5)) + (c2 (commodities:new-commodity "apple" 11)) + (c3 (commodities:new-commodity "apple" 8)) + (k (commodities:new-commodity "car" 10000))) + (is (player:buy-item p c 10)) + (is (= 1950 (player:get-cash p))) + (is (player:buy-item p c2 10)) + (is (= 1840 (player:get-cash p))) + (is (player:sell-item p c3 10)) + (is (= 1920 (player:get-cash p))) + (is (not (player:sell-item p k 1))))) |
