敵のほうを向く
やりたいこと
Section titled “やりたいこと”敵がどこにいても、敵のほうを向くタンクを作ります。
かんたんブロックで作る
Section titled “かんたんブロックで作る”第 2 章までに手に入る部品で作れます。
「🎯 ねらいが合っている」のときだけ「💥 撃つ」を実行します。向きは、いつも敵のほうへ直しつづけます。
ブロックは、上から順に、0.1 秒ごとに読まれます(まちがえやすい 4 つのルール)。
Python だとこう書く
Section titled “Python だとこう書く”同じ作戦を、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}angle_toが、自分から敵を向く角度を出しますangle_diffで、いまの向きとの差を出します- 差が 5 度より小さいときだけ
fireをTrueにします
steer には、向きたい角度そのものを入れます。「あと何度まわるか」ではありません(4 つの入力)。
タンクは 1 秒で 180 度までしか回れません。真後ろを向くのに 1 秒かかります(タンクのうごかしかた)。
試してみよう
Section titled “試してみよう”< 5を< 20に変えると、どうなるでしょう。撃つ回数と当たる回数を、分析画面で見比べてみましょう"drive": "stop"を"forward"に変えると、敵に向かって進みます → 近づいて、止まって撃つ
うまくいかないとき
Section titled “うまくいかないとき”- 敵と反対を向く。 引数の順番(自分 → 敵)を確かめましょう。逆にすると、反対の向きになります
- 撃った弾が、動く敵に当たらない。 敵が動いていると、向いた先にはもういません → 動く敵に当てる
- 近づいて、止まって撃つ
- 角度の考えかた → タンクのうごかしかた