summaryrefslogtreecommitdiffstats
path: root/src/main.lisp
diff options
context:
space:
mode:
authorEl-BG-1970 <elouangros@hotmail.com>2022-08-25 15:05:08 +0200
committerEl-BG-1970 <elouangros@hotmail.com>2022-08-25 15:05:08 +0200
commitd6ff28e518c4dec62d8520f74a8f4d1a527a47bc (patch)
tree814336833572be49868184432f533610707930d9 /src/main.lisp
parent3a9bb4886317e82aee1a45e4b643b5973c5215f9 (diff)
downloadtransacc-d6ff28e518c4dec62d8520f74a8f4d1a527a47bc.tar.gz
begginings of a gui
Diffstat (limited to 'src/main.lisp')
-rw-r--r--src/main.lisp55
1 files changed, 46 insertions, 9 deletions
diff --git a/src/main.lisp b/src/main.lisp
index 9c0ba32..1fd05a9 100644
--- a/src/main.lisp
+++ b/src/main.lisp
@@ -5,13 +5,50 @@
(in-package :transacc)
+(clim:define-application-frame superapp ()
+ ()
+ ;; :panes section describes different parts of the
+ ;; application-frame. This application has only one pane.
+ (:panes
+ (int :interactor :height 400 :width 600))
+
+ ;; :layouts section describes how the panes are layed out.
+ ;; This application has one layout named "default" which has a single pane.
+ (:layouts
+ (default int)))
+
+(defun format-panel (panel)
+ (loop for it in panel do
+ (format t "~a :~T ~$$ [~@$$] owned: ~a~%"
+ (getf it :name)
+ (getf it :price)
+ (getf it :profit)
+ (getf it :qty))))
+
(defun main ()
- (let ((player (player:init-player "Joze" 2000))
- (zones
- (list
- (zone:new-zone "Bronx"
- (list (commodities:new-commodity "speed" 500)
- (commodities:new-commodity "grass" 40))))))
- (assert (equal (zone:name (car zones)) "Bronx"))
- (assert (equal (player:name player) "Joze"))
- (format t "~a in the game" (player:name player))))
+ (let* ((p (player:init-player "Joze"))
+ (c (list (commodities:new-commodity "apple" 5)
+ (commodities:new-commodity "pear" 7)))
+ (c2 (list (commodities:new-commodity "apple" 6)
+ (commodities:new-commodity "pear" 2)))
+ (z (zone:new-zone "Bronx" c))
+ (z2 (zone:new-zone "Manhattan" c2))
+ (g (game:new-game p z2 (list z z2))))
+
+ ;; Panel command
+ (define-superapp-command (com-panel :name t) ()
+ (format-panel (game:commodities-panel g)))
+ ;; Buy command
+ (define-superapp-command (com-buy :name t)
+ ((item 'string) (quantity 'integer))
+ (game:buy-item g item quantity))
+ ;; Sell command
+ (define-superapp-command (com-sell :name t)
+ ((item 'string) (quantity 'integer))
+ (game:sell-item g item quantity))
+ ;; Goto command
+ (define-superapp-command (com-goto :name t)
+ ((dest 'string))
+ (game:change-zone g dest))
+
+ (clim:run-frame-top-level (clim:make-application-frame 'superapp))))