こちらの続き
動きを変える
近場をうろちょろせず、混戦は避けるために
・盤面を動き回る
・敵に衝突したらそこから離れる
止まっている敵にも、意外と弾が命中しない。
・せめて止まっている敵には確実に命中させる
これらをやっていきます。
盤面を動き回る
参考になるのは、Crazy ですね。
setForward(40000) で、とりあえず長距離動く「設定を」します。
set系を使うことで、複数の動作をパラレルにさせることができる、ということで、合わせて setTurnRight(90) も使用しています。set系のメソッドの説明を見ると、IBaseBot.go() を行うまでの設定が使われるということのようなので、下記のように書くと、ぐるぐる回り出します。左に角度を変えながら前に進むので、そんな感じになるわけです。
setForward(400);
setTurnLeft(90);
go();
では、左に曲がったり右に曲がったりさせようと思って、こう書いてもうまくはいきません。
setForward(400);
setTurnLeft(90);
go();
setForward(400);
setTurnRight(90);
go();
ほぼ真っ直ぐ進もうとします。左にちょっと向きを変えて進もうとしたら、すぐ次のコマンドで右に曲がれと言われるからですね。
そこで、Crazy では、回転し切るまでwaitするようです。そのための情報として、getTurnRemaining が可能ということですね。
ただ、そのまま真似しても面白くないので、基本は左回転するけど、敵を見つけたら右回転するということにしてみました。
while (isRunning()) {
setForward(400);
setTurnLeft(90);
go();
}
fire(1);
setForward(100);
setTurnRight(90);
go();
これはなかなか面白い。そして強い。
反時計回りに円弧を描きながら敵の後ろに回り込んで、見つけたら、左右に揺れながら前に進み撃ちまくります。
めった撃ちにしてやりますw
ただ、撃って点を稼ぐので勝率は良いですが、割と早めに退場になることが多いです。
そして、混戦を避けようと思ったのに、めちゃくちゃ自分から突っ込んでいってるのが、戦いの美学的によろしくないです。
そこで、次は、敵に衝突したらそこから離れる、ヒットアンドアウェイを考えてみようと思います。