]> git.jsancho.org Git - gacela.git/commitdiff
(no commit message)
authorjsancho <devnull@localhost>
Sun, 25 Oct 2009 17:51:46 +0000 (17:51 +0000)
committerjsancho <devnull@localhost>
Sun, 25 Oct 2009 17:51:46 +0000 (17:51 +0000)
gacela.lisp
gacela_tetris.lisp

index 6597f784cd0955e4ce38427859885fd4e1bde20f..5f52cb045cabdc692124eb42e8ee085a051ad0ad 100644 (file)
 (defun make-resource-font (&key filename encoding)
   `(:type font :filename ,filename :enconding ,encoding))
 
+(defmacro get-rtime (key)
+  `(resource-time (gethash ,key resources-table)))
+
+(defmacro get-rplist (key)
+  `(resource-plist (gethash ,key resources-table)))
+
+(defmacro get-rconstructor (key)
+  `(resource-constructor (gethash ,key resources-table)))
+
+(defmacro get-rdestructor (key)
+  `(resource-destructor (gethash ,key resources-table)))
+
 (let ((resources-table (make-hash-table :test 'equal)))
 
   (defun set-resource (key plist constructor destructor &key static)
                         :time (if static t (SDL_GetTicks)))))
 
   (defun get-resource (key)
-    (let ((resource (gethash key resources-table)))
-      (cond ((null resource) nil)
-           (t (cond ((/= (resource-time resource) -1)
-                     (setf (resource-time resource) (SDL_GetTicks))
-                     (setf (gethash key resources-table) resource)))
-              (resource-plist resource)))))
+    (cond ((null (gethash key resources-table)) nil)
+         (t (let ((time (get-rtime key)))
+              (cond ((null time) (funcall (get-rconstructor key)))
+                    ((numberp time) (setf (get-rtime key) (SDL_GetTicks))))
+              (get-rplist key)))))
 
   (defun free-resource (key)
-    (funcall (resource-destructor (gethash key resources-table)))
-    (setf (resource-time (gethash key resources-table)) nil))
+    (funcall (get-rdestructor key))
+    (setf (get-rtime key) nil))
 
   (defun free-all-resources ()
     (maphash (lambda (key res) (free-resource key)) resources-table)))
         (setq running nil))))
 
 (defun quit-game ()
-;  (free-all-resources)
+  (free-all-resources)
 ;  (quit-audio)
-;  (quit-ttf)
   (quit-video-mode)
 ;  (quit-all-procs)
 ;  (clear-events)
index 82957105659d052ab0932acf1a8701efba6f9d53..6a64451d886c5696419c00f20458e5e5baa82e51 100644 (file)
 
   (defun inc-points (l)
     (incf points
-         (labels ((more-lines-better 
+         (labels ((more-lines-better (n)
+                                     (cond ((= n 0) n)
+                                           (t (+ n (more-lines-better (- n 1)))))))
+                 (* (more-lines-better l) 10)))
     (incf lines l)))
 
 (let ((tetramine (random-tetramine)) (x 6) (y 0)
       (timer (make-timer))
       (grid (make-list 20 :initial-element (make-list 14)))
       (background (draw-image-function "fondo_tetris.png"))
-      (font (load-font "lazy.ttf" :size 20)))
+      (font (load-font "lazy.ttf" :size 20))
+      (game-over))
+  (defun game ()
+    (if game-over (game-over) (tetramine)))
+
+  (defun game-over ()
+    (translate -100 0)
+    (render-text "Game Over" font :size 50))
+
   (defun tetramine ()
     (cond ((eq (timer-state timer) 'stopped) (start-timer timer)))
 
                      (> (+ y 1 (length tetramine)) 20))
                  (setq grid (remove-rows-completed (join-grids tetramine grid x y)))
                  (setq tetramine next x 6 y 0)
+                 (cond ((collide-grids tetramine grid x y) (setq game-over t)))
                  (setq next (random-tetramine)))
                 (t (incf y) (start-timer timer)))))
     (funcall background)
   (start-timer update)
   (start-timer fps)
   (run-game "Gacela Tetris"
-           (tetramine)
+           (game)
            (incf frame)
-           (cond ((> (get-time update) 1000) (print (/ frame (/ (get-time fps) 1000.0))) (start-timer update)))))
+           (cond ((> (get-time update) 1000) (print (/ frame (/ (get-time fps) 1000.0))) (start-timer update))))
+  (quit-game))