hextris/js/checking.js

54 lines
1.5 KiB
JavaScript
Raw Normal View History

2014-05-20 00:47:19 +00:00
var deleting;
function search(twoD,oneD){
for(var i=0;i<twoD.length;i++){
if(twoD[i][0] == oneD[0] && twoD[i][1] == oneD[1]) {
return true;
2014-05-19 14:36:13 +00:00
}
}
return false;
2014-05-17 16:39:49 +00:00
}
2014-05-20 00:47:19 +00:00
function floodFill(clock,side,index) {
if(clock.blocks[side] === undefined || clock.blocks[side][index] === undefined){return;}
var color = clock.blocks[side][index].color;
for(var x =-1;x<2;x++){
for(var y =-1;y<2;y++){
2014-05-20 21:09:39 +00:00
if(Math.abs(x)==Math.abs(y)){continue;}
2014-05-20 20:48:11 +00:00
if(clock.blocks[(side+x+clock.sides)%clock.sides] === undefined){continue;}
2014-05-20 00:47:19 +00:00
if(clock.blocks[(side+x+clock.sides)%clock.sides][index+y] !== undefined){
2014-05-20 18:34:02 +00:00
if(clock.blocks[(side+x+clock.sides)%clock.sides][index+y].color== color && search(deleting,[(side+x+clock.sides)%clock.sides,index+y]) == false){
2014-05-20 00:47:19 +00:00
deleting.push([(side+x+clock.sides)%clock.sides,index+y]);
floodFill(clock,(side+x+clock.sides)%clock.sides,index+y);
2014-05-19 14:36:13 +00:00
}
}
}
}
2014-05-20 00:47:19 +00:00
}
function consolidateBlocks(clock,side,index){
var sidesChanged =[];
deleting=[];
deleting.push([side,index]);
floodFill(clock,side,index);
var deleteList= deleting;
if(deleteList.length<3){return;}
for(i in deleteList){
var arr = deleteList[i];
if(arr !== undefined && arr.length==2) {
if(sidesChanged.indexOf(arr[0])==-1){
sidesChanged.push(arr[0]);
2014-05-19 14:36:13 +00:00
}
2014-05-20 20:48:11 +00:00
clock.blocks[arr[0]][arr[1]].deleted = 1;
2014-05-19 14:36:13 +00:00
}
2014-05-20 00:47:19 +00:00
}
2014-05-20 20:48:11 +00:00
for( i in sidesChanged) {
var flag =0;
for( var j=0;j<clock.blocks[sidesChanged[i]].length;j++) {
if(clock.blocks[sidesChanged[i]][j].deleted ==1){
flag=1;
}
else if(flag==1){
consolidateBlocks(clock,sidesChanged[i],j);
}
}
}
2014-05-17 16:39:49 +00:00
}