"use strict";
var WIDTH = 240;
var HEIGHT = 180;
let mScore = 0, mWY = HEIGHT / 2;
let mDY = 0, mKey = 0, mY = HEIGHT / 2;
let mGameOver;
let mWall = new Array( 8 );
function isContains( rect, x, y )
{
return( rect[ 0 ] < x && rect[ 0 ] + rect[ 2 ] > x &&
rect[ 1 ] < y && rect[ 1 ] + rect[ 3 ] > y );
}
function setWall( idx, x )
{
mWY += TUGames.UT.Rnd( 41 ) - 20;
mWY = Math.min( mWY, 140 );
mWY = Math.max( mWY, 40 );
mWall[ idx++ ] = [ x, 0 , 20, mWY - 20 ];
mWall[ idx ] = [ x, mWY + 20, 20, 160 - mWY ];
}
window.onkeydown = function()
{
mKey = -0.25;
}
window.onkeyup = function()
{
mKey = 0.25;
}
window.onload = function()
{
document.addEventListener( 'keydown', ( ev ) =>{ ev.preventDefault(); } );
document.addEventListener( 'keyup' , ( ev ) =>{ ev.preventDefault(); } );
TUGames.GX.Init( "main", WIDTH, HEIGHT, 3, -1 ); // キャンバスIDと描画領域を指定してライブラリ初期化
for( let i = 0, x = 100; i < 8; i += 2, x += 60 ){
setWall( i, x );
}
TUGames.PF.StartLoop( 30, // fpsを指定してループを開始し、更新処理と描画処理を登録
() =>{ // 更新処理
if( mGameOver ){
return;
}
mScore++;
mDY += mKey;
mY += mDY;
if( mY < 0 || mY > HEIGHT ){
mGameOver = true;
}
for( let i = 0; i < mWall.length; i++ ){
mWall[ i ][ 0 ] -= mScore / 256 + 0.25;
if( ( i & 1 ) == 1 && mWall[ i ][ 0 ] < -10 ){
setWall( i - 1, WIDTH );
}
if( isContains( mWall[ i ], 45, mY ) ){
mGameOver = true;
}
}
},
() =>{ // 描画処理
TUGames.GX.Clear(); // 設定された背景色で画面初期化
TUGames.GX.FillRect( 0, 0, WIDTH, HEIGHT, 0xffff0000 );
TUGames.GX.FillRects( mWall, 0xff00ff00 );
TUGames.GX.FillRect( 40, mY - 5, 10, 10, 0xff00ffff );
TUGames.GX.DrawString( "SCORE " + mScore, 0, 0, 0, 0xffffffff );
if( mGameOver ){
TUGames.GX.DrawString( "GAME OVER", WIDTH / 2 - 18, HEIGHT / 2 - 2, 0, 0xffffffff );
}
GL.flush(); // 描画内容を画面に反映
} );
}
戻る back