前端的朋友们,福利来了,今天小编给大家带来了一款经典的H5实现的俄罗斯方块源码,请看图:
测试视频
全部源码下载:
https://www.githubs.xyz/y168.html
游戏运行
找到index.html直接运行,经典的俄罗斯方块,使用canvas实现
项目截图
部分js代码
function keyPress( key ) {
switch ( key ) {
case 'left':
if ( valid( -1 ) ) {
--currentX;
}
break;
case 'right':
if ( valid( 1 ) ) {
++currentX;
}
break;
case 'down':
if ( valid( 0, 1 ) ) {
++currentY;
}
break;
case 'rotate':
var rotated = rotate( current );
if ( valid( 0, 0, rotated ) ) {
current = rotated;
}
break;
case 'drop':
while( valid(0, 1) ) {
++currentY;
}
tick();
break;
}
}
// checks if the resulting position of current shape will be feasible
function valid( offsetX, offsetY, newCurrent ) {
offsetX = offsetX || 0;
offsetY = offsetY || 0;
offsetX = currentX + offsetX;
offsetY = currentY + offsetY;
newCurrent = newCurrent || current;
for ( var y = 0; y < 4; ++y ) {
for ( var x = 0; x < 4; ++x ) {
if ( newCurrent[ y ][ x ] ) {
if ( typeof board[ y + offsetY ] == 'undefined'
|| typeof board[ y + offsetY ][ x + offsetX ] == 'undefined'
|| board[ y + offsetY ][ x + offsetX ]
|| x + offsetX < 0
|| y + offsetY >= ROWS
|| x + offsetX >= COLS ) {
if (offsetY == 1 && freezed) {
lose = true; // lose if the current shape is settled at the top most row
document.getElementById('playbutton').disabled = false;
}
return false;
}
}
}
}
return true;
}
function playButtonClicked() {
newGame();
document.getElementById("playbutton").disabled = true;
}
function newGame() {
clearAllIntervals();
intervalRender = setInterval( render, 30 );
init();
newShape();
lose = false;
interval = setInterval( tick, 400 );
}
function clearAllIntervals(){
clearInterval( interval );
clearInterval( intervalRender );
}
// code download : gitee.com/hadluo/html_code.git
完整全部文件找小编
结尾语
我是分享好物+教程+源码的老罗,欢迎关注!