`(Hello ,world)

ツッコミ、添削大歓迎です。いろいろ教えてください。

2009-11-07

Shibuya.lisp テクニカルトーク#4 LT「弾幕記述言語BulletSMLのご紹介」

f:id:mokehehe:20091107234227p:image:right

Shibuya.lisp テクニカルトーク#4のLightning Talksで、「弾幕記述言語BulletSMLのご紹介」という題でお話させていただきました。スライドの内容を張っておきます。中途半端ですが、ソースはgithubに上げてあります。会の感想はまた後ほど。


弾幕記述言語

BulletSML

の ご紹介

mokehehe

----

自己紹介

----

id:mokehehe

http://cadr.g.hatena.ne.jp/mokehehe/

----

弾幕記述言語?

----

2Dシューティングゲームの

敵の弾の出現パターンや動作

を記述する言語

----

BulletML / ABA games

http://www.asahi-net.or.jp/~cs8k-cyu/bulletml/

----

言語形式

----

XML

----

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:

  指定時間だけ待つ

などなど...

----

解釈と

実行

----

Java

アプレット

----

XMLをパース

木の形式で保持

トラバースで実行

----

C++用ライブラリ

libbulletml / shinh

http://shinh.skr.jp/libbulletml/

----

Lisp

----

XML?

----

S式!

----

BulletSML

BulletMLのS式版

----

CODE:

(bulletml

(action :label top

(repeat

(times 100)

(action

(fire

(direction :type sequence

23)

(bullet))

(wait 1)))))

アトリビュートはPLISTで表現

----

解釈と

実行

----

マクロ

プログラムに

直接変換

----

CODE:

(bulletml

(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:

(begin

...)

----

CODE:

(wait 1)

  ↓

----

CODE:

(yield 1)

・継続を使用

----

動作

デモ

----

Gauche

+

SDL

----

弾幕データは

白い弾幕くん / shinh

のものを使用

http://shinh.skr.jp/sdmkun/

----

利点

----

DSL

普通の式も

使える

----

ただし、

あまり自由にやりすぎると

BulletMLとの

互換性がなくなるという罠

----

難点

----

継続/弾

は無謀

----

http://github.com/mokehehe/bulletsml

----

enjoy

danmaku

life!

トラックバック - http://cadr.g.hatena.ne.jp/mokehehe/20091107