javascript(テトリス005_開始と終了)
■ピースの開始位置とゲーム終了時の処理について。
テトリスは上からピースが降ってきて、上まで積みあがると終わりになる。この「上」をどういった処理にするか検討してなかったので、今回はまだ3マスでそれを考える。
ピースの形状から横向きで始めれば、4×2(横×縦)のマスがあれば十分。4マスでも同じ。
開始位置としては、下の肌色のマスにする。ここでピースを発生させて、そこから1マス下に落ちることで、htmlで定義しているマスに含まれる。これより上でピースを発生させようとすると、1マス落ちてもhtmlの定義外になるのでエラーが出る。
次に積みあがった時の処理。3-6のマスが既に積まれていた時に、新しいピースが発生しどこかのマスに重なるようであれば、上まで積みあがったと見なす。上の図なら、緑色の部分が積みあがっている部分で、赤が新しいピース。重なっている部分が5(茶色部分)。
javascript内の変数として、マスが埋まっている状態かの配列(board)をデータとして持っているので、それで判定。
コードは下のような感じ。tempblock が新しく作られるピース。tempblock[i]には初期値として、-7, -6, -5, -4, 3, 4, 5, 6 のいずれかになる。
for (let i = 0; i < tempblock.length; i++) {
if (board[tempblock[i]] === 1) {
console.log("end");
clearInterval(timer);
document.removeEventListener('keypress', keypress_event);
for (let i = 0; i < tempblock.length; i++) {
if (tempblock[i] >= 0) {
$('.piece' + i).css('left', $('.squ' + tempblock[i]).position().left + 'px');
$('.piece' + i).css('top', $('.squ' + tempblock[i]).position().top + 'px');
$('.piece' + i).css('background-color', 'Grey');
}
}
for (let i = 0; i < board.length; i++) {
if (board[i] === 1) {
$('.squ' + i).css('background-color', 'Grey');
}
}
}
}
終了時には、setInterval や キーボードでの入力を解除し、今まで積みあがったブロックを灰色にしてみる。実行結果が下のもの(まだバグあり)。
次こそ4マスへの拡張を試してみたい。