fslasht (3370) の日記

2004 年 03 月 19 日
午後 11:52

[lua] 組み込み用スクリプト言語「lua」を使ってみよう

STATUS: 故障中

 年初に参加してSDLのオフ会(新年会)で、shinichiro.h氏がシューティングゲームで敵の移動などは、スクリプト言語で記述しているという話をされていました。
 敵の動きや弾幕の生成をいちいちアプリ本体内にプログラムで書いていたのでは生産性が悪いということですね。
 白い弾幕くんでは、スクリプトとして lua、弾幕生成には BulletML(ABA氏の弾幕記述言語)を使用しているとのことでした。
 オフ会でみせてもらったシューティングゲームでは、スクリプト言語として lua ではなくて、ioという言語を使っているそうです。
 なんか知らない言語がいっぱい出てきた(アプリ本体はD言語だし)のも印象的でしたが、スクリプト言語によってアルゴリズムを外部に追い出すとことによる生産性に魅力を感じました。なにより組み込みスクリプトというのがなんだかカッコイイじゃないですか。

 その後、オフ会では ruby の話になり、そのなかで関数(メソッド?)へのパラメータとしてプログラムコード(ブロック)自体を渡すことができ、呼び出された関数内でそのコードを実行できるという話を聞きました。
 呼び出しもとで渡すコードを自由に指定できるので、関数がとてつもなく柔軟に使えそうです。すげー。
 でも Cとかでも、luaみたいな組み込みスクリプト言語を利用すれば似たようなことが出来そうです。

● luaを手軽に体験してみよう

 というようなことで、組み込みスクリプトの活用を妄想して萌えてましたが、いまいちとっかかりがつかめず、全然取りかかれませんでした。
 が、いいサイト見つけました。

Luaでスクリプトを埋め込んでみよう (2004/1/29) (RYOKO日記)

 先日USBメモリの件で書いた、RYOKO日記での記事でとても分かりやすいサンプルがありました。
 とりあえずサンプルプログラムをダウンロードして実行してみましょう。
 サンプルプログラムは、luaスクリプト実行環境が埋め込まれていて、テキストボックスに入力したluaのスクリプトを実行できます。(実行結果の変数内容を見ることができる)
 また、luaスクリプトからサンプルプログラム内の一部機能(グラフィック描画機能)にアクセスできるので、luaで絵を描くようなスクリプトを書くと結果が視覚的でわかりやすいです。
 とにかくサンプル動かしてみよう。

 luaの言語仕様は「Lua言語の手引き」を最初に読むといいと思います。
 CのようなPascalのような。テーブル型が柔軟で強力です。あと関数が複数の値を返せます。メモリ管理はGCです。

 サンプルのなかでは、luaから呼び出しもとのプログラムの機能を呼び出しています。
 これはどうやっているのかというと、luaスクリプトを実行する前に、luaインタプリタにユーザーの関数を登録しているのです。
 (以下「RYOKO日記」のコードを引用)
 RYOKO日記の例では

lua_register( L, "pixelput", pixelput );

とあり、これは呼び出し元のプログラム(c言語)中の、「pixelput」という関数をlua側で「pixelput」という関数として使えるよう登録しています。
(pixelputは、指定座標に指定色の点を描く関数)
 lua側からはこのように呼び出します。

for i = 10,89 do
    for j = 10,89 do
        pixelput( i,j, 255 )
    end
end

 こんな感じで、簡単にスクリプトの機能を拡張できます。
 ゲームで使うときは、たとえば敵の出現関数とかをluaから呼び出せるようにしておけば、敵出現パターンをlauスクリプトで制御できますね。

 luaスクリプトは、通常は呼び出すと処理が完了するまで戻ってきませんが、スクリプト中にyield関数を入れておくと、その場所で一旦呼び出しもとに処理を戻しますので、必要なところにyieldいれておけば、逐次処理するようにとても素直なコード書けます。素晴らしい。はぁはぁ

● luaリンク

 とりあえず日本語で書かれているページをかたっぱしから読みました。

公式サイト (英文)

(解説/翻訳)
プログラミング言語Luaの紹介
Lua言語の手引き
プログラミング言語 Lua 5.0 リファレンスマニュアル
FAQ
(RYOKO日記) 解説、lua動作させるサンプル
ioと比較 (shinichiro.h氏)
D言語からlua (やねうらお氏)
VisualCから使う方法 (みはえる氏のwiki)
日本語パッチ

Programming in Lua の pdf (英文)

(2chのスレ)
プログラミング言語 Lua
 ※ 513 の弾幕シューティングが凄い
プログラミング言語 Lua  その2

(CaLua) luaの呼び出しを簡単にするラッパーのプロジェクト
sourceforgeでのCaLuaプロジェクト
日本語での紹介

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie

処理中...