/
純粋な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;
}
下記のようになったと思います。
まず上端を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;
}
}
下記のようになったと思います。
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(またはそれ以上)のライセンスのもとで公開されています。