Emacs ゲームの場所

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


輪を好きなだけ増やせます。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA