[elisp] elisp付属tetrisを改造してみるテスト
emacsについているtetrisには一つ問題点があります。それはdownコマンドなのですが、この関数はファミコン初期のテトリスと同じで、ブロックを一気に下まで落とすという仕様になっています。
まぁ実際のところ、このコマンドは結構便利です。でも標準コマンドが無いのも寂しいので標準テトリスのdownコマンドも搭載してみます。
実際には以下のようにしてやります
以下は標準のdownコマンド
(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)))
whileで回して、最後まで落とす仕様になってるのが分かります。
次に、テトリス標準コマンド
(defun tetris-move-one-bottom () "Drops the shape only one block " (interactive) (let ((hit nil)) (tetris-erase-shape) (setq tetris-pos-y (1+ tetris-pos-y)) (if (tetris-test-shape) (setq tetris-pos-y (1- tetris-pos-y))) (tetris-draw-shape)))
この関数は、仕様として落とすのは一段だけになっています。これがテトリス標準のdown方法です。
次に、テトリスのソースの中にこの関数を入れて、以下のようにキーバインドに設定すれば標準bottomコマンドを使用することが可能になります。
以下は設定例
(define-key tetris-mode-map [down] 'tetris-move-one-bottom)
次にような関数も付け加えると面白いかもしれません。この関数はテトリスブロックをストップさせ、次のブロックを出現させます
(defun tetris-stop-block () "stop tetris block" (interactive) (tetris-shape-done))
時よ止まれ的な関数。
うーむ, なんかしょぼいなぁw