summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEl-BG-1970 <elouangros@hotmail.com>2022-08-01 20:40:59 +0200
committerEl-BG-1970 <elouangros@hotmail.com>2022-08-01 20:40:59 +0200
commit00a46570d36720ab0ac4b6081b62ca96895a0acc (patch)
treebde3856847b1a9e4c4ec6cc5b8ffd1b234840bb3
parent374cada07cb663cae76d0d1896cfad5172752fc3 (diff)
downloadtransacc-00a46570d36720ab0ac4b6081b62ca96895a0acc.tar.gz
added sell-item method to player
-rw-r--r--src/player.lisp17
-rw-r--r--tests/test.lisp28
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)))))