このページで紹介しているのは、ゲーム「Autonauts(オートノーツ)」の「ランダム要素を組み入れる」スクリプト例です。
参考にしていただければ幸いです。
スポンサーリンク
■ 「ランダム要素」とは?
※今回は結構難しいお話です。
プログラミングには、「ランダム」という仕組みがあります。
プログラミング的には、「乱数」とか「ランダム値」なんて呼ばれたりします。
本作には「ランダム」は、「もし」や「繰り返し」のように機能としては備わっていませんが、無理やり形作ることができると思われます。
とはいえ、プログラミングの世界で使われている完全なランダムではなく、「ランダムっぽいもの」「ちょっとランダム」なものです。
■ ランダムなスクリプト例
本作には、四則演算や変数などの仕組みが備わっていないため、
「もし・・・でなければ」を使って、無理やりランダムな感じにしています。
もし:○○の保管場所がいっぱいなら
100,150に移動
でなければ
50,150に移動
保管場所の現在の状況を確認(取得)し、それによって行動を変えています。
保管場所がいっぱいなら、ボットは100,150に移動し、
保管場所がいっぱいでなければ(空や多少入っている等)、ボットは50,150に移動します。
上では「○,○に移動」のように、簡素なスクリプトにしていますが、ここに実際の命令を書き加えてください。
・流動的な保管場所を選ぶ
「・・・いっぱいなら」を使う場合、
アイテムの在庫がコロコロ変化する保管場所を選ぶとよく動きます。
例えば「丸太」関連や、「枝」「石」、「斧」「スコップ」などです。
補充もされるし使用もされる場所ですね。
他にも色々あるかもしれません。
要は「いっぱい」か「いっぱいでない」の境目を行き来しやすい保管場所です。
もちろんこの命令文の場合ですので、
「・・・空なら」によってランダム要素を実現することもできます。
・「もし」の条件式
「もし」の後に続く「○○なら」という部分を「条件式」と言います。
本作には条件式が結構たくさんあります。
外的要因によって変化するものを指定してやると、ランダムはうまくいきやすいです。
・保管場所
・オブジェクト
が良いと思われます。
オブジェクトは、「バケツ」や「ジョウロ」の中身の状態のことです。
「いっぱい」「ほどほど」「空」などによって行動を分けることができます。
これらは容量があります(「上質なバケツ」以降)。
1回すくうと満タンになり、使用すると1つずつ減ります(状況による)。
そうすると、その途中途中の状況が異なるため、外的なランダムとして組み込めます。
とはいえ結構面倒くさいので、保管場所が一番適任な気がします。
・「もし」を重ねる
「もし」や「もし・・・でなければ」は重ねることができます。
適切に重ねることで、ランダムがより複雑になります。
もし:○○1の保管場所がいっぱいなら
もし:○○2の保管場所が空なら
100,150に移動
でなければ
100,100に移動
でなければ
もし:○○3の保管場所がいっぱいなら
50,150に移動
でなければ
50,200に移動
・「叫ぶ」を使ったサブルーチン化
保管場所の有無によってランダムを構築する場合、命令文(ボットの容量)をかなり消費します。
同じような命令が多くなるからですね。
上で紹介したように、「移動」や「すべて落とす」のような行動をさせたい場合は、序盤のボットでもランダムを組み込めると思います。
命令の行数(ボットの容量)を少なくして実現したい場合は、「叫ぶ・聞く」機能を使います。
これらの機能は端的にいうと、
「叫ぶ」によって他のボットを起動させます。
「叫ぶ」で特定の文字列を叫ばせ、それを「聞いた」ボットが動く。
という仕組みです。
プログラミング的にはサブルーチンとか呼ばれたりします。
この「叫ぶ・聞く」を使うことで、
別のボットに処理を引き継がせたり、
同じスクリプトを2回書いたりする必要がなくなります。
ちょっとだいぶ難しい話になってきたので、ここで一旦区切ります。
「叫ぶ・聞く」については、また別記事にて紹介できればと思います。
とりあえず、まずは上の方法で、ランダムを色々といじって遊んでみてください。
遊ぶことで新たな発見が見つかり、とても楽しいですよ!
■ 終わりに
以上、「【Autonauts】ランダムな要素をプログラムするスクリプト例【オートノーツ】」でした。
楽しいゲームに出会うための参考としていただければ幸いです。
スポンサーリンク