diff options
Diffstat (limited to 'src/game.lisp')
| -rw-r--r-- | src/game.lisp | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/src/game.lisp b/src/game.lisp index 2f7ce88..51c3a4d 100644 --- a/src/game.lisp +++ b/src/game.lisp @@ -2,32 +2,41 @@ (:use :cl) (:export :new-game :buy-item - :sell-item)) + :sell-item + :change-zone)) (in-package :game) (defclass game () - ((player :initarg player + ((player :initarg :player :accessor player) - (zones :initarg zones + (zones :initarg :zones :accessor zones) - (curzone :initarg start-zone - :accessor cur-zone))) + (cur-zone :initarg :start-zone + :accessor cur-zone))) -(defun new-game (player zones start-zone) +(defun new-game (player start-zone zones) (make-instance 'game :player player :zones zones :start-zone start-zone)) (defmethod buy-item ((g game) name amount) - (with-slots (player curzone) g - (let ((item (zone:get-commodity curzone name))) - (when item - (player:buy-item player name amount))))) + (with-slots (player cur-zone) g + (let ((item (zone:get-commodity cur-zone name))) + (when item + (player:buy-item player item amount))))) (defmethod sell-item ((g game) name amount) - (with-slots (player curzone) g - (let ((item (zone:get-commodity curzone name))) - (when item - (player:sell-item player name amount))))) + (with-slots (player cur-zone) g + (let ((item (zone:get-commodity cur-zone name))) + (when item + (player:sell-item player item amount))))) + +(defmethod change-zone ((g game) name) + (with-slots (cur-zone zones) g + (let ((z (find-if (lambda (z) (string= name + (zone:name z))) + zones))) + (when z + (setq cur-zone z))))) |
