このページで紹介しているのは、ゲーム「Autonauts(オートノーツ)」の「保管庫のいずれかが空いていたら実行するスクリプト例(OR関数)」です。
参考にしていただければ幸いです。
スポンサーリンク
■ いずれかの保管庫に空きがあれば実行
ゲームに少し慣れてくると、
「保管庫(ケース・パレット)に空きがあれば、アイテムをクラフトする」というスクリプトを作っていると思います。
作業台でアイテムをクラフトする時に、「繰り返し:永遠に!」を指定してしまうと、永久にアイテムを作ってしまいます。
それを防止するために、ケースやパレットがいっぱいになったら停止する(いっぱいでなければ作る)というスクリプトです。
具体的には以下のように書きます。
繰り返し:永遠に!
もし:粗雑なシャベルの保管場所はいっぱいではありません
石の保管場所に移動
石の保管場所から取る
粗雑な作業台に移動
粗雑な作業台に追加
枝の保管場所に移動
枝の保管場所から取る
粗雑な作業台に移動
粗雑な作業台に追加
これで「粗雑なシャベル」は、保管場所がいっぱいになったら作るのをやめます。(実際には、出来上がったシャベルを保管場所にしまうボットも動かしてください)
・2箇所の保管場所を参照
ゲームを進めていくと、
作業台を使うと2つのアイテムが作られるパターンが出てきます。
・穀物→穀物の種、ワラ
・パピルス→パピルスの種、パピルスの茎
などです。
上のスクリプトでは、1つの保管場所がいっぱいかどうかで作るかどうかを判断させています。
2つのアイテムができてしまうと、この方法が使えなくなるわけですね。
2つの保管庫を参照する方法としては、
・両方に空きがあれば作る(AND関数)
・どちらかに空きがあれば作る(OR関数)
のいずれかが考え方としてあります。
「両方に空きがあれば作る」というのは、出来上がるアイテムの使用数によって偏りがでてしまいます。
「片方の保管庫がいっぱいなのに、片方の保管庫は空」という状況によくなります。
そのため、「どちらかに空きがあれば作る」という考え方のほうが良いと思われます。(両方がいっぱいになるまで作り続けます)
■ スクリプトの書き方(簡素版)
簡単な方法では、以下のスクリプトがあります。
繰り返し:永遠に!
もし:ワラの保管場所がいっぱいではありません
穀物の保管場所に移動
穀物の保管場所から取る
脱穀機に移動
脱穀機に追加
もし:穀物の種の保管場所がいっぱいではありません
穀物の保管場所に移動
穀物の保管場所から取る
脱穀機に移動
脱穀機に追加
※出来上がったワラ、穀物の種を保管場所にしまうボットも別途動かしてください
それぞれ保管場所を参照して行動します。
・「ワラの保管場所がいっぱいでなければ、脱穀する」
・「穀物の種の保管場所がいっぱいでなければ、脱穀する」
どちらかがいっぱいでない限り続けます。
両方いっぱいになったらやめます。
■ スクリプト(OR関数)の書き方
上のスクリプトでも十分ですが、より厳密に書く場合は以下のようにします。
まぁ、やってることは同じです。
繰り返し:永遠に!
もし:ワラの保管場所がいっぱいではありません
穀物の保管場所に移動
穀物の保管場所から取る
脱穀機に移動
脱穀機に追加
でなければ
もし:穀物の種の保管場所がいっぱいではありません
穀物の保管場所に移動
穀物の保管場所から取る
脱穀機に移動
脱穀機に追加
※出来上がったワラ、穀物の種を保管場所にしまうボットも別途動かしてください
それぞれ保管場所を参照して行動します。
・「ワラの保管場所がいっぱいでなければ、脱穀する」
・「いっぱいだったら→穀物の種の保管場所がいっぱいでなければ、脱穀する」
・「いっぱいだったら→穀物の種の保管場所もいっぱいだったら、何もしない」
「もし・・・でなければ」は、「もし」の拡大バージョンです。
「もし」の条件(ワラの保管場所がいっぱいではありません)を満たさなかった場合に、「でなければ」を実行します。
つまり「ワラの保管場所がいっぱいだったら→でなければ」の先を実行します。
次に「でなければ」でもう一度「もし」を指定しています。
「もし(穀物の種の保管場所がいっぱいではありません)」です。
最初のスクリプトとやってることは同じですが、こちらの方がより厳密です。
プログラミング的には「OR関数」的なことをしています。
もっとも「もし」で無理やり実現しているので、キレイではありませんが。
「もし・・・でなければ」は、ほとんど使わなくてもゲームは進められます。
ちょっと難しいのですけれど、使えるようになるとプログラムの幅が広がります。
■ 問題点
これらの
「どちらかの保管庫に空きがあれば作る」
というスクリプトには大きな問題点があります。
・保管庫がいっぱいなアイテムが、その場に溜まってしまう
という問題です。
これは、拾うボットに
・余っていたら(神秘的な石頭に)捨てに行く
・余っていたらどこかに置いて、ホウキではく
といった動作をさせることでキレイにすることができます。
■ 終わりに
以上、「【Autonauts】どちらかの保管庫に空きがあれば作るスクリプト例(OR関数)【オートノーツ】」でした。
楽しいゲームに出会うための参考としていただければ幸いです。
スポンサーリンク