Lispbuilder-SDLのインストール

Lispでゲームを作りたいと思い、UbuntuLispbuilder-SDL(Common LispからSDLを使うライブラリ)をインストールしてみました。
今回はその手順を書いておきます。
Common Lisp処理系には、apt-getでインストールしたSBCLを使っています。

準備

Lispbuilderでは、Common LispからC言語のライブラリを使うためにcffiというライブラリを使っているのでそれをインストールします。

sudo apt-get install cl-cffi

Ubuntuならパッケージからインストールできます。

インストール

Lispbuilder本体をインストールします。Common Lispではパッケージのインストールに、ASDFというソフトを使います。
ASDFRubyでいうgemのようなものらしいです。SBCLをインストールした時にASDFも一緒にインストールされているはずです。
ASDFはパッケージを自動でダウンロードする機能を持っていますが、ASDFに登録されているダウンロード先が404になってしまっているようなので、Lispbuilderの公式サイトからファイルをダウンロードしてインストールします。
http://code.google.com/p/lispbuilder/ の「Featured downloads」のところから lispbuilder-sdl-0.9.8.1.tgz をダウンロードしようとしましたがなぜかうまくいかないので、

wget http://lispbuilder.googlecode.com/files/lispbuilder-sdl-0.9.8.1.tgz

として直接ホームディレクトリにダウンロードしました。

次に、

sudo sbcl

で、rootとしてSBCLを起動します。今回はホームディレクトリ以下ではなく/usr/lib/sbcl/siteにインストールするのでroot権限が必要になります。
起動したら、

(require 'asdf-install)

(asdf-install:install "lispbuilder-sdl-0.9.8.1.tgz")

でインストールを始めます。
まず、Install where?と聞かれます。今回はSystem-wideを選択したので、「1」と入力しエンターを押しました。
「compiling」と書かれたメッセージがたくさん出てくるのでしばらく待ちます。
途中、「debugger invoked on a ASDF-INSTALL::KEY-NOT-FOUND」というエラーが何度か出ますが、「0」と入力してエンターを押せばそのまま先に進めます。

インストールが完了し、「* 」と表示されてREPLに戻ったら、

(sb-ext:quit)

SBCLを終了します。

サンプルを動かしてみる

曲線を引くサンプルを動かしてみます。
普通に

sbcl

SBCLを起動し、

(asdf:operate 'asdf:load-op :lispbuilder-sdl-examples)

でLispbuilder-SDLとサンプルを読み込みます。少し時間がかかります。

(sdl-examples:bezier)

でサンプルを起動します。曲線がいくつか出てきたら成功です。

Lispbuilder-SDLを使ったサンプルプログラム

マウスで画像を動かすサンプルを書いてみました。

(defvar *image* nil)
(sdl:with-init ()
  (sdl:window 320 240 :title-caption "Lispbuilder-SDLサンプル")
  (setf (sdl:frame-rate) 30)
  (setf *image* (sdl:load-image "lisp.bmp"))
  (sdl:update-display)
  (sdl:with-events ()
    (:quit-event () t)
    (:video-expose-event () (sdl:update-display))
    (:idle ()
      (sdl:clear-display sdl:*black*)
      (sdl:draw-surface-at-* *image* (sdl:mouse-x) (sdl:mouse-y))
      (sdl:update-display))))

ソースコードのファイル名は、今回はsdltest.lispというファイル名にしています。
lisp.bmpは、適当なbmpファイルを使います。
実行は、sbclを起動して

(require 'lispbuilder-sdl)
(load "sdltest.lisp")

です。
ライブラリを読み込むのには少し時間がかかります。マウスの位置に合わせて画像が動きます。
sdl:with-initやsdl:frame-rateなど、そのままのSDLよりも使いやすいように作られているようです。