コンテンツにスキップ

敵のほうを向く

敵がどこにいても、敵のほうを向くタンクを作ります。

第 2 章までに手に入る部品で作れます。

かんたんブロックの並び:敵のほうを向いて、ねらいが合ったら撃つ

「🎯 ねらいが合っている」のときだけ「💥 撃つ」を実行します。向きは、いつも敵のほうへ直しつづけます。

ブロックは、上から順に、0.1 秒ごとに読まれます(まちがえやすい 4 つのルール)。

同じ作戦を、Python で書くとこうなります。ブロックになれたら、文字でも書いてみましょう。

敵のほうを向いて、向きが合ったら撃つ
def update(state):
me = state.me
en = state.enemy
# 自分から敵へ向かう角度
want = angle_to(me.x, me.y, en.x, en.y)
# あと何度で向きが合うか。5 度以内なら「合っている」
合っている = abs(angle_diff(want, me.angle)) < 5
return {"drive": "stop", "steer": want, "fire": 合っている, "barrier": False}
  1. angle_to が、自分から敵を向く角度を出します
  2. angle_diff で、いまの向きとの差を出します
  3. 差が 5 度より小さいときだけ fireTrue にします

steer には、向きたい角度そのものを入れます。「あと何度まわるか」ではありません(4 つの入力)。

タンクは 1 秒で 180 度までしか回れません。真後ろを向くのに 1 秒かかります(タンクのうごかしかた)。

  • < 5< 20 に変えると、どうなるでしょう。撃つ回数当たる回数を、分析画面で見比べてみましょう
  • "drive": "stop""forward" に変えると、敵に向かって進みます → 近づいて、止まって撃つ
  • 敵と反対を向く。 引数の順番(自分 → 敵)を確かめましょう。逆にすると、反対の向きになります
  • 撃った弾が、動く敵に当たらない。 敵が動いていると、向いた先にはもういません → 動く敵に当てる