應該看得懂吧?
沒時間寫注釋。。。:(
這個差不多美的啦!只要向block褃面添加或修改就能改變方塳的形狀。:)
<!--
http://dwin.net
http://dewin.tk
copyright(c) 1998-2004 dewin all rights reserved
start 2002-09-20 14:45
finish 2002-10-31 23:50
last edit 2003-08-14 01:25
-->
<body>
<script>
var rows = 17;
var cells = 10;
var objw = objh = 20;
var scores= 0;
var marks = [100,400,900,1600];
var basebw = 5;
var basebgcolor = 'white';
var blockbw = 2;
var blockbs = 'inset';
var blockbc = 'orange';
var glowcolor = '#ffff00';
var glowstrength = 5;
var ospeed = 151;
//方塳數據
block = [];
block[0]=[
' ',
' 1',
'111']
block[0].change = 4;
block[0].color = 'red';
block[1]=[
' ',
'1 ',
'111']
block[1].change = 4;
block[1].color = 'green';
block[2]=[
' ',
' 1 ',
'111']
block[2].change = 4;
block[2].color = 'orange';
block[3]=[
' 11',
'11 ']
block[3].change = 2;
block[3].color = 'fuchsia';
block[4]=[
'11 ',
' 11']
block[4].change = 2;
block[4].color = 'yellow';
block[5]=[
'1111']
block[5].change = 2;
block[5].color = 'lime';
block[6]=[
'11',
'11']
block[6].change = 1;
block[6].color = 'blue';
block[7]=[
'1']
block[7].change = 1;
block[7].color = 'gold';
block[8]=[
' ',
'1 1',
'111']
block[8].change = 4;
block[8].color = 'pink';
block[9]=[
'111',
' 1 ',
' 1 ']
block[9].change = 4;
block[9].color = 'black';
//方塳准備下落
function readyfordown(obj1,obj2){
obj1.k = parseint(math.random()*block.length);
if(!newblock[obj1.k].length){
switch(block[obj1.k].change){
case 1:change0(obj1.k);break;
case 2:change0(obj1.k);change1(obj1.k);break;
case 4:change0(obj1.k);change1(obj1.k);change2(obj1.k);break;
}
}
obj1.change = parseint(math.random()*block[obj1.k].change);
obj2.innerhtml = newblock[obj1.k][obj1.change].ihtml;
obj1.gapx = parseint(newblock[obj1.k][obj1.change][0].length/2);
checkobjgapy(obj1,newblock[obj1.k][obj1.change].length);
obj1.x = parseint(cells/2);
obj1.y = 0;
}
function checkobjgapy(obj,k){
if(!newblock[obj.k][obj.change][k-1].join('').match(/\d+/)){
obj.gapy = 1-k;
checkobjgapy(obj,k-1);
}
else obj.gapy = -k;
}
//改變方塳形狀
function changeblock(){
if(block[obj1.k].change > 1){
obj1.testchange = (obj1.change+1 >= block[obj1.k].change)?0:obj1.change+1;
obj1.testgapx = parseint(newblock[obj1.k][obj1.testchange][0].length/2);
obj1.testgapy = -newblock[obj1.k][obj1.testchange].length;
obj1.testl = obj1.x-obj1.testgapx;
obj1.testt = obj1.y+obj1.testgapy;
var k1 = k2 = areas;
for(var i=obj1.testl;i>=0 && i>obj1.testl-newblock[obj1.k][obj1.testchange].lg;i--){if((k1=checkchangeblock(i))!=areas)break}
for(var i=obj1.testl+1;i<cells && i<obj1.testl+newblock[obj1.k][obj1.testchange].lg;i++){if((k2=checkchangeblock(i))!=areas)break}
if(k1 == k2) return;
obj1.l = (math.abs(obj1.testl-k1)>math.abs(obj1.testl-k2))?k2:k1;
obj1.t = obj1.testt;
obj1.gapx = obj1.testgapx;
obj1.gapy = obj1.testgapy;
obj1.x = obj1.l+obj1.gapx;
obj1.y = obj1.t-obj1.gapy;
obj1.change = obj1.testchange;
skindiv.style.left = obj1.l*objw;
skindiv.style.top = obj1.t*objh;
skindiv.innerhtml = newblock[obj1.k][obj1.change].ihtml;
}
}
檢測改變後,方塳相對於左邊的值。
function checkchangeblock(lefts){
for(var y=0;y<newblock[obj1.k][obj1.testchange].length;y++){
for(var x=0;x<newblock[obj1.k][obj1.testchange][0].length;x++){
if(newblock[obj1.k][obj1.testchange][y][x]==1){
try{if(map[obj1.testt+y][lefts+x] != ' ') return areas}
catch(e){}
}
}
}
return lefts;
}
//方向控制
function dir(xx,yy){
var special = false
if(newblock[obj1.k][obj1.change].length==1 && newblock[obj1.k][obj1.change][0]==1)
for(var y=obj1.t+1;y<rows-1;y++)
if(map[y+yy][obj1.l]==" "){
special = true
break;
}
for(var y=newblock[obj1.k][obj1.change].length-1;y>=0;y--){
for(var x=newblock[obj1.k][obj1.change][0].length-1;x>=0;x--){
if(newblock[obj1.k][obj1.change][y][x]==1){
try{