fslasht (3370) の日記

2004 年 03 月 22 日
午前 10:39

[lua] 「赤く塗れ」にlua言語を組み込んでみました

STATUS: 故障中

 luaだいぶわかってきましたよ。
 以前作ったゲーム赤く塗れにlua言語を組み込んでみました。

 lua test with Akakunure (Windows用)

 プログラムを起動すると、同じディレクトリにある luaスクリプトファイル「test.lua」を読み込んで実行します。
 赤い線を引いたりしているのは、このスクリプトからゲーム本体のルーチンを呼び出して実現しています。
 また、コルーチンを使って協調型マルチスレッドみたいな感じで動いてます。
 スクリプト中の yieldで時々ゲーム本体側に処理を戻しています。そのため、画面を徐々に暗くする処理やマウスで線を書くという本体側の機能も平行して実行されています。
 yield命令さえいれとけばいいので、ほとんど逐次処理でかけるので無茶苦茶楽です。

 test.luaを書き換えると処理の内容を変更できますので試してみてください。
 LineByLua関数が独自に追加したもので、次のような仕様です。

書式:LineByLua( x1 , y1 , x2 , y2 )
説明:座標(x1,y1)から(x2,y2)まで赤い線をひきます。
   (画面のサイズは、400x400dotです)

 また、coroutine.yield() で処理を戻すときに、文字列をパラメータで渡すと、その内容が画面に表示されます。

サンプル

function co_draw()
        for i=0,400,5 do
                LineByLua(i,0,400-i,400);
                coroutine.yield("loop:" .. i )
        end
end

 うーん簡単簡単。
 corewarsとかカルネージハートみたいなプログラム同士を戦わせるゲームとかも結構簡単に作れるんじゃないかな。(FM-7にタンクバトルなやつがあったけど、なんてゲームがったかな)
 yieldで返ってくるのを期待していると不正しまくりなので、コードの実行ステップごとにhookいれるようにすればよさそう。
 昔スタック型言語でっちあげて作ろうとしたなあ>プログラムバトルなゲーム
 lua使ってなんか作ってみようか。

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

アレゲはアレゲ以上のなにものでもなさげ -- アレゲ研究家

処理中...