タンクのうごかしかた
エンジンの担当 この章は、タンクの動きの決まりです。速さや回る速さは、あなたには変えられません。どう動かすかを決めるのは、あなたの担当です(4 つの入力)。
タンクにできることは、たった 4 つです。
| したいこと | 命令 |
|---|---|
| 進む・下がる・止まる | drive |
| 向きを変える | steer |
| 撃つ | fire |
| バリアをはる | barrier |
この 4 つを、1 秒に 10 回、タンクに伝えます。
4 つをまとめて返す
Section titled “4 つをまとめて返す”あなたが書くのは update という名前の関数ひとつです。
その中で 4 つを決めて、まとめて返します。
def update(state): return { "drive": "forward", # 前に進む "steer": 0.0, # 右を向く "fire": True, # 撃つ "barrier": False, # バリアははらない }これで「右を向いて、前に進みながら、撃ちつづける」タンクになります。
たった 1 つの return で、もうタンクは動きます。
drive — 進む・下がる・止まる
Section titled “drive — 進む・下がる・止まる”drive に入れられるのは、次の 3 つの言葉だけです。
| 書くこと | どうなる | 速さ |
|---|---|---|
"forward" | 前に進む | 3.0 マス/秒 |
"backward" | 後ろに下がる | 1.5 マス/秒 |
"stop" | その場で止まる | 0 |
後ろに下がるのは、前に進むより遅い(ちょうど半分)ことをおぼえておいてください。 にげるときに「後ろに下がる」を選ぶと、思ったより追いつかれます。 くるっと向きを変えて前に進むほうが速いことが多いです。
steer — 向きを変える
Section titled “steer — 向きを変える”steer には 向きたい角度そのもの を入れます。
「右に 30 度まわる」ではなく「30 度の方を向く」です。ここをまちがえる人がとても多いところです。
算数のグラフと違って、下に行くほど Y が大きいので、90 度が「下」になります。
画面の左上が (0, 0) です。
def update(state): # 敵のいる方を向く want = angle_to(state.me.x, state.me.y, state.enemy.x, state.enemy.y) return {"drive": "forward", "steer": want, "fire": True, "barrier": False}angle_to は「ここから、あそこ」を向く角度を出してくれる道具です。
自分で計算しなくて大丈夫です。
まわる速さにはかぎりがある
Section titled “まわる速さにはかぎりがある”すぐにその向きになるわけではありません。 タンクは 1 秒でおよそ 180 度 までしかまわれません。半回転に 1 秒かかります。
つまり「まうしろを向く」には 1 秒かかります。 その 1 秒のあいだに、相手は 3 マス動けます。 向きを変えるのは、思っているよりずっと高くつくのです。
体と砲身はいっしょにまわる
Section titled “体と砲身はいっしょにまわる”戦車のおもちゃだと、砲塔だけくるくるまわりますが、このゲームは**違います**。
体と砲身はくっついていて、いっしょにまわります。 だから「進む向き」と「撃つ向き」は、いつも同じです。
これはこのゲームのいちばん大事なルールのひとつです。
- 敵を狙うと、敵のほうへ進むことになる
- にげながら撃つことは、基本的にできない
- 「狙う」と「にげる」は、いつもどちらかを選ぶことになる
作戦を考えるとき、いちばん悩むのがここです。
タンクの数字(まとめ)
Section titled “タンクの数字(まとめ)”| 項目 | 数 |
|---|---|
| HP(体力) | 3。3 回当たると負け |
| 大きさ | 半径 0.40 マス(さしわたし 0.8 マス) |
| 前に進む速さ | 3.0 マス/秒 |
| 後ろに下がる速さ | 1.5 マス/秒 |
| まわる速さ | 1 秒でおよそ 180 度 |
| つぎに撃てるまで | 1.2 秒 |
加速はありません。"forward" と書いたそのしゅんかんから、いきなり 3.0 マス/秒です。
止まるときも、するするとは止まりません。すぐ止まります。