html俄罗斯方块

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>俄罗斯方块</title>
    <style>
        body{padding:0;margin:0;}
        .gamediv{width: 250px;height: 420px;}
        #maindiv{width:250px;height:400px;border:1px solid #95a0aa;}
        #tableid{borderColor:white;width:100%; height:100%; border-collapse: collapse;}
        #tableid td{ border: solid white 1px;}
    </style>
</head>
<body>
<div id="maindiv"><table id="tableid"></table><span id="fensId">0分</span></div>
<script src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
<script>

//---------------------------------------生成地图--------------------------------
var tablee = document.getElementById("tableid");
for(var tr =0;tr<18;tr++){
   var tre=document.createElement("tr");
   for(var td=0;td<12;td++){
       tre.appendChild(document.createElement("td"));
   }
    tablee.appendChild(tre);
}

//--------------------------------图形库---------------------------------------
var icon=[
    [{x:0,y:5},{x:1,y:5},{x:2,y:5},{x:3,y:5}],   //0:  |
    [{x:0,y:4},{x:0,y:5},{x:0,y:6},{x:0,y:7}],   //1:   ---
    [{x:0,y:5},{x:0,y:6},{x:1,y:5},{x:1,y:6}],   //2:  田
    [{x:0,y:5},{x:1,y:5},{x:2,y:5},{x:2,y:6}],   //3:  L
    [{x:0,y:5},{x:0,y:6},{x:1,y:6},{x:2,y:6}],   //4:  7
    [{x:0,y:4},{x:1,y:4},{x:1,y:5},{x:1,y:6}],   //5:L__
    [{x:0,y:4},{x:0,y:5},{x:1,y:5},{x:1,y:6}],   //6:z
    [{x:0,y:5},{x:1,y:5},{x:1,y:6},{x:2,y:6}],   //7:L7
    [{x:2,y:5},{x:1,y:5},{x:1,y:6},{x:0,y:6}]    //8:s
];
//-----------------------------游戏配置参数---------------------------------------
var ii=0;   //图形号;
var i=0;     //下落的最初数
var j=0;     //左右偏移的数
var score=0;
var Frequency =100;    //游戏检测频率
var bottomnumber = 17;  //探测是否到最低
var mainThread =setInterval(mainGame,Frequency);   //启动游戏
var dropThread  =setInterval(dropFunction,1000);  //下落线程
var safeChange=true;
var gamelife=true;
var goon = false;
var dx001,dx002,dx003,dx004, dy001,dy002,dy003,dy004;
//------------------------------------------游  戏  主  程   序-------------------------

function mainGame(){
    safeChange=true;
    dx001 = icon[ii][0].x+i;   //行 往下移!
    dx002 = icon[ii][1].x+i;
    dx003 = icon[ii][2].x+i;
    dx004 = icon[ii][3].x+i;

    dy001 = icon[ii][0].y+j;    //列 键盘控制左右!
    dy002 = icon[ii][1].y+j;
    dy003 = icon[ii][2].y+j;
    dy004 = icon[ii][3].y+j;

    if(safeChange){
        $(".vigour").removeAttr("class").css("background","transparent");
        $($("tr")[dx001]).find("td").eq(dy001).attr("class","vigour").css("background","red");
        $($("tr")[dx002]).find("td").eq(dy002).attr("class","vigour").css("background","red");
        $($("tr")[dx003]).find("td").eq(dy003).attr("class","vigour").css("background","red");
        $($("tr")[dx004]).find("td").eq(dy004).attr("class","vigour").css("background","red");
    }
    if(dx001>bottomnumber-1 || dx002>bottomnumber-1 || dx003>bottomnumber-1 || dx004>bottomnumber-1 ){
        if(gamelife)nowicon();
        return false;
    }
    if(($($("tr")[dx001+1]).find("td").eq(dy001).attr("class")=="none") ||($($("tr")[dx002+1]).find("td").eq(dy002).attr("class")=="none")||($($("tr")[dx003+1]).find("td").eq(dy003).attr("class")=="none")||($($("tr")[dx004+1]).find("td").eq(dy004).attr("class")=="none")){
        if(gamelife)nowicon();
        return false;
    }

};


//---------------------------下落后检查是否有消除----------------

