コンテンツにスキップ

タンクのうごかしかた

エンジンの担当 この章は、タンクの動きの決まりです。速さや回る速さは、あなたには変えられません。どう動かすかを決めるのは、あなたの担当です(4 つの入力)。

タンクにできることは、たった 4 つです。

したいこと命令
進む・下がる・止まるdrive
向きを変えるsteer
撃つfire
バリアをはるbarrier

この 4 つを、1 びょうに 10 かい、タンクにつたえます。

あなたが書くのは update という名前の関数かんすうひとつです。 その中で 4 つを決めて、まとめて返します。

def update(state):
return {
"drive": "forward", # 前に進む
"steer": 0.0, # 右を向く
"fire": True, # 撃つ
"barrier": False, # バリアははらない
}

これで「右を向いて、前に進みながら、撃ちつづける」タンクになります。 たった 1 つの return で、もうタンクは動きます。

drive に入れられるのは、次の 3 つの言葉ことばだけです。

書くことどうなる速さ
"forward"前に進む3.0 マス/秒
"backward"後ろに下がる1.5 マス/秒
"stop"その場で止まる0

後ろに下がるのは、前に進むよりおそ(ちょうど半分)ことをおぼえておいてください。 にげるときに「後ろに下がる」をえらぶと、思ったよりいつかれます。 くるっときを変えて前に進むほうが速いことが多いです。

steer には きたい角度かくどそのもの を入れます。 「右に 30 度まわる」ではなく「30 度の方を向く」です。ここをまちがえる人がとても多いところです。

角度は0度が右、90度が下、180度が左、270度が上。算数のグラフと違い下に行くほど角度が大きい図

算数さんすうのグラフとちがって、下に行くほど 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 は「ここから、あそこ」を向く角度を出してくれる道具どうぐです。 自分で計算しなくて大丈夫だいじょうぶです。

すぐにその向きになるわけではありません。 タンクは 1 秒でおよそ 180 度 までしかまわれません。半回転に 1 秒かかります。

つまり「まうしろを向く」には 1 秒かかります。 その 1 秒のあいだに、相手あいては 3 マス動けます。 向きを変えるのは、思っているよりずっとたかくつくのです。

戦車せんしゃのおもちゃだと、砲塔ほうとうだけくるくるまわりますが、このゲームは**ちがいます**。

体と砲身ほうしんはくっついていて、いっしょにまわります。 だから「進む向き」と「撃つ向き」は、いつもおなじです。

これはこのゲームのいちばん大事なルールのひとつです。

  • 敵をねらうと、敵のほうへすすむことになる
  • にげながらつことは、基本的きほんてきにできない
  • 「狙う」と「にげる」は、いつもどちらかをえらぶことになる

作戦を考えるとき、いちばんなやむのがここです。

項目こうもく
HP(体力たいりょく3。3 回当たると
大きさ半径はんけい 0.40 マス(さしわたし 0.8 マス)
前に進む速さ3.0 マス/秒
後ろに下がる速さ1.5 マス/秒
まわる速さ1 秒でおよそ 180 度
つぎに撃てるまで1.2 秒

加速かそくはありません。"forward" と書いたそのしゅんかんから、いきなり 3.0 マス/秒です。 止まるときも、するするとは止まりません。すぐ止まります。