例えば今あなたがコンピュータゲームを複数人で開発しているとしましょう.
開発メンバーはコアとなるプログラムを作成するあなたと,敵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
Trackback URL: http://karetta.jp/trackback/book/228762/228766 Trackbacks: |