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
こんな画面がでれば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で描画をしています。