(defpackage game (:use :cl) (:export :new-game :buy-item :sell-item)) (in-package :game) (defclass game () ((player :initarg player :accessor player) (zones :initarg zones :accessor zones) (curzone :initarg start-zone :accessor cur-zone))) (defun new-game (player zones start-zone) (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))))) (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)))))