<html>
<head>
<title>俄罗斯方块</title>
<script>
var rows=20,cols=14; //行数列数
var downId=null; //向下ID
var squareFix="down"; //方块方向
var squareNum; //方块编号
var square=new Array(); //方块坐标
var nextSquareNum; //下一方块编号
//创建表格
function CreateTable()
{
var table="<table border=1>";
table+="<tr>";
table+="<td>";
table+="<table bgColor='black'>";
for(i=1;i<=rows;i++)
{
table+="<tr>";
for(j=1;j<=cols;j++)
{
table+="<td bgColor='black' width='20' id="+i+"_"+j+"> </td>";
}
table+="</tr>";
}
table+="</table>";
table+="</td>";
table+="<td align='center' bgColor='black'>";
table+="<table>";
for(l=1;l<=13;l++)
{
table+="<tr>";
for(j=1;j<=6;j++)
{
if(l>8&&l<=10&&j==1)
{
if(l==9)
table+="<td bgColor='#FFFFFF' colspan='6' width='20' id="+l+"|"+j+">行</td>";
if(l==10)
table+="<td bgColor='#FFFFFF' colspan='6' width='20' id="+l+"|"+j+">列</td>";
}
else if((l>0&&l<9)||(l>10&&l<=rows))
table+="<td bgColor='black' width='20' id="+l+"|"+j+"> </td>";
}
table+="</tr>";
}
table+="</table>";
table+="<p><input type='button' value='开始游戏' οnclick='Play()'></p>";
table+="<input type='button' value='暂停游戏' οnclick='clearInterval("+downId+")'>";
table+="</td>";
table+="</tr>";
table+="</table>";
document.getElementById('tab').innerHTML=table;
}
//初始化当前方块
function InitSquare()
{
switch(squareNum)
{
//□
//■
//■
//■
case 1:
square[0]="1_7";
square[1]="2_7";
square[2]="3_7";
square[3]="4_7";
break;
//□
//■
//■■
case 2:
square[0]="1_7";
square[1]="2_7";
square[2]="3_7";
square[3]="3_8";
break;
// □
// ■
//■■
case 3:
square[0]="1_7";
square[1]="2_7";
square[2]="3_7";
square[3]="3_6";
break;
//□■
// ■■
case 4:
square[0]="1_7";
square[1]="1_8";
square[2]="2_8";
square[3]="2_9";
break;
// □■
//■■
case 5:
square[0]="1_7";
square[1]="1_8";
square[2]="2_6";
square[3]="2_7";
break;
//□■
//■■
case 6:
square[0]="1_7";
square[1]="1_8";
square[2]="2_7";
square[3]="2_8";
break;
//□■■
// ■
case 7:
square[0]="1_6";
square[1]="1_7";
square[2]="1_8";
square[3]="2_7";
break;
}
}
//显示下一个方块
function ShowNextSquare()
{
for(i=1;i<5;i++)
{
for(j=1;j<7;j++)
{
document.getElementById(i+"|"+j).bgColor='black';
}
}
var color=ChooseColor(nextSquareNum);
switch(nextSquareNum)
{
//□
//■
//■
//■
case 1:
document.getElementById(1+"|"+3).bgColor=color;
document.getElementById(2+"|"+3).bgColor=color;
document.getElementById(3+"|"+3).bgColor=color;
document.getElementById(4+"|"+3).bgColor=color;
break;
//□
//■
//■■
case 2:
document.getElementById(1+"|"+3).bgColor=color;
document.getElementById(2+"|"+3).bgColor=color;
document.getElementById(3+"|"+3).bgColor=color;
document.getElementById(3+"|"+4).bgColor=color;
break;
// □
// ■
//■■
case 3:
document.getElementById(1+"|"+4).bgColor=color;
document.getElementById(2+"|"+4).bgColor=color;
document.getElementById(3+"|"+4).bgColor=color;
document.getElementById(3+"|"+3).bgColor=color;
break;
//□■
// ■■
case 4:
document.getElementById(1+"|"+3).bgColor=color;
document.getElementById(1+"|"+4).bgColor=color;
document.getElementById(2+"|"+4).bgColor=color;
document.getElementById(2+"|"+5).bgColor=color;
break;
// □■
//■■
case 5:
document.getElementById(1+"|"+4).bgColor=color;
document.getElementById(1+"|"+5).bgColor=color;
document.getElementById(2+"|"+3).bgColor=color;
document.getElementById(2+"|"+4).bgColor=color;
break;
//□■
//■■
case 6:
document.getElementById(1+"|"+3).bgColor=color;
document.getElementById(1+"|"+4).bgColor=color;
document.getElementById(2+"|"+3).bgColor=color;
document.getElementById(2+"|"+4).bgColor=color;
break;
//□■■
// ■
case 7:
document.getElementById(1+"|"+3).bgColor=color;
document.getElementById(1+"|"+4).bgColor=color;
document.getElementById(1+"|"+5).bgColor=color;
document.getElementById(2+"|"+4).bgColor=color;
break;
}
}
//选择颜色
function ChooseColor(num)
{
switch(num)
{
case 1:
return "#FF0000";
break;
case 2:
return "#00FF00";
break;
case 3:
return "#0000FF";
break;
case 4:
return "#FFFF00";
break;
case 5:
return "#00FFFF";
break;
case 6:
return "#FF00FF";
break;
case 7:
return "#999999";
break;
}
}
//开始游戏
function Play()
{
squareNum = parseInt(Math.random()*7+1); //随机生成当前方块编号
nextSquareNum = parseInt(Math.random()*7+1); //随机生成下一方块编号
ShowNextSquare(); //显示下一方块
InitSquare(); //初始化当前方块坐标
var color = ChooseColor(squareNum); //选择颜色
for(i=1;i<=20;i++) //表格恢复到原始颜色
{
for(j=1;j<=14;j++)
{
document.getElementById(i+"_"+j).bgColor='black';
}
}
for(i=0;i<square.length;i++) //显示当前方块
{
document.getElementById(square[i]).bgColor=color;
}
if(downId!=null)
clearInterval(downId);
downId = setInterval("Down()",600);
}
function Up()
{
for(i=0;i<4;i++)
document.getElementById(square[i]).bgColor='black';
var num = square[0].indexOf("_");
var r = square[0].substring(0,num);
var c = square[0].substring(num+1);
switch(squareNum)//判断方块改变方向
{
//□
//■
//☆
//■
case 1:
if((squareFix=="right"||squareFix=="left")&&(parseInt(r)-2>0&&parseInt(c)-2>0&&parseInt(r)+1<=rows))
{
square[0]=parseInt(r)-2+"_"+(parseInt(c)-2)
square[1]=parseInt(r)-1+"_"+(parseInt(c)-2)
square[2]=r+"_"+(parseInt(c)-2)
square[3]=parseInt(r)+1+"_"+(parseInt(c)-2)
squareFix="down";
}
//■☆■□
else if((squareFix=="up"||squareFix=="down")&&(parseInt(r)+2<=rows&&parseInt(c)+2<=cols&&parseInt(c)-1>=0))
{
square[0]=parseInt(r)+2+"_"+(parseInt(c)+2);
square[1]=parseInt(r)+2+"_"+(parseInt(c)+1)
square[2]=parseInt(r)+2+"_"+c;
square[3]=parseInt(r)+2+"_"+(parseInt(c)-1);
squareFix="left";
}
break;
//□
//■
//■■
case 2:
break;
// □
// ■
//■■
case 3:
break;
//□■
// ■■
case 4:
break;
// □■
//■■
case 5:
break;
//□■■
// ■
case 7:
break;
}
}
//向下移动
function Down()
{
var color=ChooseColor(squareNum);
//检测是否到达最低端或者在其他方块上面
for(i=0;i<square.length;i++)
{
var num=square[i].indexOf("_");
var r=square[i].substring(0,num);
var c=square[i].substring(num+1);
r++;
if(r>rows||(document.getElementById(r+"_"+c).bgColor!="#000000"&&r+"_"+c!=square[0]&&r+"_"+c!=square[1]&&r+"_"+c!=square[2]&&r+"_"+c!=square[3]))
{
for(i=0;i<square.length;i++)
{
var count=0;
var num = square[i].indexOf("_");
var r = square[i].substring(0,num);
for(c=1;c<=cols;c++)//判断一行是否都填满了
{
if(document.getElementById(r+"_"+c).bgColor=="#000000")
count++;
}
if(count==0)
{
for(y=r;y>2;y--)
{
for(x=1;x<=cols;x++)
{
document.getElementById(y+"_"+x).bgColor=document.getElementById(y-1+"_"+x).bgColor;
}
}
}
}
squareNum=nextSquareNum; //下一个方块赋给当前方块
nextSquareNum=parseInt(Math.random()*7+1); //重新生成下一方块
InitSquare(); //根据当前方块编号生成坐标
ShowNextSquare(); //显示下一方块
if(r<=4)
{
clearInterval(downId);
return;
}
color=ChooseColor(squareNum); //根据当前方块编号选择颜色
for(i=0;i<square.length;i++) //显示当前方块
{
document.getElementById(square[i]).bgColor=color;
}
return;
}
}
for(j=0;j<square.length;j++)
{
document.getElementById(square[j]).bgColor="black";
var num=square[j].indexOf("_");
var r=square[j].substring(0,num);
var c=square[j].substring(num+1);
square[j]=++r+"_"+c;
}
for(j=0;j<square.length;j++)
document.getElementById(square[j]).bgColor=color;
squareFix="down";
}
//向左移动
function Left()
{
//检测是否可以向左移动
for(i=0;i<square.length;i++)
{
var num=square[i].indexOf("_");
var r=square[i].substring(0,num);
var c=square[i].substring(num+1);
c--;
if(c<1||(document.getElementById(r+"_"+c).bgColor!="#000000"&&r+"_"+c!=square[0]&&r+"_"+c!=square[1]&&r+"_"+c!=square[2]&&r+"_"+c!=square[3]))
return;
}
for(i=0;i<square.length;i++)
{
document.getElementById(square[i]).bgColor='black';
var num=square[i].indexOf("_");
var r=square[i].substring(0,num);
var c=square[i].substring(num+1);
square[i]=r+"_"+(--c);
}
var color = ChooseColor(squareNum);
for(i=0;i<square.length;i++)
{
document.getElementById(square[i]).bgColor=color;
}
}
//向右移动
function right()
{
//检测是否可以向右移动
for(i=0;i<square.length;i++)
{
var num=square[i].indexOf("_");
var r=square[i].substring(0,num);
var c=square[i].substring(num+1);
c++;
if(c>cols||(document.getElementById(r+"_"+c).bgColor!="#000000"&&r+"_"+c!=square[0]&&r+"_"+c!=square[1]&&r+"_"+c!=square[2]&&r+"_"+c!=square[3]))
return;
}
for(i=0;i<square.length;i++)
{
document.getElementById(square[i]).bgColor='black';
var num=square[i].indexOf("_");
var r=square[i].substring(0,num);
var c=square[i].substring(num+1);
square[i]=r+"_"+(++c);
}
var color = ChooseColor(squareNum);
for(i=0;i<square.length;i++)
{
document.getElementById(square[i]).bgColor=color;
}
}
//键盘方向
function Move()
{
var num = event.keyCode;
if(num!=37&&num!=38&&num!=39&&num!=40)
return;
switch(num)
{
case 37:
Left();
break;
case 38:
Up();
break;
case 39:
right();
break;
case 40:
Down();
break;
}
}
document.onkeydown = Move;
</script>
</head>
<body onLoad="CreateTable()">
<table width="100%" height="100%">
<tr>
<td id="tab" align="center"></td>
</tr>
</table>
</body>
</html>
<head>
<title>俄罗斯方块</title>
<script>
var rows=20,cols=14; //行数列数
var downId=null; //向下ID
var squareFix="down"; //方块方向
var squareNum; //方块编号
var square=new Array(); //方块坐标
var nextSquareNum; //下一方块编号
//创建表格
function CreateTable()
{
var table="<table border=1>";
table+="<tr>";
table+="<td>";
table+="<table bgColor='black'>";
for(i=1;i<=rows;i++)
{
table+="<tr>";
for(j=1;j<=cols;j++)
{
table+="<td bgColor='black' width='20' id="+i+"_"+j+"> </td>";
}
table+="</tr>";
}
table+="</table>";
table+="</td>";
table+="<td align='center' bgColor='black'>";
table+="<table>";
for(l=1;l<=13;l++)
{
table+="<tr>";
for(j=1;j<=6;j++)
{
if(l>8&&l<=10&&j==1)
{
if(l==9)
table+="<td bgColor='#FFFFFF' colspan='6' width='20' id="+l+"|"+j+">行</td>";
if(l==10)
table+="<td bgColor='#FFFFFF' colspan='6' width='20' id="+l+"|"+j+">列</td>";
}
else if((l>0&&l<9)||(l>10&&l<=rows))
table+="<td bgColor='black' width='20' id="+l+"|"+j+"> </td>";
}
table+="</tr>";
}
table+="</table>";
table+="<p><input type='button' value='开始游戏' οnclick='Play()'></p>";
table+="<input type='button' value='暂停游戏' οnclick='clearInterval("+downId+")'>";
table+="</td>";
table+="</tr>";
table+="</table>";
document.getElementById('tab').innerHTML=table;
}
//初始化当前方块
function InitSquare()
{
switch(squareNum)
{
//□
//■
//■
//■
case 1:
square[0]="1_7";
square[1]="2_7";
square[2]="3_7";
square[3]="4_7";
break;
//□
//■
//■■
case 2:
square[0]="1_7";
square[1]="2_7";
square[2]="3_7";
square[3]="3_8";
break;
// □
// ■
//■■
case 3:
square[0]="1_7";
square[1]="2_7";
square[2]="3_7";
square[3]="3_6";
break;
//□■
// ■■
case 4:
square[0]="1_7";
square[1]="1_8";
square[2]="2_8";
square[3]="2_9";
break;
// □■
//■■
case 5:
square[0]="1_7";
square[1]="1_8";
square[2]="2_6";
square[3]="2_7";
break;
//□■
//■■
case 6:
square[0]="1_7";
square[1]="1_8";
square[2]="2_7";
square[3]="2_8";
break;
//□■■
// ■
case 7:
square[0]="1_6";
square[1]="1_7";
square[2]="1_8";
square[3]="2_7";
break;
}
}
//显示下一个方块
function ShowNextSquare()
{
for(i=1;i<5;i++)
{
for(j=1;j<7;j++)
{
document.getElementById(i+"|"+j).bgColor='black';
}
}
var color=ChooseColor(nextSquareNum);
switch(nextSquareNum)
{
//□
//■
//■
//■
case 1:
document.getElementById(1+"|"+3).bgColor=color;
document.getElementById(2+"|"+3).bgColor=color;
document.getElementById(3+"|"+3).bgColor=color;
document.getElementById(4+"|"+3).bgColor=color;
break;
//□
//■
//■■
case 2:
document.getElementById(1+"|"+3).bgColor=color;
document.getElementById(2+"|"+3).bgColor=color;
document.getElementById(3+"|"+3).bgColor=color;
document.getElementById(3+"|"+4).bgColor=color;
break;
// □
// ■
//■■
case 3:
document.getElementById(1+"|"+4).bgColor=color;
document.getElementById(2+"|"+4).bgColor=color;
document.getElementById(3+"|"+4).bgColor=color;
document.getElementById(3+"|"+3).bgColor=color;
break;
//□■
// ■■
case 4:
document.getElementById(1+"|"+3).bgColor=color;
document.getElementById(1+"|"+4).bgColor=color;
document.getElementById(2+"|"+4).bgColor=color;
document.getElementById(2+"|"+5).bgColor=color;
break;
// □■
//■■
case 5:
document.getElementById(1+"|"+4).bgColor=color;
document.getElementById(1+"|"+5).bgColor=color;
document.getElementById(2+"|"+3).bgColor=color;
document.getElementById(2+"|"+4).bgColor=color;
break;
//□■
//■■
case 6:
document.getElementById(1+"|"+3).bgColor=color;
document.getElementById(1+"|"+4).bgColor=color;
document.getElementById(2+"|"+3).bgColor=color;
document.getElementById(2+"|"+4).bgColor=color;
break;
//□■■
// ■
case 7:
document.getElementById(1+"|"+3).bgColor=color;
document.getElementById(1+"|"+4).bgColor=color;
document.getElementById(1+"|"+5).bgColor=color;
document.getElementById(2+"|"+4).bgColor=color;
break;
}
}
//选择颜色
function ChooseColor(num)
{
switch(num)
{
case 1:
return "#FF0000";
break;
case 2:
return "#00FF00";
break;
case 3:
return "#0000FF";
break;
case 4:
return "#FFFF00";
break;
case 5:
return "#00FFFF";
break;
case 6:
return "#FF00FF";
break;
case 7:
return "#999999";
break;
}
}
//开始游戏
function Play()
{
squareNum = parseInt(Math.random()*7+1); //随机生成当前方块编号
nextSquareNum = parseInt(Math.random()*7+1); //随机生成下一方块编号
ShowNextSquare(); //显示下一方块
InitSquare(); //初始化当前方块坐标
var color = ChooseColor(squareNum); //选择颜色
for(i=1;i<=20;i++) //表格恢复到原始颜色
{
for(j=1;j<=14;j++)
{
document.getElementById(i+"_"+j).bgColor='black';
}
}
for(i=0;i<square.length;i++) //显示当前方块
{
document.getElementById(square[i]).bgColor=color;
}
if(downId!=null)
clearInterval(downId);
downId = setInterval("Down()",600);
}
function Up()
{
for(i=0;i<4;i++)
document.getElementById(square[i]).bgColor='black';
var num = square[0].indexOf("_");
var r = square[0].substring(0,num);
var c = square[0].substring(num+1);
switch(squareNum)//判断方块改变方向
{
//□
//■
//☆
//■
case 1:
if((squareFix=="right"||squareFix=="left")&&(parseInt(r)-2>0&&parseInt(c)-2>0&&parseInt(r)+1<=rows))
{
square[0]=parseInt(r)-2+"_"+(parseInt(c)-2)
square[1]=parseInt(r)-1+"_"+(parseInt(c)-2)
square[2]=r+"_"+(parseInt(c)-2)
square[3]=parseInt(r)+1+"_"+(parseInt(c)-2)
squareFix="down";
}
//■☆■□
else if((squareFix=="up"||squareFix=="down")&&(parseInt(r)+2<=rows&&parseInt(c)+2<=cols&&parseInt(c)-1>=0))
{
square[0]=parseInt(r)+2+"_"+(parseInt(c)+2);
square[1]=parseInt(r)+2+"_"+(parseInt(c)+1)
square[2]=parseInt(r)+2+"_"+c;
square[3]=parseInt(r)+2+"_"+(parseInt(c)-1);
squareFix="left";
}
break;
//□
//■
//■■
case 2:
break;
// □
// ■
//■■
case 3:
break;
//□■
// ■■
case 4:
break;
// □■
//■■
case 5:
break;
//□■■
// ■
case 7:
break;
}
}
//向下移动
function Down()
{
var color=ChooseColor(squareNum);
//检测是否到达最低端或者在其他方块上面
for(i=0;i<square.length;i++)
{
var num=square[i].indexOf("_");
var r=square[i].substring(0,num);
var c=square[i].substring(num+1);
r++;
if(r>rows||(document.getElementById(r+"_"+c).bgColor!="#000000"&&r+"_"+c!=square[0]&&r+"_"+c!=square[1]&&r+"_"+c!=square[2]&&r+"_"+c!=square[3]))
{
for(i=0;i<square.length;i++)
{
var count=0;
var num = square[i].indexOf("_");
var r = square[i].substring(0,num);
for(c=1;c<=cols;c++)//判断一行是否都填满了
{
if(document.getElementById(r+"_"+c).bgColor=="#000000")
count++;
}
if(count==0)
{
for(y=r;y>2;y--)
{
for(x=1;x<=cols;x++)
{
document.getElementById(y+"_"+x).bgColor=document.getElementById(y-1+"_"+x).bgColor;
}
}
}
}
squareNum=nextSquareNum; //下一个方块赋给当前方块
nextSquareNum=parseInt(Math.random()*7+1); //重新生成下一方块
InitSquare(); //根据当前方块编号生成坐标
ShowNextSquare(); //显示下一方块
if(r<=4)
{
clearInterval(downId);
return;
}
color=ChooseColor(squareNum); //根据当前方块编号选择颜色
for(i=0;i<square.length;i++) //显示当前方块
{
document.getElementById(square[i]).bgColor=color;
}
return;
}
}
for(j=0;j<square.length;j++)
{
document.getElementById(square[j]).bgColor="black";
var num=square[j].indexOf("_");
var r=square[j].substring(0,num);
var c=square[j].substring(num+1);
square[j]=++r+"_"+c;
}
for(j=0;j<square.length;j++)
document.getElementById(square[j]).bgColor=color;
squareFix="down";
}
//向左移动
function Left()
{
//检测是否可以向左移动
for(i=0;i<square.length;i++)
{
var num=square[i].indexOf("_");
var r=square[i].substring(0,num);
var c=square[i].substring(num+1);
c--;
if(c<1||(document.getElementById(r+"_"+c).bgColor!="#000000"&&r+"_"+c!=square[0]&&r+"_"+c!=square[1]&&r+"_"+c!=square[2]&&r+"_"+c!=square[3]))
return;
}
for(i=0;i<square.length;i++)
{
document.getElementById(square[i]).bgColor='black';
var num=square[i].indexOf("_");
var r=square[i].substring(0,num);
var c=square[i].substring(num+1);
square[i]=r+"_"+(--c);
}
var color = ChooseColor(squareNum);
for(i=0;i<square.length;i++)
{
document.getElementById(square[i]).bgColor=color;
}
}
//向右移动
function right()
{
//检测是否可以向右移动
for(i=0;i<square.length;i++)
{
var num=square[i].indexOf("_");
var r=square[i].substring(0,num);
var c=square[i].substring(num+1);
c++;
if(c>cols||(document.getElementById(r+"_"+c).bgColor!="#000000"&&r+"_"+c!=square[0]&&r+"_"+c!=square[1]&&r+"_"+c!=square[2]&&r+"_"+c!=square[3]))
return;
}
for(i=0;i<square.length;i++)
{
document.getElementById(square[i]).bgColor='black';
var num=square[i].indexOf("_");
var r=square[i].substring(0,num);
var c=square[i].substring(num+1);
square[i]=r+"_"+(++c);
}
var color = ChooseColor(squareNum);
for(i=0;i<square.length;i++)
{
document.getElementById(square[i]).bgColor=color;
}
}
//键盘方向
function Move()
{
var num = event.keyCode;
if(num!=37&&num!=38&&num!=39&&num!=40)
return;
switch(num)
{
case 37:
Left();
break;
case 38:
Up();
break;
case 39:
right();
break;
case 40:
Down();
break;
}
}
document.onkeydown = Move;
</script>
</head>
<body onLoad="CreateTable()">
<table width="100%" height="100%">
<tr>
<td id="tab" align="center"></td>
</tr>
</table>
</body>
</html>