LEARN

今日 学ぶこと、学んだこと ── シューティング

ISSUE #2 の 読みもの。ざひょうと へんすうは ISSUE #0、はねかえりは ISSUE #1 に くわしい。
ここでは「たくさんの 弾と てきを どうやって あつかうか」に こたえる。

Chapter 1 / Lists第1章 リストの しくみ

弾は 何発も とぶし、てきも 何体も いる。1つずつ へんすうを 作っていたら きりが ない。そこで bullets = [] という リスト(ならんだ 箱)を 1つ 作り、弾を うつたびに push で 1つ たす。てきも 同じ。ISSUE #0 の おかし(items)と まったく 同じ 考えかたで、この ゲームは それを 2本 つかう。

bullets という名前の リスト(箱の 列) {{x:240, y:300}} {{x:180, y:250}} {{x:300, y:120}} push で ふえる→ 弾を うつ = リストに 1つ たす。がめんの そとに 出た 弾は、のこりだけ もちこして すてる。 てきも おなじ。ゲームは「リストの 出し入れ」で できている。

図1 push で ふえて、rest(のこり)で へる。リストの 出し入れが ゲームの 正体

Chapter 2 / Variables第2章 7つの 数字の「なぜ」

へんすう変えるとなぜ 変わるのか
playerSpeedきたいの はやさ1コマごとに playerX に たす 数だから
bulletSpeed弾の はやさ1コマごとに 弾の y から ひく 数だから。ひき算 = 上へ(ISSUE #0 第1章)
enemySpeedてきの はやさ1コマごとに てきの y に たす 数だから
appearTimeてきの 出る 間かくtime % appearTime === 0 の ときに 出すから。小さいほど ひんぱん
playerColor / bulletColorきたい・弾の 色かく 直前に えんぴつに セットされるから
bgColorはいけいの 色まいかいの ぬりつぶしの 色。パーツ6の ざんぞうの たねでも ある
置き場Dは「てきを たおした とき」。#0の「とった とき」、#1の「こわした とき」と 同じ やくわり。

Chapter 3 / How it works第3章 しくみを ぜんぶ よむ

なぜ スペースキーで 弾が 出るの?
スペースキーの 名前は " "(空白 1文字)。keys[" "] が true の あいだ、shoot() が 弾を push するから。ついでに preventDefault の 条件にも スペースが たしてある。ブラウザは スペースで ページを スクロール しようと するからだ。
なぜ おしっぱなしでも れんしゃに ならないの?
time % 10 === 0(10コマに 1回だけ)という 条件が ついて いるから。1びょうは 60コマ なので、どんなに がんばっても 1びょうに 6発まで。10 を 小さく すると れんしゃが はやく なる——これも appearTime と 同じ「あまりの わざ」。
なぜ 弾が てきに あたったと わかるの?
てき 1体 ごとに、ぜんぶの 弾との きょりを しらべて いるから。isHit() の 中に 弾の くりかえしが あり、それを よぶ moveEnemies() は てきの くりかえし。くりかえしの 中の くりかえし(二重ループ)が、この ゲームの いちばんの 新しい わざ。きょりの 計算は ISSUE #0 の 三平方と まったく 同じ。
あたった 弾が きえるのは なぜ?
あたった しゅんかんに その 弾の y を -100(がめんの ずっと そと)に して いるから。つぎの moveBullets() の「がめんの そとの 弾は すてる」しくみが、自動で ひろって すててくれる。1つの しくみを つかいまわす、プログラムらしい 書きかた。
なぜ のがすと miss が ふえるの?
てきの y が 400(がめんの 下はし)を こえたら、rest に 入れずに miss を 1 たして いるから。たおした・のがした・まだいる の 3つに 分けて、「まだいる」だけを もちこす。
コラム:ゲームは「リストの 管理」で できている
うつ=push、あたる=しらべる、きえる=すてる。 どんなに 大きな ゲームも、やっている ことは リストへの 出し入れの くみあわせ。 これが わかると、マインクラフトの インベントリも、ツムツムの 盤面も、同じ 目で 見えてくる。

Chapter 4 / Why the parts work第4章 パーツの「なぜ」

パーツ1〜2・5〜6は #0・#1と 同じ?
そのとおり。スコア(font)、音(ふるえと gain)、なまえ(文字の 箱)、ざんぞう(うすい ぬりつぶし)は、どの ゲームでも 同じ しくみで 動く。一度 わかった パーツは どこへでも 持っていける——それが 部品の 力。
パーツ3 なぜ のがし3回で おわるの?
しくみの ぶぶんが miss を 数えて いるので、置き場Bで「miss は 3 いじょう?」と まいかい しらべるだけ。
パーツ4 なぜ 10びょう ごとに はやく なるの?
60 × 10 = 600。time % 600 === 0 は 600、1200、1800…の しゅんかんだけ true に なる。そこで enemySpeed に 1 たす。#1の「こわすたび かけ算」との ちがい(たし算は 一定、かけ算は 加速)も くらべて みよう。
おかわりミッションは、大きい てき=メモ(hp)、タイムアタック=数とり器、 ジグザグ敵=#1の はねかえり——ぜんぶ ここまでの 知しきで とける。