Common LispでSTGを作った

こちらの記事に触発されて、以前からいろいろ調べてたCommon LispとOpenGLである程度まとまったものを公開しようと思って作ってみました。
こちらはSDLではなくOpenGLを使っています。

GitHubで公開しています。
若干(かなり?)コードは汚いですが、サンプルになるところもあるかなと思います。
MITライセンスですので煮るなり焼くなりお好きにお使いください。

動かし方

GitHubのREADMEにも一応書いてありますが。

cd ~/quicklisp/local-projects/ministg
(ql:quicklisp :ministg) 
(ministg:main)

[追記]
guicho271828さんがRoswellスクリプトを書いてくれました。

ros install singy15/ministg
ros exec ministg
# ~/.roswell/binにパスを通してある場合は以下のようにしても実行できる
ministg

screenshot.png

こんな画面がでればOKです。
初回起動時はちょっと時間かかります。
操作はWSADで自機移動、Jで発射です。
なるべく簡単になるように作ってるので自機と敵機との当たり判定とかメニュー画面とかサウンドとかそういうのは一切なしです。(ミサイルは出来心です)

技術的なこと

開発環境・使用ライブラリ

  • Steel Bank Common Lisp 1.3.10
  • cl-opengl
  • cl-glut
  • cl-glu
  • cl-singleton-mixin

ASDF/QuickLisp

ASDファイルを作って、ASDFでファイルの読み込み順だったり他systemへの依存性の解決をしています。
QuickLispでライブラリ管理をしています。

SBCL + ASDF3 +QuickLispでプロジェクトの作り方

CLOS

CLOSを使い、OOP(?)なスタイルで書いています(つもりです)。
accessorは名前衝突が起きやすそうなので名前にキーワードを使っています

CLOSでaccessorとmethodの名前衝突を回避する
Common LispでSingletonなクラスを作る(CLOS)

グラフィックス

cl-openglを使いOpenGLで描画をしています。

cl-openglでグラフィックス
cl-openglで入力を拾う