プログラミング「的思考」を学ぶために、クマの「グマミン」が様々なゲームに挑戦する「プログマミング」企画。
第1回はこちらをご覧ください。
![](https://ashitaenta.jp/wp-content/uploads/2020/07/Snapshot-2020-07-04-20.40.11-320x180.png)
前回は基本的なゲーム画面の見方や、プログラムの管理について触れました。
今回から、本格的にロボットに指示を出していきたいと思います!
![グマミン](https://ashitaenta.jp/wp-content/uploads/2020/07/download20200706070906-300x300.png)
命令の優先度を考える
前回の攻撃のさせ方は簡単でしたね。
「最も近い敵を攻撃する」という命令で、自動で射程圏内の敵に攻撃をしてくれます。
では、射程圏内にいなかったら、、、?
ということで、次は「接近」です。
まずはフィールド画像を見てください。
![](https://ashitaenta.jp/wp-content/uploads/2020/07/991046fc9a2f7bbfeb06a8ff422e2dd3-300x164.png)
![グマミン](https://ashitaenta.jp/wp-content/uploads/2020/07/download20200706070906-300x300.png)
ここで現在のプログラムをチェック。
![](https://ashitaenta.jp/wp-content/uploads/2020/07/04dae799e6d629b4d6b8550d66d6302c-300x186.png)
「最も近い敵機(短距離または中距離)に攻撃する」となっています。
これでは遠距離の敵に攻撃を当てることはできません。
そこで、こちら。
![](https://ashitaenta.jp/wp-content/uploads/2020/07/1eafdecdf9a921e02853d3b4293cda35-300x271.png)
「最も近い敵機に接近する」という命令を新たに追加します。
これで、敵に近付きつつ、射程圏内で攻撃をする、という命令になりました。
![グマミン](https://ashitaenta.jp/wp-content/uploads/2020/07/download20200706070906-300x300.png)
どんどん近づくロボ。
![](https://ashitaenta.jp/wp-content/uploads/2020/07/15265599106908f15a99daa37826fbb7-300x193.png)
あ、あれ、、、?攻撃しないぞ?
ものすごく近い距離まで移動しても、攻撃してくれません、、。
ここで「優先度」の話となりました。
このプログラム表では、反時計回りに進むにつれて、命令の優先順位が低くなるのです。
つまり先ほどのプログラムだと、、
「敵機に近付く」>「攻撃する」
という優先順位の問題が発生し、延々と敵に近付くだけのプログラムとなるのです。
というわけで、こんな風にプログラムを修正。
![](https://ashitaenta.jp/wp-content/uploads/2020/07/380ef86f65622024dd9699f4fee15a7a-300x197.png)
これで、「敵機に近付く」<「攻撃する」という関係に。
つまり、はじめは攻撃ができないので「近づく」という命令に従いますが、近づいたら「攻撃する」という命令を優先し、敵に攻撃をしてくれるようになるのです。
修正してもう一度挑戦。まずは近づいていき、、、
![](https://ashitaenta.jp/wp-content/uploads/2020/07/ebc803fd60675b1c68ad097120a22751-300x194.png)
![](https://ashitaenta.jp/wp-content/uploads/2020/07/2e3c8de8df330c2b0816e914aaddb98d-300x190.png)
中距離から相手の撃破に成功!
これが「優先順位」の考え方になります。
![グマミン](https://ashitaenta.jp/wp-content/uploads/2020/07/download20200706070906-300x300.png)
条件判断を考える
続いては「条件判断」について学びます。
まず、このアリーナですが、1VS2でピンチの状況。
白いメーターが「シールド」の残量なのですが、、、
![](https://ashitaenta.jp/wp-content/uploads/2020/07/33f0f55d553a061657d0201cda307e4f-300x200.png)
ただの打ち合いになりあっけなく敗北してしまいました、、、。
この場合、何が問題なのでしょうか?
ちなみに、シールドは少し時間を置くと徐々に回復します。
さぁ、命令をいじりましょう。
ここでの答えは、
「近づいて攻撃する」→「シールドが壊れたらいったん回復するまで離脱」→「また近づいて攻撃」
を繰り返すことです。
ここで必要なのが、緑のボックス「条件判断」です。
![](https://ashitaenta.jp/wp-content/uploads/2020/07/f64639b8ea0b80ad0952ff073e4bf566-300x226.png)
条件判断にはさらにノードをつなげることができるので、「その条件を満たしているときに、つないでいる命令を実行する」ということが可能となります。
![グマミン](https://ashitaenta.jp/wp-content/uploads/2020/07/download20200706070906-300x300.png)
プログラムはこんな感じに。
![](https://ashitaenta.jp/wp-content/uploads/2020/07/2a79c85cc49826710bf55c0255123639-300x259.png)
「もし自機のシールドが0なら」、「敵から離れる」、「シールドが0以上の場合は相手に攻撃」、「相手に接近」
以上の命令を組み合わせて、再度バトルへ。
![](https://ashitaenta.jp/wp-content/uploads/2020/07/61e0a14efb500cc3953b2293f3f5466a-300x200.png)
これはシールドが壊れた状態ですが、すみやかに後ろへ下がるように。
そしてシールドが回復すると、再度接近!
![](https://ashitaenta.jp/wp-content/uploads/2020/07/4daa1e431e30dfdbdd3590700b19d4e7-300x186.png)
前後へのムーブを繰り返し、撃破に成功しました。
いかがでしたか?自分でプログラムしてみると、なんだか頭がよくなった気がしてくるのが不思議です。
やはりプログラムしたものがすぐに動いて可視化されるので、どこが問題なのかが一目でわかります。
次はもう一段階難しくなっていくらしいので、心してかかりたいと思います。
ではまた!
![グマミン](https://ashitaenta.jp/wp-content/uploads/2020/07/download20200706070906-300x300.png)
![](http://image.moshimo.com/af-img/0866/000000029831.jpg)