このページで紹介しているのは、ゲーム「Autonauts(オートノーツ)」の「バックパックを活用して、道具をたくさん持つ」スクリプト例です。
参考にしていただければ幸いです。
スポンサーリンク
■ 道具とバックパックの関係
プレイヤーやボットは、「道具(ツール)」を1つしか手に持てません。
「道具」とは、シャベルや斧などのことです。
「木板」や「柱」などのアイテムは、手に4つぐらい持てますよね。
しかし「道具」は、いずれも1つしか手に持てません。
ゲームを進めていくと、ボットが道具を取りに行く時間が面倒に感じ始めるはずです。
町が大きくなってくれば、より強く思うはずです。
「取りに戻る時間を減らせないかな?」と。
これはバックパックを使うことで解決できます。
しかし「バックパックに入れたり・出したり」するスクリプトは、かなり難しいと思います。
■ 簡単な解決法
最も簡単な解決法は、「道具」の保管場所を複数作ることです。
木の伐採場や、石や粘土の採掘場の近くに新しくケースを置き、2箇所に「道具」を保管します。
作り方はこうです。
・作成した道具は、メインの保管場所にしまう
・メインの保管場所から、採掘現場の保管場所に運ぶボットを作る
・採掘ボットは、採掘現場の保管場所から道具を取る
これで、取りに戻る時間が大幅に削減できます。
まずはこれを作ってみましょう。
運ぶボットのスクリプトや、在庫の持ち方などの考え方を学ぶことができます。
■ バックパックに入れ・出すスクリプト
保管場所で、道具をバックパックに満タンまで入れ(更に手にも持つ)、
全て使い切ったら保管場所に戻ってくる。
というスクリプトです。
繰り返し:永遠に!
もし:手が空です
回収する
もし:手が空です
繰り返し:バックパックがいっぱいになるまで
持っているアイテムをしまう
粗雑な斧の保管場所に移動
粗雑な斧の保管場所から取る
一番近い木がある場所□
木に移動
持っているアイテムを使う(斧)
「粗雑な斧」で木を切る想定ですが、「シャベル」や「ツルハシ」など適宜変更してください。
ポイントはスクリプト前半です。
以下解説となります。
まず「手が空だった場合に、バックパックから回収します」
これでバックパックに何か入っていないかを確認しています。
回収した結果、斧を持っていたらそのまま木こりを始めます。
回収しても手に何もない場合(手が空・バックパックも空ということ)、斧を保管場所に取りに行きます。
このとき、最初に「持っているアイテムをしまう」をしています。
当然最初の1回は手が空なのですから、バックパックには何もしまいません。
1回斧を取って、2回目にバックパックにしまう。
2回目の斧を取って、3回目にバックパックにしまう。
これを繰り返してバックパックがいっぱいになったら、「斧を取る」繰り返しは終了です。
「繰り返し:回」で2回とか3回とか指定してもできます。
「繰り返し:バックパックがいっぱいになるまで」とすることで、ボットの性能による違いを自動判定させています。
■ 命令を先にするか、後にするか
「繰り返し」の動作をさせるとき、
中の命令を最初に書くか、最後に書くかで動作が変わります。
上のスクリプトでは、
「回収する」「持っているアイテムをしまう」をあえて最初に持ってくることで、ボットが上手に機能するようにしています。
これらを後に書く方法も考えてみてください。
かなり難しいと思います。
■ 道具を持ってくる基本スクリプト
最後に道具を保管場所から持ってくる、基本スクリプトの紹介です。
繰り返し:永遠に!
もし:手が空です
粗雑な斧の保管場所に移動
粗雑な斧の保管場所から取る
一番近い木がある場所□
木に移動
持っているアイテムを使う(斧)
ゲーム最初のチュートリアルでは、下記のようにしましたよね。
繰り返し:永遠に!
粗雑な斧の保管場所に移動
粗雑な斧の保管場所から取る
繰り返し:手が空になるまで
一番近い木がある場所□
木に移動
持っているアイテムを使う(斧)
どちらでも同じ動作をします。
好きな方を使えばいいと思います。
ただ、「バックパックに入れ・出すスクリプト」は、「もし」と「繰り返し」が何重にもなっていますよね。
この何重にもなった状態を、プログラミング的には「ネスト」とか「入れ子」とか「多階層」と呼んだりします。
こういう何重にもなっている状態は、プログラムが見づらくなっていますので、なるべくならないようにプログラムを組むと良いと言われています。
■ 終わりに
以上、「【Autonauts】道具をたくさん持つスクリプト、バックパックを活用するスクリプト例【オートノーツ】」でした。
楽しいゲームに出会うための参考としていただければ幸いです。
スポンサーリンク