[graphic-forms-cvs] r158 - trunk/src/demos/unblocked

junrue at common-lisp.net junrue at common-lisp.net
Sun Jun 25 01:46:37 UTC 2006


Author: junrue
Date: Sat Jun 24 21:46:36 2006
New Revision: 158

Modified:
   trunk/src/demos/unblocked/unblocked-model.lisp
   trunk/src/demos/unblocked/unblocked-window.lisp
Log:
implemented game restart in UnBlocked

Modified: trunk/src/demos/unblocked/unblocked-model.lisp
==============================================================================
--- trunk/src/demos/unblocked/unblocked-model.lisp	(original)
+++ trunk/src/demos/unblocked/unblocked-model.lisp	Sat Jun 24 21:46:36 2006
@@ -48,6 +48,13 @@
         for level from 1
         finally (return level)))
 
+(defun revise-tiles (active-tiles orig-tiles shape-data)
+  (if shape-data
+    (loop with tmp = (clone-tiles active-tiles)
+          for pnt in shape-data do (set-tile tmp pnt 0)
+          finally (return (collapse-tiles tmp)))
+    orig-tiles))
+
 (cells:defmodel unblocked-game-model ()
   ((level
     :accessor level
@@ -59,29 +66,29 @@
    (shape-data
     :accessor shape-data
     :initform (cells:c-in nil))
-   (tiles
-    :accessor tiles
-    :initform (cells:c? (let ((data (^shape-data)))
-                          (cond
-                            ((null cells:.cache)
-                               (collapse-tiles (init-tiles +horz-tile-count+
-                                                           +vert-tile-count+
-                                                           (1- +max-tile-kinds+))))
-                            (data
-                               (loop with tmp = (clone-tiles cells:.cache)
-                                     for pnt in data do (set-tile tmp pnt 0)
-                                     finally (return (collapse-tiles tmp))))
-                            (t
-                               cells:.cache)))))))
+   (original-tiles
+    :accessor original-tiles
+    :initarg :original-tiles
+    :initform (cells:c-in (collapse-tiles (init-tiles +horz-tile-count+
+                                                      +vert-tile-count+
+                                                      (1- +max-tile-kinds+)))))
+   (active-tiles
+    :accessor active-tiles
+    :initform (cells:c? (revise-tiles cells:.cache (^original-tiles) (^shape-data))))))
 
 (defvar *game* (make-instance 'unblocked-game-model))
 
-(defun reset-game ()
+(defun new-game ()
   (cells:cells-reset)
   (setf *game* (make-instance 'unblocked-game-model)))
 
+(defun restart-game ()
+  (let ((saved-tiles (original-tiles *game*)))
+    (cells:cells-reset)
+    (setf *game* (make-instance 'unblocked-game-model :original-tiles saved-tiles))))
+
 (defun game-tiles ()
-  (tiles *game*))
+  (active-tiles *game*))
 
 (defun game-shape-data (pnts)
   (setf (shape-data *game*) pnts))
@@ -102,5 +109,5 @@
 (cells:defobserver score ((self unblocked-game-model))
   (update-panel (get-scoreboard-panel)))
 
-(cells:defobserver tiles ((self unblocked-game-model))
+(cells:defobserver active-tiles ((self unblocked-game-model))
   (update-panel (get-tiles-panel)))

Modified: trunk/src/demos/unblocked/unblocked-window.lisp
==============================================================================
--- trunk/src/demos/unblocked/unblocked-window.lisp	(original)
+++ trunk/src/demos/unblocked/unblocked-window.lisp	Sat Jun 24 21:46:36 2006
@@ -52,16 +52,15 @@
 
 (defun new-unblocked (disp item time rect)
   (declare (ignore disp item time rect))
-  (reset-game)
-  (let ((tiles-disp (gfw:dispatcher *tiles-panel*))
-        (scoreboard-disp (gfw:dispatcher *scoreboard-panel*)))
-    (update-buffer scoreboard-disp)
-    (update-buffer tiles-disp)
-    (gfw:redraw *scoreboard-panel*)
-    (gfw:redraw *tiles-panel*)))
+  (new-game)
+  (update-panel *scoreboard-panel*)
+  (update-panel *tiles-panel*))
 
 (defun restart-unblocked (disp item time rect)
-  (declare (ignore disp item time rect)))
+  (declare (ignore disp item time rect))
+  (restart-game)
+  (update-panel *scoreboard-panel*)
+  (update-panel *tiles-panel*))
 
 (defun reveal-unblocked (disp item time rect)
   (declare (ignore disp item time rect)))



More information about the Graphic-forms-cvs mailing list