;;; tetris.el --- implementation of Tetris for Emacs
-;; Copyright (C) 1997, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+;; Copyright (C) 1997, 2001, 2002, 2003, 2004, 2005,
+;; 2006, 2007, 2008 Free Software Foundation, Inc.
;; Author: Glynn Clements <glynn@sensei.co.uk>
;; Version: 2.01
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation; either version 2, or (at your option)
+;; the Free Software Foundation; either version 3, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
(setq tetris-pos-y 0)
(if (tetris-test-shape)
(tetris-end-game)
- (tetris-draw-shape))
- (tetris-draw-next-shape)
- (tetris-update-score))
+ (tetris-draw-shape)
+ (tetris-draw-next-shape)
+ (tetris-update-score)))
(defun tetris-draw-next-shape ()
(loop for y from 0 to 3 do
(defun tetris-move-bottom ()
"Drops the shape to the bottom of the playing area"
(interactive)
- (let ((hit nil))
- (tetris-erase-shape)
- (while (not hit)
- (setq tetris-pos-y (1+ tetris-pos-y))
- (setq hit (tetris-test-shape)))
- (setq tetris-pos-y (1- tetris-pos-y))
- (tetris-draw-shape)
- (tetris-shape-done)))
+ (if (not tetris-paused)
+ (let ((hit nil))
+ (tetris-erase-shape)
+ (while (not hit)
+ (setq tetris-pos-y (1+ tetris-pos-y))
+ (setq hit (tetris-test-shape)))
+ (setq tetris-pos-y (1- tetris-pos-y))
+ (tetris-draw-shape)
+ (tetris-shape-done))))
(defun tetris-move-left ()
"Moves the shape one square to the left"
(interactive)
- (unless (= tetris-pos-x 0)
+ (unless (or (= tetris-pos-x 0)
+ tetris-paused)
(tetris-erase-shape)
(setq tetris-pos-x (1- tetris-pos-x))
(if (tetris-test-shape)
(defun tetris-move-right ()
"Moves the shape one square to the right"
(interactive)
- (unless (= (+ tetris-pos-x (tetris-shape-width))
- tetris-width)
+ (unless (or (= (+ tetris-pos-x (tetris-shape-width))
+ tetris-width)
+ tetris-paused)
(tetris-erase-shape)
(setq tetris-pos-x (1+ tetris-pos-x))
(if (tetris-test-shape)
(defun tetris-rotate-prev ()
"Rotates the shape clockwise"
(interactive)
- (tetris-erase-shape)
- (setq tetris-rot (% (+ 1 tetris-rot) 4))
- (if (tetris-test-shape)
- (setq tetris-rot (% (+ 3 tetris-rot) 4)))
- (tetris-draw-shape))
+ (if (not tetris-paused)
+ (progn (tetris-erase-shape)
+ (setq tetris-rot (% (+ 1 tetris-rot) 4))
+ (if (tetris-test-shape)
+ (setq tetris-rot (% (+ 3 tetris-rot) 4)))
+ (tetris-draw-shape))))
(defun tetris-rotate-next ()
"Rotates the shape anticlockwise"
(interactive)
- (tetris-erase-shape)
- (setq tetris-rot (% (+ 3 tetris-rot) 4))
- (if (tetris-test-shape)
- (setq tetris-rot (% (+ 1 tetris-rot) 4)))
- (tetris-draw-shape))
+ (if (not tetris-paused)
+ (progn
+ (tetris-erase-shape)
+ (setq tetris-rot (% (+ 3 tetris-rot) 4))
+ (if (tetris-test-shape)
+ (setq tetris-rot (% (+ 1 tetris-rot) 4)))
+ (tetris-draw-shape))))
(defun tetris-end-game ()
"Terminates the current game"
(tetris-mode)
(tetris-start-game))
+(random t)
+
(provide 'tetris)
-;;; arch-tag: fb780d53-3ff0-49f0-8e19-f7f13cf2d49e
+;; arch-tag: fb780d53-3ff0-49f0-8e19-f7f13cf2d49e
;;; tetris.el ends here