function downloadcheck(){
    $("tr").each(function(e){
        var number = 0;
        $($("tr")[e]).find("td").each(function(){
            if($(this).attr("class")=="none"){
                if(e!=0){
                    number++;
                }else{
gamelife=false;
clearInterval(dropThread);
clearInterval(mainThread);
$(".vigour").attr("class","none").css("background","#95a0aa");
                    alert("Game Over!");
alert("键盘失效,请用鼠标刷新");
                    return false;
                }

            }
        });
        if(number==12){
            $($("tr")[e]).remove();
            var tre="<tr>";
            for(var td=0;td<12;td++){
                tre+="<td></td>"
            }
            $("tr").eq(0).before(tre+"</tr>");
            $("#fensId").html(++score+"分");
        }

    });
}

//------------------------------下降频率线程-----------------------
 function  dropFunction(){
    if(i>bottomnumber){
        nowicon();
    }else{
        i++;
    }
}
//---------------------------方块停止后的事件------------------------
function nowicon(){
    safeChange=false;
    clearInterval(mainThread);
    $(".vigour").attr("class","none").css("background","#95a0aa");
    downloadcheck();
    ii=Math.floor(Math.random()*(icon.length));
    i=0;
    j=0;
    mainThread =setInterval(mainGame,Frequency);
}

//------------------------------键盘事件-------------------------
    $(document).keydown(function(e){
        if(!gamelife)return false;
        switch(e.keyCode){
            case  37://左
               if(($($("tr")[dx001]).find("td").eq(dy001-1).attr("class")=="none")||($($("tr")[dx002]).find("td").eq(dy002-1).attr("class")=="none")||($($("tr")[dx003]).find("td").eq(dy003-1).attr("class")=="none")||($($("tr")[dx004]).find("td").eq(dy004-1).attr("class")=="none")){
               }else{
                   var y001 = icon[ii][0].y+j;
                   var y002 = icon[ii][1].y+j;
                   var y003 = icon[ii][2].y+j;
                   var y004 = icon[ii][3].y+j;
                   if(y001>0 && y002>0 && y003>0 && y004>0 ){
                       --j;
                   }
               }
                break;
            case  38://上
                    if(ii==0){
                        ii=1;
                    }else if(ii==1){
                        ii=0;
                    }else if(ii==3){
                        ii=4;
                    }else if(ii==4){
                        ii=5;
                    }else if(ii==5){
                        ii=3;
                    }else if(ii==6){
                        ii=7;
                    }else if(ii==7){
                        ii=8;
                    }else if(ii==8){
                        ii=6;
                    }
                leftBoundary();
                rightBoundary();

                break;
            case  39://右
             if(($($("tr")[dx001]).find("td").eq(dy001+1).attr("class")=="none")||($($("tr")[dx002]).find("td").eq(dy002+1).attr("class")=="none")||($($("tr")[dx003]).find("td").eq(dy003+1).attr("class")=="none")||($($("tr")[dx004]).find("td").eq(dy004+1).attr("class")=="none")){
             }else{
                 var y001 = icon[ii][0].y+j;
                 var y002 = icon[ii][1].y+j;
                 var y003 = icon[ii][2].y+j;
                 var y004 = icon[ii][3].y+j;
                 if(y001<11 && y002<11 && y003<11 && y004<11 ){
                     ++j;
                 }
            }
                break;
            case  40://下
                if(($($("tr")[dx001+1]).find("td").eq(dy001).attr("class")=="none") ||($($("tr")[dx002+1]).find("td").eq(dy002).attr("class")=="none")||($($("tr")[dx003+1]).find("td").eq(dy003).attr("class")=="none")||($($("tr")[dx004+1]).find("td").eq(dy004).attr("class")=="none")){
                    nowicon();
                }else if(i<bottomnumber){
                    clearInterval(mainThread);
                    i++;
                    mainGame();
                    mainThread =setInterval(mainGame,Frequency)
                }
                break;
        }

    });

//防止变换的时候越界(左边)
function leftBoundary(){

    var y001 = icon[ii][0].y+j;
    var y002 = icon[ii][1].y+j;
    var y003 = icon[ii][2].y+j;
    var y004 = icon[ii][3].y+j;

    if(y001<0 || y002<0 || y003<0 || y004<0 ){
        y001  ++;
        y002  ++;
        y003  ++;
        y004  ++;
        safeChange=false;
        j++;
        dy001=y001;
        dy002=y002;
        dy003=y003;
        dy004=y004;
        leftBoundary();
    }

}

