このページで紹介しているのは、ゲーム「Autonauts(オートノーツ)」の「叫ぶ」や「聞く」の自動プログラムの使い方・書き方です。
参考にしていただければ幸いです。
※ 今回はかなり難しいお話です。
スポンサーリンク
■ 「叫ぶ」「聞く」とは?
スクリプトの命令文の一つです。
スクリプト内で「もし」を使うときに、よくわからない条件式(命令文)を見かけると思います。
「もし:聞く」です。
これは、「別のボットから出された声(単語)を聞いたら、その行動を起こす」というものです。
「もし」の中にあるわけですから、声を聞かなければ実行しないというわけですね。
ボットのスクリプト編集を行う際に、PSでは△ボタンを長押しすると「叫ぶ」という命令文が追加されます。
ボットのプログラムを書き換える時、まずは△ボタンを長押しして、ボットを停止させスクリプト画面にしますよね。
これを、スクリプト画面を選択した際に行うわけです。
スクリプト選択中(編集中)に、プレイヤー操作に切り替え、△ボタン長押し。
これで「叫ぶ」が書き込まれます。
「叫ぶ」と「聞く」はセットで使う命令文です。
プログラミング的には中級者以上じゃないと使いこなせないと思いますが、
使えるようになると、かなりゲームの幅が広がると思います。
■ 「叫ぶ」「聞く」の基本的な使い方
ゲーム中では、まずは「もし:聞く」から触れることになると思います。
そのため、「聞いたら実行する」→「(別のボットに)叫んでもらう」という感じで使うのかな?
と、考え方として根付いてしまいます。
本来、これは逆です。
プログラミング的にはこの命令文は、「叫ぶ」→「聞く」の順で考えます。
プログラミング的には「処理を渡す」とか「サブルーチン」といった考え方の命令文です。
何を言っているのかサッパリわけ分からんかと思います。
「聞く」のボットが主ではなく、
「叫ぶ」のボットが主で、「聞く」のボットが従になるのが本来です。
しかし本作は、この「叫ぶ」「聞く」を行うために必須な、「引数」や「戻り値」「変数」などが導入されていませんから、単純に「処理を渡す」のような使い方しかできません。
ゲーム前半で使うと重宝する機能なのですね。
しかし前半で、こんな難しい処理を作ることは困難で、使い所の難しい命令文になってしまっています。
■ 処理を渡す
「叫ぶ」「聞く」は、対応した言葉(文字列)同士を繋ぎます。
例えば、「叫ぶ:HELP」と書いたら、
「聞く:HELP」と書いたボットが動き出します。
「叫ぶ:HELP」と書いたら、
「聞く:続き」と書いたボットは動きません。
「叫ぶ:続き」と書いたら、
「聞く:続き」と書いたボットが動き出します。
—
ゲーム最序盤では、ボットの空き容量(メモリ)が少なく、長い命令を組めないと思います。
例えば、
アイテムをクラフトするのに、「丸太:1」「木板:4」「木の種:2」を持ってくる。
これはボットの性能が上がると1体でさせられます。
以下のようになります。
丸太の保管場所に移動
丸太の保管場所から取る
粗雑な作業台に移動
粗雑な作業台に追加
木板の保管場所に移動
繰り返し:4回
木板の保管場所から取る
粗雑な作業台に移動
繰り返し:4回
粗雑な作業台に追加
木の種の保管場所に移動
繰り返し:2回
木の種の保管場所から取る
粗雑な作業台に移動
繰り返し:2回
粗雑な作業台に追加
こんな感じでアイテムクラフトを行いますよね。
しかしゲーム序盤では、ボットにこれだけの命令を追加できません。
これは「叫ぶ」「聞く」を使うことで解決できます。
途中で別のボットに「処理を渡す」というわけですね。
「続きをやってもらう」というと分かりやすいと思います。
こんな感じです。
●ボットA
丸太の保管場所に移動
丸太の保管場所から取る
粗雑な作業台に移動
粗雑な作業台に追加
木板の保管場所に移動
繰り返し:4回
木板の保管場所から取る
粗雑な作業台に移動
繰り返し:4回
粗雑な作業台に追加
叫ぶ:続き
●ボットB
繰り返し:永遠に!
もし:聞く:続き
木の種の保管場所に移動
繰り返し:2回
木の種の保管場所から取る
粗雑な作業台に移動
繰り返し:2回
粗雑な作業台に追加
こうすることで、ボットAでできなかった作業を、ボットBに引き継ぐことができます。
なんとなく分かりますかね。
これが「叫ぶ」「聞く」の基本的な使い方です。
上のスクリプトのポイントは、
ボットBは「繰り返し:永遠に!」を設定しておくことです。
「聞く」側はいつでもそれを受信できるようにしておきます。
「繰り返し:永遠に!」とすることで、ずっと「聞く」を待ち続けている状態になります。
「叫ぶ」をするボットはいつ叫んでも構わず、なんだか日常生活の電話や上司・部下の関係性を思い起こさせてくれ感慨深いものがありますw
さて、最初にも説明した通り、「続きをやってもらう」という使い方は、ゲーム序盤で活躍します。ゲーム中盤以降では1体のボットで完遂できてしまうため、活用の場が少なくなるわけですね。
■ 「叫ぶ」「聞く」の使い方(応用編)
プログラミングというものは、
「同じ処理は1回だけ作り、それを呼び出して使う」という考え方をします。
オートノーツを遊んでいると、同じ命令文を何度も何度も書くなぁ。
なんて思うことはありませんでしょうか。
楽しすぎてあんまり思わないかも?
プログラミングは、最小の手間で最大の効果を発揮させるのが一つの考え方です。
「ボットに全部やらせて、自分は何もしなくていいようにする」
この考え方はもっと極まっていきます。
つまり、「自分がプログラムを書く」という行動そのものにも適用させます。
「おんなじプログラムを何度も書くのはヤダ!」
まったくとんでもない面倒くさがり屋ですよね。
同じ処理は、1回書くだけにします。
同じ行動をするボットは、1回(1体)だけ作り、それを使いまわします。
これが「叫ぶ」「聞く」の応用的な使い方です。
例えばこんな使い方があります。
●ボットA
繰り返し:永遠に!
もし:聞く:丸太
丸太の保管場所に移動
丸太の保管場所から取る
粗雑な作業台に移動
粗雑な作業台に追加
●ボットB
繰り返し:永遠に!
もし:聞く:木板
木板の保管場所に移動
繰り返し:4回
木板の保管場所から取る
粗雑な作業台に移動
繰り返し:4回
粗雑な作業台に追加
●ボットC
繰り返し:永遠に!
もし:聞く:木の種
木の種の保管場所に移動
繰り返し:2回
木の種の保管場所から取る
粗雑な作業台に移動
繰り返し:2回
粗雑な作業台に追加
●ボットD(現場監督)
叫ぶ:丸太
叫ぶ:木板
叫ぶ:木の種
このようにスクリプトを組むと、
「ボットD(現場監督)」の指示の下、「丸太1」「木板4」「木の種2」が作業台に運び込まれます。
「丸太」や「木板」や「木の種」は別の場所でも使えますから、このようにして1つのスクリプトを流用していきます。
だいぶプログラミング的な考え方に近くなってきましたね。
プログラミング的には「呼び出し」とか言います。
ただ、実際にやってみると分かると思いますが、「木板」は4個運ぶこと固定になってますし、「木の種」は2個運ぶこと固定になっています。
1個とか3個は運んでくれず、実に使いづらいボットくんです。
また、「ボットD(現場監督)」が呼び出して今動いているボットたちは、
別の「ボットE(現場監督2)」が急に呼び出しても動いてくれません。
実に、実際の仕事現場的でなんとも・・・(以下略)。
理想と現実、机上の空論的なことが学べていますね。
上のスクリプトをもう一度見直してみてください。
(現場監督)は叫んでいるだけです。
くそうラクしやがっ…(# ゚Д゚)
●ボット(旦那)
叫ぶ:母さん飯!
叫ぶ:母さんお茶!
プログラミングで日常行動が見直せます。
すばらしい!
—
最初に話したように、オートノーツではプログラミングの初歩が学べるようになっています。そのため、本格的なプログラミングでは作れることが、「叫ぶ」「聞く」はうまく動いてくれないことが出てきます。
■ どう使うといいか?
例えば、「ある特定の作業だけを行うボット」のような使い方がうまくいきやすいです。
上の例では「丸太1」を運ぶボットですね。
あえて「木板1」のみ運ぶボットにして、
叫ぶ:木板
叫ぶ:木板
叫ぶ:木板
叫ぶ:木板
のように4回呼び出して動かす方法もあります。
但しこの場合は、
叫ぶ:木板
待機:120
叫ぶ:木板
待機:120
叫ぶ:木板
待機:120
叫ぶ:木板
のように「待機」時間を設定しなければなりません。
「木板」を運び入れるまでの時間を待機させます。
おっと大事なことを忘れていました。
「粗雑な作業台」を使うことが固定になっています。
制作物の設定を最初に行わなければなりません。
粗雑な作業台に移動
粗雑な作業台を連結する
設定 出力先 粗雑なシャベル
の連結を解く
叫ぶ:丸太
叫ぶ:木板
叫ぶ:木の種
上では例として「粗雑なシャベル」を作る設定としています。
こうすることで、現場監督が最初に作るものを指定、
各作業員たちに材料を持ってこさせる、という流れが出来上がりました。
—
「アイテムを持ってこさせる」ということばかり書いてきましたが、
「叫ぶ」「聞く」でさせるべきは、「変わらない固定作業」です。
・ホウキを使った掃除
・ゴミを捨てる
・木を切る
・地面を掘る
などなど、ゲーム内をよく考えて使い所を探してみてください。
・条件内に組み込む
「叫ぶ」「聞く」を「もし」の条件内に組み込むこともできます。
例えばこんな感じです。
●ボットA(現場監督)
繰り返し:永遠に!
もし:○○の保管場所が空なら
叫ぶ:ないよ!
でなければ
叫ぶ:あるよ!
●ボットB
繰り返し:永遠に!
聞く:ないよ!
一番近い木がある場所□
木に移動
持っているアイテムを使う(斧)
色々できそうですよね。
・「聞く」専用係を作る
「1ボット1聞く」ではありません。
複数の「聞く」を書き、様々な聞くに対応させられます。
繰り返し:永遠に!
聞く:ないよ!
一番近い木がある場所□
木に移動
持っているアイテムを使う(斧)
聞く:あるよ!
一番近いごみがある場所□
ゴミに移動
持っているアイテムを使う(ホウキ)
聞く:●●
・・・
先にも書いたように「聞く」を同時にすることはできませんから、アイドルタイムの管理が重要になります。
・「叫ぶ」の階層化
「聞く」の中に「叫ぶ」を入れることもできます。
繰り返し:永遠に!
聞く:ないよ!
もし:粗雑な斧の保管場所が空なら
叫ぶ:斧ないよ!
一番近い木がある場所□
木に移動
持っているアイテムを使う(斧)
※ 簡素例ですので、雑なスクリプトになってます。
このような感じで、「叫ぶ」「聞く」は可能性があるスクリプトです。
どこでどう使えるのかをゲーム内で見つけ出してみてください。
プログラムの質が1つレベルアップし、新しい次元でゲームを楽しむことができるようになりますよ。
■ 終わりに
以上、「【Autonauts】叫ぶ・聞くのスクリプトの使い方、書き方【オートノーツ】」でした。
楽しいゲームに出会うための参考としていただければ幸いです。
スポンサーリンク