javascript

/

純粋なJavascriptでのブロック崩しの作り方⑤

純粋なJavascriptでのブロック崩しの作り方⑤ のサムネイル

やりたいこと

フレームワークやライブラリを使わず、純粋なjavascriptのみでブロック崩しを作る。

今回は第5回目となり、ゲームオーバーを実装するところまでやっていきましょう!

前回はユーザーが操作できるパドルを追加するところまでやりました↓

具体的には、下端にボールが触れた時、パドルにボールが当たらなければゲームオーバーの処理を追加します。
ではさっそくやっていきましょう!

環境

  • Google Chrome : Version: 130.0.6723.92
  • VSCode : Version : 1.90.2 (Universal)

ゲームオーバーを実装する

前回、上下左右でボールを反転させる処理を、下記のように追加したと思います。


// 水平方向の反転
if (x + dx > canvas.width - ballRadius || x + dx < ballRadius) {
  dx = -dx;
}

// 垂直方向の反転
if (y + dy > canvas.height - ballRadius || y + dy < ballRadius) {
  dy = -dy;
}

この処理で、下端に触れた時だけゲームオーバーになるようにしましょう。

水平方向の処理はそのままで、垂直方向のif節をこのように修正してみてください。


// 上端の反転
if (y + dy < ballRadius) {
  dy = -dy;
}

// 下端の反転
else if (y + dy > canvas.height - ballRadius) {
  alert("GAME OVER");
  document.location.reload();
  return;
}

下記のようになったと思います。

blockmovie7

まず上端をif節、下端の処理をif else文にしてあげます。
||で繋いでいた部分を分解しただけですね。

alert(“GAME OVER”);で下端に触れた時に、GAME OVERというアラートメッセージを追加します。
これにより、OKを押すまでコードが一時停状態になり、アニメーションが止まります。

次にdocument.location.reload();でページが再読込みされ、最初からゲームを始めれるようにします。

しかし、このままだとページがリロードする前に次のアニメーションが描画されてしまいます。
それを解決するた為に、returnで関数の処理を終わらせてあげる必要があります。
これにより、正常にリロードされるようになります。

パドルをボールに当てる

今のままだと、パドルに当たり判定がなく、永遠にゲームオーバーになってしまいます。

パドルの当たり判定を下記のように追加してあげます。


// 下端の反転
else if (y + dy > canvas.height - ballRadius) {
  // パドルに当たった場合
  if (x > paddleX && x < paddleX + paddleWidth) {
    dy = -dy;
  } else {
    alert("GAME OVER");
    document.location.reload();
    return;
  }
}

下記のようになったと思います。

blockmovie8

if (x > paddleX && x < paddleX + paddleWidth){}でパドルに当たったかどうかを判断しています。

x > paddleX でボールの中心がパドル左端より右に来てるかどうかを確かめしてます。

x < paddleX + paddleWidthでボールの中心がパドルの右端より左に来てるかどうかを確かめます。

この二つの条件を&&で繋げて、両方true、つまりパドルの中にボールがある時は、ボールを反転させるようにしています。

ボールの当たり判定の修正

現状だとボールの中心を当たり判定で使用してる為、ボールの端に当たりがありません。
先程のパドルのコードを下記のように修正してあげます。


if (x + ballRadius > paddleX && x - ballRadius < paddleX + paddleWidth){
  dy = -dy;
}

ballRadiusの値を利用することで、ボールの端にも当たり判定を追加できます!

今回は以上です。お疲れ様でした!
次回はブロックを描画させる予定です。

参考

出典: Mozilla Contributors. “純粋なJavaScriptを使ったブロック崩しゲーム”. MDN Web Docs.

この内容は、Creative Commons Attribution-ShareAlike (CC-BY-SA) 2.5(またはそれ以上)のライセンスのもとで公開されています。

webアプリ 初心者向け 備忘録