今日 学ぶこと、学んだこと ── ブロックくずし
ISSUE #1 の 読みもの。さきに 読んでも、あとで 読んでも いい。
ざひょうや へんすうの きほんは ISSUE #0 の「学ぶ」に くわしく 書いてある。
ここでは この ゲームで あたらしく 出てくる「なぜ」に こたえる。
ボールの 箱は 4つ。ばしょの ballX ballY と、むきの ballDX ballDY。D は「どれだけ うごくか」の D。まいかい、ばしょに むきを たす——ballX = ballX + ballDX——それだけで ボールは すすむ。むきが プラスなら 右(下)へ、マイナスなら 左(上)へ。マイナスの 数も りっぱな「はやさ」なのが 今日の 発見。
ballDX = -ballDX と 書くと、3 なら -3 に、-3 なら 3 に なる。たった 1行で、右に とんでいた ボールが 左に とぶ。左右の かべでは よこの むき(DX)を、上の かべと パドルでは たての むき(DY)を ぎゃくに して いる。図1 はねかえり=むきの 数字の ぎゃく。かべは 何も して いない
| へんすう | 変えると | なぜ 変わるのか |
|---|---|---|
| paddleSpeed | パドルの はやさ | キーを おしている あいだ、1コマごとに paddleX に たす 数だから |
| paddleWidth | パドルの ながさ | かく ときの よこはばと、あたり判定の「どこまでが パドルか」の 両方に つかわれるから。長い ほど 受けやすい |
| ballSpeed | ボールの はやさ | さいしょの ballDX・ballDY に この数が 入るから。はねかえっても「はやさ」は 変わらず、むきだけ 変わる |
| brickRows | ブロックの だんすう | ブロックを ならべる くりかえしの 回数に つかわれるから。4 なら 8こ × 4だん = 32こ |
| paddleColor | パドルの 色 | かく 直前に えんぴつ(pen)に セットされる 色だから |
| ballColor | ボールの 色 | 同じく、ボールを かく 前に えんぴつに セットされるから |
| bgColor | はいけいの 色 | まいかい がめん ぜんぶを ぬりつぶす 色だから。パーツ6は これを「うすい 色」に して ざんぞうを 作る |
ballDY を ぎゃくに して いるから。ballDY > 0(下に むかっている とき だけ)という 条件も ついて いる。これが ないと、パドルの 中で 何度も はねて ふるえて しまう。isHit() の 中の 2つの if が、よこの はんいと たての はんいを 1つずつ しらべて いる。6 を たしたり ひいたり して いるのは、ボールの はんけい ぶんだけ はんいを 広げる ため。図2 まるい ものは きょりで、四角い ものは はんいで。かたちに あわせて 判定を えらぶ
rest(のこり)に、あたって いない ものだけ push して、さいごに bricks = rest。#0 で おかしを けした ときと 同じ やりかた。bricks.length は リストの こすう。0 に なったら「もう ない」ので gameover = true。draw() の さいごに「gameover が true なら CLEAR! と かく」が あるから、文字が 出る。ballY > 400(がめんの 下はしを こえた)とき、ミスを 1 たして、ばしょを まんなかに 書きもどして いるから。ballDY = -Math.abs(ballDY) の Math.abs() は「かならず プラスに する」どうぐ。その 前に マイナスを つけるので、ボールは かならず 上むきで 再スタートする。pen.font を 64px に して から かいて いるから。#0 と 同じ しくみ。createOscillator() が「決まった はやさで ふるえる 電気」を 作り、660 が 高さ、g.gain.value が 大きさ。置き場Dに beep を 書くから、こわした しゅんかんだけ 鳴る。miss に 数えて いる。置き場Bで まいかい「miss は 3 いじょう?」と しらべて、なったら gameover を true に するだけ。ballDX = ballDX * 1.07 は「いまの はやさの 1.07ばいに する」。かけ算なので、こわす たびに ふえかたも 大きく なる(3 → 3.21 → 3.43…)。たし算との ちがいを 感じて みよう。myName を 作って、fillText で かいて いるだけ。スコアと 同じ しくみ。