Darkside(リンクエラー修正しました)

2015年3月14日(土) 21:28

スクリプト作り

 lua スクリプトが意図通りに動作するようになるまでは、とんでもない手間が掛かる。
 やりたいことは簡単でも、それを記述すると延々長くなる。100行単位で増えて行く。特に面倒なのがステートの管理。スクリプトには大きく分けて、「調査」と「進行」がある。

 調査とは、ある動きが成功するかどうか、成功しなければどう失敗したか、それを調べることである。重要なのは、調査が完了した際には状態(戦車の位置など)が不変でなくてはならない。調査中には戦車を動かして試すのだが、調査が終われば元に戻す。それにはステートセーブとロードが活躍するが、調査は途中で場合分けにより枝分かれするので、ステート管理を誤ると元の状態に戻らない。
 進行とは、ある動きを行わせることである。調査との違いは、元の状態に戻さないこと。

 スクリプトは、いろいろな場合を調査し、成功と失敗の情報を集める。それに基づいて、実際に戦車を進行させる。
 向きをXに向けて、Yフレーム前進させ、Zフレームの左ハンドルを切って途中でブレーキを掛ける(正確には、アクセルを抜く)。そしてバッテリーに命中するタイミングで砲撃する。このXとYとZとブレーキタイミングの最適な組み合わせをスクリプトにより探索するわけだ。

 片っ端から調べると、場合の数が増え過ぎるのでうまく制限せねばならない。制限により最適解を見落とさないためには、適切な制限を行わねばならず、そのためには調査をある程度進める必要がある。スクリプトで調査し、それをスクリプトの改良にフィードバックして更に調査を進める。
 だから、有能なスクリプトは高度に専用化されてしまう。レースゲームであれば、コーナー1つごとに専用のスクリプトが進化する。

 今回のランナバウトでは妥協し、重要ポイントだけスクリプトを走らせる。バッテリー5つのうち、砲撃してすぐ引き返さねばならない3箇所それぞれ。そして街を出た直後にパトカーと追突が発生する瞬間。以上の合計4つだ。

 バッテリー3箇所はスクリプトの相当を共用できるはずなので、この1つ目をスクリプト化するのが山場である。

written by higashino [ゲーム] [この記事のURL] [コメントを書く] [コメント(0)] [TB(0)]

この記事へのトラックバックPingURL

Comments

TrackBacks

Darkside(リンクエラー修正しました)

Generated by MySketch GE 1.4.1

Remodelling origin is MySketch 2.7.4