Emacs再入門7日目。前回GUIのメニューから「Tools」-「Games」に「Tetris」(テトリス)を見つけましたが、テトリスの他にもいろんなゲームがありますね。
前回、M-x tetrisと入力して実行したら、テトリスが起動されましたが、他のゲームはどのように起動すればよいのでしょうか。例えば、「Towers of Hanoi」は、1単語じゃないので、このままゲームの名前を打つとなると、入力が大変そうです。
もう一度テトリスの説明を見てみます。f1 aで、tetrisのaproposを表示したら、太字になっているtetrisをクリック。
冒頭にtetris.elというファイル名が書いてあります。それに(tetris)という、Lispっぽい書式も。
このtetris.elというファイル、emacsの環境のどこかにあるに違いありません。/usrの下を全検索してみます。
takk@deb9:~$ find /usr -name tetris.el takk@deb9:~$
tetris.elというファイル名では出てきませんでした。圧縮とかされてるのでしょうか。すべての拡張子を含めて検索してみましょう。
takk@deb9:~$ find /usr -name tetris.* /usr/share/emacs/24.5/lisp/play/tetris.elc /usr/share/emacs/24.5/lisp/play/tetris.el.gz takk@deb9:~$
見つかりました。
elcという謎の拡張子のファイルと、gzで圧縮されたelファイルが見つかりました。
el.gzの冒頭をzcatで確認してみます。
takk@deb9:~$ zcat /usr/share/emacs/24.5/lisp/play/tetris.el.gz | head ;;; tetris.el --- implementation of Tetris for Emacs ;; Copyright (C) 1997, 2001-2015 Free Software Foundation, Inc. ;; Author: Glynn Clements <glynn@sensei.co.uk> ;; Version: 2.01 ;; Created: 1997-08-13 ;; Keywords: games ;; This file is part of GNU Emacs. takk@deb9:~$
これで間違いなさそうです。elcという拡張子のことは、私の現時点のスキルではEmacs内で調べる方法が思いつかなかったので、仕方なくネットで検索しました(常日頃からネットで検索したら負けだと思ってます)。elファイルをバイトコンパイルしたものらしいです。今は気にしないでおきます。
さて、gzファイルの方ですが、同ディレクトリに、たくさんありました。
takk@deb9:~$ ls /usr/share/emacs/24.5/lisp/play | grep gz 5x5.el.gz animate.el.gz blackbox.el.gz bubbles.el.gz cookie1.el.gz decipher.el.gz dissociate.el.gz doctor.el.gz dunnet.el.gz fortune.el.gz gamegrid.el.gz gametree.el.gz gomoku.el.gz handwrite.el.gz hanoi.el.gz landmark.el.gz life.el.gz morse.el.gz mpuz.el.gz pong.el.gz snake.el.gz solitaire.el.gz spook.el.gz studly.el.gz tetris.el.gz zone.el.gz takk@deb9:~$
GUIのメニューから起動できるゲームの数よりも多いですが、メニューにないゲームも格納されているってことでしょう。
「Towers of Hanoi」は、hanoi.el.gzじゃないかと思います。zcatで確認します。
takk@deb9:/usr/share/emacs/24.5/lisp/play$ zcat hanoi.el.gz | head ;;; hanoi.el --- towers of hanoi in Emacs ;; Author: Damon Anton Permezel ;; Maintainer: emacs-devel@gnu.org ;; Keywords: games ; Author (a) 1985, Damon Anton Permezel ; This is in the public domain ; since he distributed it in 1985 without copyright notice. ;; This file is part of GNU Emacs. takk@deb9:/usr/share/emacs/24.5/lisp/play$
ついでに、全ファイルのタイトルを確認してみます。
takk@deb9:/usr/share/emacs/24.5/lisp/play$ for i in `ls *.gz`;do zcat $i | head -1 ;done ;;; 5x5.el --- simple little puzzle game -*- coding: utf-8 -*- ;;; animate.el --- make text dance ;;; blackbox.el --- blackbox game in Emacs Lisp ;;; bubbles.el --- Puzzle game for Emacs -*- coding: utf-8 -*- ;;; cookie1.el --- retrieve random phrases from fortune cookie files ;;; decipher.el --- cryptanalyze monoalphabetic substitution ciphers ;;; dissociate.el --- scramble text amusingly for Emacs ;;; doctor.el --- psychological help for frustrated users ;;; dunnet.el --- text adventure for Emacs ;;; fortune.el --- use fortune to create signatures ;;; gamegrid.el --- library for implementing grid-based games on Emacs ;;; gametree.el --- manage game analysis trees in Emacs ;;; gomoku.el --- Gomoku game between you and Emacs -*- lexical-binding:t -*- ;;; handwrite.el --- turns your emacs buffer into a handwritten document -*- coding: utf-8; -*- ;;; hanoi.el --- towers of hanoi in Emacs ;;; landmark.el --- neural-network robot that learns landmarks ;;; life.el --- John Horton Conway's `Life' game for GNU Emacs ;;; morse.el --- convert text to morse code and back -*- coding: utf-8 -*- ;;; mpuz.el --- multiplication puzzle for GNU Emacs ;;; pong.el --- classical implementation of pong ;;; snake.el --- implementation of Snake for Emacs ;;; solitaire.el --- game of solitaire in Emacs Lisp ;;; spook.el --- spook phrase utility for overloading the NSA line eater ;;; studly.el --- StudlyCaps (tm)(r)(c)(xxx) ;;; tetris.el --- implementation of Tetris for Emacs ;;; zone.el --- idle display hacks takk@deb9:/usr/share/emacs/24.5/lisp/play$
では、hanoiを起動してみましょう。Emacsを起動したら、ALT + x、hanoiと入力してEnter。
M-x hanoi
動きました。
見てるだけのゲームのようです。
このゲーム引数にリングの数を指定できるようですので、数字を入力してから、ALT + x、hanoiと入力してEnterすると、
10 M-x hanoi
輪を好きなだけ増やせます。
コメント