//防止变换的时候越界(右边)
function rightBoundary(){
    var y001 = icon[ii][0].y+j;
    var y002 = icon[ii][1].y+j;
    var y003 = icon[ii][2].y+j;
    var y004 = icon[ii][3].y+j;

    if(y001>11 || y002>11 || y003>11 || y004>11 ){
        y001  --;
        y002  --;
        y003  --;
        y004  --;
        safeChange=false;
        j--;
        dy001=y001;
        dy002=y002;
        dy003=y003;
        dy004=y004;
        rightBoundary();
    }
}

</script>
</body>
</html>


转载于:https://my.oschina.net/u/1861097/blog/414095

以下是 HTML 实现俄罗斯方块的基本代码,包括游戏界面和基本逻辑: ```html <!DOCTYPE html> <html> <head> <title>Tetris</title> <style> #container { width: 300px; height: 600px; border: 1px solid black; position: relative; } .block { width: 30px; height: 30px; border: 1px solid black; position: absolute; } </style> </head> <body onload="startGame()"> <div id="container"></div> <script> var container = document.getElementById("container"); var blocks = []; var currentBlock = null; var currentInterval = null; var blockTypes = [ [[0, 0], [0, 1], [1, 0], [1, 1]], [[0, 0], [0, 1], [0, 2], [0, 3]], [[0, 0], [0, 1], [0, 2], [1, 2]], [[0, 0], [1, 0], [1, 1], [2, 1]], [[0, 1], [1, 0], [1, 1], [2, 0]], [[0, 0], [1, 0], [2, 0], [2, 1]], [[0, 1], [1, 1], [2, 0], [2, 1]] ]; function createBlock() { var type = Math.floor(Math.random() * 7); var shape = blockTypes[type]; var block = []; for (var i = 0; i < shape.length; i++) { var x = shape[i][0]; var y = shape[i][1]; var div = document.createElement("div"); div.className = "block"; div.style.left = (x * 30) + "px"; div.style.top = (y * 30) + "px"; container.appendChild(div); block.push(div); } return block; } function moveBlock() { for (var i = 0; i < currentBlock.length; i++) { var div = currentBlock[i]; var x = parseInt(div.style.left); var y = parseInt(div.style.top); div.style.top = (y + 30) + "px"; } } function checkCollision() { for (var i = 0; i < currentBlock.length; i++) { var div = currentBlock[i]; var x = parseInt(div.style.left); var y = parseInt(div.style.top); if (y >= 570) { return true; } for (var j = 0; j < blocks.length; j++) { var block = blocks[j]; for (var k = 0; k < block.length; k++) { var b = block[k]; var bx = parseInt(b.style.left); var by = parseInt(b.style.top); if (x == bx && y + 30 == by) { return true; } } } } return false; } function addBlock() { for (var i = 0; i < currentBlock.length; i++) { var div = currentBlock[i]; blocks.push(currentBlock); } currentBlock = null; } function checkRows() { for (var i = 0; i < 20; i++) { var row = []; for (var j = 0; j < blocks.length; j++) { var block = blocks[j]; for (var k = 0; k < block.length; k++) { var b = block[k]; var x = parseInt(b.style.left); var y = parseInt(b.style.top); if (y == i * 30) { row.push(b); } } } if (row.length == 10) { for (var j = 0; j < row.length; j++) { container.removeChild(row[j]); } blocks = blocks.filter(function(block) { return row.indexOf(block) == -1; }); for (var j = 0; j < blocks.length; j++) { var block = blocks[j]; for (var k = 0; k < block.length; k++) { var b = block[k]; var x = parseInt(b.style.left); var y = parseInt(b.style.top); if (y < i * 30) { b.style.top = (y + 30) + "px"; } } } i--; } } } function startGame() { currentBlock = createBlock(); currentInterval = setInterval(function() { if (!checkCollision()) { moveBlock(); } else { clearInterval(currentInterval); addBlock(); checkRows(); startGame(); } }, 500); } </script> </body> </html> ``` 该代码利用 HTMLJavaScript 实现了一个基本的俄罗斯方块游戏,包括随机生成方块、方块下落、碰撞检测、方块消除等基本功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值