Luaプログラミング入門

Luaの組み込み例 Slideshow

例えば今あなたがコンピュータゲームを複数人で開発しているとしましょう. 開発メンバーはコアとなるプログラムを作成するあなたと,敵AIプログラム担当のBさんです.

ジャンルはシューティングゲーム(STG)です.あなたがC言語でシューティングのコアとなる部分を作成しています.

ここでゲームの敵AI(敵は1種類ではなく何十種類もいる)を作成する必要がでてきました.そこで敵AI担当のBさんにAIの部分を作ってもらう事にしました.

まずはLuaを使わずC言語だけで開発してみましょう. BさんはまずC言語の使い方を知らないのでC言語の勉強からはじめました.なんだかC言語は複雑で早くも挫折しそうです.なんとかC言語の基礎をマスターしてAIを作成しようとしました.ですが,よく分かりません.Bさんは,まず「あなた」が作成したC言語プログラムを理解しないことには開発しようがありません.

また,仮にAIを完成させたとして敵の動作を見たいと思いました.そのためには,まずC言語でかかれたプロジェクト全体をコンパイルしなおさないことにはプログラムは動作しません.いちいち敵の動きを少し変えるごとにプロジェクト全体をコンパイルしなおすなんて面倒でしかたありません.また敵AIは複数必要なので,敵を追加していくごとにどんどんC言語のソースが膨らんでいってしまいます.

さて,たいていのゲーム開発ではこのようにC言語のソースプログラムの中に敵AIの動作を書いたり,他にも例えばストーリーの部分をソースコードの中に書いたりはしません.普通はゲームスクリプト言語なりを独自に開発し,ストーリーやAIはそのスクリプトに書いたりします.

しかしスクリプト言語を独自に開発するのはとても大変です.そこでLuaの出番です. Luaなら簡単にC言語に組み込めます.また文法はとても覚えやすくスクリプト言語としてとても使いやすいです.C言語の関数も呼び出すことができますし,C言語のプロジェクト全体をコンパイルしなおさなくても,スクリプトの一部を書き直すだけで動作します.あなたはBさんにLuaの基本的な使い方とゲームで使用できる関数だけを説明すればいいのです.

例えば敵AIのゲームスクリプトとして使用できる関数を以下のように決めておく事にします.

getDistance関数 --  自分(Enemy)とプレイヤーとの距離を取得する
shot関数       --   弾を発射する 第1引数には弾を発射する角度を渡す
move関数      --   マップ上を動く 第1引数には方向を,第2引数にはスピードを渡す

ここで敵の動作として,プレイヤーが5マス以内に近づいてきたら弾を3方向に発射し,そうでなかったらプレイヤーに近づくというAIをLuaで作ってみます. (プログラム内で -- で始まる部分はコメントです )

--敵AIスクリプトの例
distance = getDistance()  --自分とプレイヤーとの距離を取得

if distance < 5 then  --もしプレイヤーと自分との距離が5マス以内なら
        shot( 0 )           -- 0度の角度に弾発射
        shot( 45 )    -- 45度の角度に弾発射
        shot( -45 )   -- -45度の角度に弾発射
else
        move( DOWN, 1 ) --プレイヤーに近づく
end

このように簡単にAIを作成することができます.

 by nishio

Comment Form:

コメント・トラックバック規約を必ずお読みください。

 

Comments:

2009/04/13 16:26:06 nishio
>pochy9nさん

返信遅くなりました.
ご指摘ありがとうございます.修正しておきました.
2009/04/03 18:41:43 通りすがり?
自己解決しました。
あれは2番目の事例へのリンクではなく、単にコメント数だったんですね。

ついでにコメント
このページの上のNEXTボタンを押すと、表からはリンクの外されている
開発環境に関するページに飛ばされるようです。
ブログテンプレートなので、どうしようもないとは思いますが
一応、ご連絡だけ。
2009/04/03 18:26:41 通りすがり?
ご存じかもしれませんが

Luaの組み込み例 (2)

の(2)のリンクが、このコメント欄になっています。
意図したことか、予期しないことかはわかりませんが
戸惑ってしまいました。

取り急ぎ、ご連絡まで。
2009/03/28 00:53:02 pochy9n
すみません。
先程投稿したコメントの非標準漢字(下向き矢印)が?になってしまいました。
次から気を付けますのでご容赦ください。
2009/03/28 00:47:35 pochy9n
無償の執筆をありがとうございます。
僭越ながら、誤記(またはそうと思われるところ)をコメントさせていただきます。

----

あなたはBさんにLuaの基本的な使い方とゲームで仕様できる関数だけを説明すればいいのです.
 ↓
あなたはBさんにLuaの基本的な使い方とゲームで使用できる関数だけを説明すればいいのです.


例えば敵AIのゲームスクリプトとして仕様できる関数を以下のように決めておく事にします.
 ↓
例えば敵AIのゲームスクリプトとして使用できる関数を以下のように決めておく事にします.


getDistance関数 ?-  自分(Enemy)とプレイヤーとの距離を取得する
 ↓
getDistance関数 --  自分(Enemy)とプレイヤーとの距離を取得する

Trackback URL: http://karetta.jp/trackback/book/228762/228766

Trackbacks:


このサイトについて|ヘルプ|Q&A|個人情報保護|プライバシーポリシー|利用規約|コメント・トラックバック規約|削除規程|広告掲載
Copyright (c) 2005-2007 Time Intermedia Corporation