Common Lispでゲーム作成

version date memo
0.1 2013/08/13 first

Information

SBCL 1.0.55.0.debian

はじめに

以下のPDFを参考にしたが、Linux上での環境構築方法が載っていなかったので、自分でやってみた。
下記リンクのCommon Lispの項の冊子(PDF)を参照。
***でSTGを作りますが何か?:いで庵

DL

# UbunutuのパッケージからDL
sudo apt-get install sbcl
sudo apt-get install cl-cffi
sudo apt-get install cl-alexandria
sudo apt-get install cl-babel
sudo apt-get install cl-trivial-features

Lispbuilder-SDL関連のDL
下記リンクからDL
GitHub - lispbuilder/lispbuilder: Lispbuilder provides a range of libraries for developing useful portable Common Lisp applications
win32系は要らない。
よって、以下の5つをDL

  1. lispbuilder-sdl-ttf-0.3.0.tgz
  2. lispbuilder-sdl-mixer-0.4.tgz
  3. lispbuilder-sdl-image-0.5.0.tgz
  4. lispbuilder-sdl-gfx-0.7.0.tgz
  5. lispbuilder-sdl-0.9.8.1.tgz

解凍後、/usr/lib/sbcl/site-systems/直下に移動

(require :asdf)
(require :babel)
(require :alexandria)
(require :trivial-features)
(require :cffi)
(dolist (dir (directory "/usr/lib/sbcl/site-sysmtems/"))
  (pushnew dir asdf:*central-registry* :test #'equal))

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

(〒) < やたらWarningが出るのは、どうにかならんのかなぁ?

これで、

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

気がついたこと

p30ぐらい

ここのソースにフォントの初期化コードが無い。
この初期化コードが無いと、「6.4 成仏させる」項目の箇所で痛い目を見る。
下記が起きる現象で、適用可能な「draw-string-solid-*」関数が無いとか言われる。

;;;;;; p34〜
;; ----------------------------------------------------------------------
debugger invoked on a SIMPLE-ERROR in thread
#<THREAD "initial thread" RUNNING {B3ECA31}>:
  There is no applicable method for the generic function
    #<STANDARD-GENERIC-FUNCTION LISPBUILDER-SDL::_DRAW-STRING-SOLID-*_ (1)>
  when called with arguments
    ("10" 500 400 :LEFT #<LISPBUILDER-SDL::DISPLAY {CDF2CB9}> NIL
    #<LISPBUILDER-SDL:COLOR {940A761}>).

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
  0: [RETRY] Retry calling the generic function.
  1: [ABORT] Exit debugger, returning to top level.

((SB-PCL::FAST-METHOD NO-APPLICABLE-METHOD (T))
 #<unused argument>
 #<unused argument>
 #<STANDARD-GENERIC-FUNCTION LISPBUILDER-SDL::_DRAW-STRING-SOLID-*_ (1)>
 "10"
 500
 400
 :LEFT
 #<LISPBUILDER-SDL::DISPLAY {CDF2CB9}>
 NIL
 #<LISPBUILDER-SDL:COLOR {940A761}>)
;; ----------------------------------------------------------------------		  

解決方法

(defun main ()
  (sdl:with-init ()
    (sdl:window 640 480 :title-caption "てすと")
    ;;; この一行を追加(下)
    (sdl:initialise-default-font sdl:*font-10x20*) ; フォント初期化
    (let* ((current-・・・