制作一个小游戏 俄罗斯方块代码

<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+">&nbsp;</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+">&nbsp;</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>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值