近づいて、止まって撃つ
やりたいこと
Section titled “やりたいこと”敵が遠いあいだは近づき、ちょうどいい距離になったら止まって撃つタンクを作ります。
かんたんブロックで作る
Section titled “かんたんブロックで作る”第 3 章までに手に入る部品で作れます。
「📏 敵が近い(ふつう)」(6 マスより近い)なら止まり、そうでなければ進みます。「そうでなければ」は第 3 章で手に入ります。
ブロックは、上から順に、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) d = distance(me.x, me.y, en.x, en.y) 合っている = abs(angle_diff(want, me.angle)) < 5
# 5 マスより遠いあいだは進む。近づいたら止まる。 if d > 5: drive = "forward" else: drive = "stop"
return {"drive": drive, "steer": want, "fire": 合っている, "barrier": False}distanceが、2 点の距離(マス)を返します- 「
dが 5 より大きいか」で、driveを切り替えます - 向きは、いつも敵のほうへ直しつづけます
体と砲身はいっしょに回ります。 そのため「近づくあいだも、敵のほうを向いている」ことになり、進みながら撃てます。 逆に、逃げながら撃つことは、基本的にできません(タンクのうごかしかた)。
試してみよう
Section titled “試してみよう”5を3や8に変えてみましょう。近づきすぎるほど、敵の弾も当たりやすくなります- 敵の弾に当たる回数は、分析画面の「被弾ヒートマップ」で見られます
うまくいかないとき
Section titled “うまくいかないとき”- 止まらずに、ずっと動く。
d > 5の向き(>と<)を確かめましょう - 壁にひっかかって、進めない。 直線に進むだけでは、壁をよけられません → 見えない敵を探す