このページで紹介しているのは、ゲーム「Autonauts(オートノーツ)」の「もし・・・でなければ」のスクリプト命令文の使い方と、スクリプト例です。
参考にしていただければ幸いです。
スポンサーリンク
■ 「もし・・・でなければ」とは?
ボットを動かすスクリプトの命令の一つです。
「もし」の拡大版と言えます。
「もし」は、「もしの条件に合っていたら実行する」のみでしたが、
「もし・・・でなければ」は、「もしの条件にあっていたらAを実行する」「それ以外はBを実行する」と分岐させられます。
さて、頭のいい人はここで気づいたかもしれません。
「もし:Aならば」の次に
「もし:Bならば」と書くのと同じではないか?と。
その通りです。
大体同じです。
だいたい同じですが、微妙に違います。
本稿では、その微妙な違いをスクリプト例を交えて紹介したいと思います。
「もし・・・でなければ」は、おそらくゲーム最後まで使わなくてもクリアは可能です。
プログラミング的には中級者以降に当たるため、「もし」や「繰り返し」をマスターしていないと使うのは難しいかもしれません。
しかしながら使い方を覚えると、プログラムの幅がかなり広がります。
■ 日常生活での「もし・・・でなければ」
実際のスクリプトで紹介する前に、日常生活を例にして「もし・・・でなければ」を説明したいと思います。
例にあげるのは、信号の渡り方です。
もし:赤信号なら
渡らない(立ち止まる)
もし:青信号なら
渡る
というプログラムを組むとしますよね。
「もし」を2つ使って書いてみました。
この場合、「赤信号だったら渡らないで、青信号だったら渡る」という動きになります。
これを「もし・・・でなければ」にするとどうなるでしょう。
もし:赤信号なら
渡らない(立ち止まる)
でなければ
渡る
この場合、「赤信号だったら渡らないで、それ以外だったら渡る」という動きになります。
勘のいい人は気づいたと思います。
そうです。
この場合では、
・黄色信号
・信号機が故障していて消えている
・信号機の色が見えない
などの場合も渡ってしまいます。
「もしを2つ使う場合」は、厳密に2つの条件が指定できましたが、
「もし・・・でなければ」は、条件とそれ以外全てとなっています。
これは全然意味が違います。
■ スクリプト例
「もし・・・でなければ」は、
・もしとそれ以外のスクリプトを組む
・行数(命令文)を少なくできる
などのメリットがあります。
とは言え条件が追加されているようなものですから、機能の低い初期のボットなどには組み込みづらいです。
少なくとも「ボットMk2」あたりから使えるスクリプトだと思います。
ゲーム内では、
「もし:保管場所がいっぱいでなければ」というのをよく使うはずです。
これを「もし・・・でなければ」に切り替えると、色々な行動をさせられるようになります。
もし:保管場所がいっぱいでなければ
保管場所に移動
保管場所に追加
でなければ
保管場所2に移動
保管場所2に追加
1つのアイテムの保管場所を複数作っておき、
いっぱいになるまでそこにいれ、いっぱいだったら別の保管場所に持っていきます。
もし:保管場所がいっぱいでなければ
保管場所に移動
保管場所に追加
でなければ
150,100に移動
すべて落とす
保管場所がいっぱいだったら、特定の場所の地面に落とします。
よく使う作業台などの近くに落とすことで、擬似的な保管場所にできます。
もし:保管場所がいっぱいでなければ
保管場所に移動
保管場所に追加
でなければ
脅威2:神秘的な石頭に移動
脅威2:神秘的な石頭に追加
保管場所がいっぱいだったら、そのアイテムを捨てます(「神秘的な石頭」に入れると、アイテムは消滅する)。
その場に落として、別のボットに「ホウキ」で掃除させるようなこともできます。
これらの命令文は、文章で書いただけではいまいちピンと来ないかもしれません。
「今、”もし”だけで動かしているものを、”もし・・・でなければ”でできないか?」と無理やり書きなおしてみると、思いもよらぬ方法を見つけられます。
例えば上の、「神秘的な石頭」に捨てる例です。
ゲーム中盤になると、住民の家からゴミが出ます。
食べ終わった「土器」などです。
これを拾って
・元の保管場所に戻す
・いっぱいなら捨てる
という処理に使えます。
全て捨ててしまっても良いのですが、「もし・・・でなければ」を使うことでリサイクルの仕組みが作れます。
・ボットを定位置に戻す
こんな使い方もできます。
もし:保管場所がいっぱいでなければ
保管場所に移動
保管場所に追加
でなければ
150,100に移動
ボットはエラー状態になると、その場に立ち止まってしまいます。
この場合では、保管場所がいっぱいになったら、「150,100の座標」に移動します。
こうすることで、
・作業しているボットがどこにいるのか分からない問題
・作業が完了したかを一目で確認できる
メリットがあります。
・使う道具を変える
金属製の道具が作れるようになると、ボットたちに金属製の道具を使わせるようになると思います。
「粗雑なシャベル」から「金属製のシャベル」のように、アップグレードさせるような感じですね。
しかしこれには大きな問題があります。
金属製品は多岐に渡るため、供給できない状況に陥ることがあるのです。
それを解決するスクリプトです。
もし:手が空なら
もし:保管場所「金属製のシャベル」が空でなければ
保管場所「金属製のシャベル」に移動
保管場所「金属製のシャベル」を拾う
でなければ
保管場所「粗雑なシャベル」に移動
保管場所「粗雑なシャベル」を拾う
これで、
「金属製のシャベルの保管場所からまずは取ろうとし、もし無かったら粗雑なシャベルから取る」
という処理ができました。
・擬似的な保管場所から拾う
上で書いたスクリプトに、適当にその辺にアイテムを落とすのがあります。
もし:保管場所がいっぱいでなければ
保管場所に移動
保管場所に追加
でなければ
150,100に移動
すべて落とす
です。
これの逆バージョンです。
その「もし保管場所が空になったら、適当に置かれた場所から拾うスクリプト」です。
もし:保管場所が空です
一番近い○○がある場所□
○○に移動
○○を拾う
でなければ
保管場所に移動
保管場所を拾う
ケースやパレットなどの保管場所が空になってしまうことってあると思います。
そういう時に、そのへんに適当に置いといたものからピックアップします。
ケースやパレットにいちいち保管するのが面倒くさい。
そんなプレイの仕方をしている人には特に使いやすいスクリプトだと思います。
■ 更なるステップアップ
「もし・・・でなければ」の、比較的簡単なスクリプトを紹介してみました。
この命令文は、無理矢理にでも書いてみると、使い道が見えてきます。
「もし」だけでやっていたスクリプトを、無理やり「もし・・・でなければ」に書き換えて遊んでみるのです。
すると、ある時突然気がつくと思います。
「あれ?こういう状況で使えるんじゃない?」と。
それを何度か経験していくと、更なるステップアップのスクリプトが作れるようになります。
例えば「もし・・・でなければ」を使うことで、
・保管場所の相互補充スクリプト
・2つの保管場所のどちらかが空いていたら作るスクリプト(OR関数)
・フンをしまう、掃除するスクリプト
などを作ることもできます。
これらは別記事で紹介しています。
ぜひ色々と書いて試行錯誤してみてください。
突然の閃きが降りてくる瞬間こそが、プログラミングの醍醐味だと思います。
■ 終わりに
以上、「【Autonauts】「もし・・・でなければ」の使い方、スクリプト例【オートノーツ】」でした。
楽しいゲームに出会うための参考としていただければ幸いです。
スポンサーリンク