2009-11-07
Shibuya.lisp テクニカルトーク#4 LT「弾幕記述言語BulletSMLのご紹介」
Shibuya.lisp テクニカルトーク#4のLightning Talksで、「弾幕記述言語BulletSMLのご紹介」という題でお話させていただきました。スライドの内容を張っておきます。中途半端ですが、ソースはgithubに上げてあります。会の感想はまた後ほど。
弾幕記述言語
BulletSML
の ご紹介
mokehehe
----
自己紹介
----
http://cadr.g.hatena.ne.jp/mokehehe/
----
弾幕記述言語?
----
2Dシューティングゲームの
敵の弾の出現パターンや動作
を記述する言語
----
http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/
----
言語形式
----
----
CODE:
"http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/bulletml.dtd">
<bulletml xmlns="http://www.asahi-net.or.jp/~cs8k-cyu/bulletml">
<action label="top">
<repeat>
<times>100</times>
<action>
<fire>
<direction type="sequence">23</direction>
<bullet/>
</fire>
<wait>1</wait>
</action>
</repeat>
</action>
</bulletml>
----
CODE:
action:
動作の定義
repeat:
指定した回数だけactionを繰り返す
fire:
弾を発射
wait:
指定時間だけ待つ
などなど...
----
解釈と
実行
----
アプレット
----
XMLをパース
木の形式で保持
トラバースで実行
----
C++用ライブラリ
libbulletml / shinh
http://shinh.skr.jp/libbulletml/
----
Lispで
----
XML?
----
S式!
----
BulletSML
=
BulletMLのS式版
----
CODE:
(action :label top
(repeat
(times 100)
(action
(fire
(direction :type sequence
23)
(bullet))
(wait 1)))))
アトリビュートはPLISTで表現
----
解釈と
実行
----
マクロで
プログラムに
直接変換
----
CODE:
(action :label top
...))
↓
----
CODE:
(letrec ((%action-top
(lambda (self . $args)
...)))
%action-top)
・弾幕挙動の関数を返す
----
CODE:
(repeat
(times 3)
(action ...))
↓
----
CODE:
(dotimes (i 3)
(action ...))
----
CODE:
(action
...)
↓
----
CODE:
...)
----
CODE:
(wait 1)
↓
----
CODE:
(yield 1)
・継続を使用
----
動作
デモ
----
+
----
弾幕データは
白い弾幕くん / shinh
のものを使用
----
利点
----
普通の式も
使える
----
ただし、
あまり自由にやりすぎると
BulletMLとの
互換性がなくなるという罠
----
難点
----
継続/弾
は無謀
----
http://github.com/mokehehe/bulletsml
----
enjoy
danmaku
life!