var C_Block = {};//方块 C_Block.List = []; var Block = function(){//构造方法 this.id = -1; this.kd = -1; this.group = -1;//该块包含方格所属群组 this.isSelect = 0; this.sp = -1; this.spbeg = 0; this.x = 0; this.y = 0; this.margin = []; this.type = []; this.tt=[]; this.splist = []; } C_Block.create = function(){//创建方块 this.List.length = maxsize.blk; for(var k=0;k-1){ this.List[i].clear(); this.List[i].genblock(); } } } C_Block.changecolor = function(){//改变颜色 for(var i=0;i<3;i++){ if(this.List[i].kd>-1){ //this.List[i].clear(); this.List[i].changecolor(); } } } C_Block.newgame = function(){//新游戏 for(var i=0;i<3;i++){ this.List[i].newgame(); } } C_Block.newblock = function(){//重新生成所有块 for(var i=0;i<3;i++){ this.List[i].genblock(); } } C_Block.canrenew = function(){//重新生成所有块 for(var i=0;i<3;i++){ if(this.List[i].kd>-1){ return; } } this.newblock(); } C_Block.avaplace = function(){//游戏是否结束 blockava = [-1,-1,-1]; var sum = 0; var bsum = 0; var ind = -1; for(var i=0;i<3;i++){ if(this.List[i].kd>-1){ sum++; this.List[i].canplace(); } } for(var i=0;i<3;i++){ if(blockava[i] == 1){ bsum++; ind = i; } } if(bsum==1){ if(sum>1){ if(this.List[ind].haveclear()){ return true; }else{ return false; } }else{ for(var i=0;i<3;i++){ if(this.List[i].kd>-1){ if(this.List[i].canplace()){ return true; } } } } } if(bsum>1){ for(var i=0;i<3;i++){ if(this.List[i].kd>-1){ if(this.List[i].canplace()){ return true; } } } } return false; } C_Block.getblock = function(bpos){//获取方块 if(bpos<0){return null;} return this.List[bpos]; } C_Block.clear = function(){//清除所有方块内容 } if(typeof(Block.prototype.click) == "undefined"){ Block.prototype.click = function(){//选择该块 this.isSelect = 1; }; } if(typeof(Block.prototype.haveclear) == "undefined"){ Block.prototype.haveclear = function(){//判断该块是否放置后有可消除 var barr =[]; for(var i=0;i<9;i++){ barr.push([-1,-1,-1,-1,-1,-1,-1,-1,-1]); } for(var i=0;i < RAW;i++){ for(var j=0;j RAW || (j + this.type[1]) > COL){//判断边界 //bTemp = false; continue; } if(g_board.boxlist[i][j] == -1 && g_board.boxlist[i+2][j] == -1){ barr[i][j] = this.margin[0][1]; barr[i+2][j] = this.margin[2][1]; var parr=[]; if(this.isclear(barr,parr,[[i,j],[this.type[0],this.type[1]]])){ return true; } } break; case 1: if((i + this.type[0]) > RAW || (j + this.type[1]) > COL){//判断边界 //bTemp = false; continue; } if(g_board.boxlist[i][j] == -1 && g_board.boxlist[i+1][j]== -1){ barr[i][j] = this.margin[0][1]; barr[i+1][j] = this.margin[1][1]; var parr=[]; if(this.isclear(barr,parr,[[i,j],[this.type[0],this.type[1]]])){ return true; } } break; case 2: case 3: case 4: case 5: case 6: case 7: if((i + this.type[0]) > RAW || (j + this.type[1]) > COL){//判断边界 //bTemp = false; continue; } var t = true; var bps=[]; var mpos =[]; for(var m=0;m<2;m++){ for(var n=0;n<2;n++){ if(this.margin[m][n] != -1){ if(g_board.boxlist[i+m][j+n] != -1){ t=false; } else{ //bps.push([i+m,j+n]); //mpos.push([m,n]); barr[i+m][j+n] = this.margin[m][n]; } } } } if(t){ var parr=[]; if(this.isclear(barr,parr,[[i,j],[this.type[0],this.type[1]]])){ return true; } } break; case 8: if((i + this.type[0]) > RAW || (j + this.type[1]) > COL){//判断边界 continue; } if(g_board.boxlist[i][j] == -1 && g_board.boxlist[i][j+1]== -1){ barr[i][j] = this.margin[1][0]; barr[i][j+1] = this.margin[1][1]; var parr=[]; if(this.isclear(barr,parr,[[i,j],[this.type[0],this.type[1]]])){ return true; } } break; case 9: if((i + this.type[0]) > RAW || (j + this.type[1]) > COL){//判断边界 //bTemp = false; continue; } if(g_board.boxlist[i][j] == -1 && g_board.boxlist[i][j+2]== -1){ barr[i][j] = this.margin[1][0]; barr[i][j+2] = this.margin[1][2]; var parr=[]; if(this.isclear(barr,parr,[[i,j],[this.type[0],this.type[1]]])){ return true; } } break; case 10: if((i + this.type[0]) > RAW || (j + this.type[1]) > COL){//判断边界 //bTemp = false; continue; } if(g_board.boxlist[i][j] == -1){ barr[i][j] = this.margin[1][1]; var parr=[]; if(this.isclear(barr,parr,[[i,j],[this.type[0],this.type[1]]])){ return true; } } break; } } } return false; }; } if(typeof(Block.prototype.isclear) == "undefined"){ Block.prototype.isclear = function(blist,posarr,arr){//是否有可消除 var iTemp = arr[0][0]; while(iTemp < arr[0][0]+arr[1][0]){ var tarr=[-1,0]; var poarr=[]; for(var i=0;i-1){ tarr[0] = blist[iTemp][i]; tarr[1] = 1; poarr.push([iTemp,i]); } }else{ if(blist[iTemp][i] == tarr[0]){//相同块 if(blist[iTemp][i]>-1){ tarr[1]++; poarr.push([iTemp,i]); } if(i==COL-1){ if(tarr[1]>=3){//个数大于等于3 for(var k=0;k=3){//个数大于等于3 for(var k=0;k-1){ tarr[0] = blist[i][cTemp]; tarr[1] = 1; poarr.push([i,cTemp]); } }else{ if(blist[i][cTemp] == tarr[0]){//相同块 if(blist[i][cTemp]>-1){ tarr[1]++; poarr.push([i,cTemp]); if(i==RAW-1){ if(tarr[1]>=3){//个数大于等于3 for(var k=0;k=3){//个数大于等于3 for(var k=0;k0){ return true; }else{ return false; } }; } if(typeof(Block.prototype.newgame) == "undefined"){ Block.prototype.newgame = function(){//新游戏 for(var i=0;i -1){ set_self(bkflist[this.id],18,offmovex,1,0,0); set_self(bkflist[this.id],19,offmovey,1,0,0); set_group(this.group,18,offmovex,1,0); set_group(this.group,19,offmovey,1,0); } }; } if(typeof(Block.prototype.canplace) == "undefined"){ Block.prototype.canplace = function(){//判断该块是否有位置可放置 for(var i=0;i < RAW;i++){ for(var j=0;j RAW || (j + this.type[1]) > COL){//判断边界 continue; } if(g_board.boxlist[i][j] == -1 && g_board.boxlist[i+2][j] == -1){ blockava[this.id] = 1; } break; case 1: if((i + this.type[0]) > RAW || (j + this.type[1]) > COL){//判断边界 //bTemp = false; continue; } if(g_board.boxlist[i][j] == -1 && g_board.boxlist[i+1][j]== -1){ blockava[this.id] = 1; //return true; } break; case 2: case 3: case 4: case 5: case 6: case 7: if((i + this.type[0]) > RAW || (j + this.type[1]) > COL){//判断边界 continue; } var t = true; var bps=[]; var mpos =[]; for(var m=0;m<2;m++){ for(var n=0;n<2;n++){ if(this.margin[m][n] != -1){ if(g_board.boxlist[i+m][j+n] != -1){ t=false; } } } } if(t){ blockava[this.id] = 1; }else{ continue; } break; case 8: if((i + this.type[0]) > RAW || (j + this.type[1]) > COL){//判断边界 continue; } if(g_board.boxlist[i][j] == -1 && g_board.boxlist[i][j+1]== -1){ blockava[this.id] = 1; } break; case 9: if((i + this.type[0]) > RAW || (j + this.type[1]) > COL){//判断边界 //bTemp = false; continue; } if(g_board.boxlist[i][j] == -1 && g_board.boxlist[i][j+2]== -1){ blockava[this.id] = 1; } break; case 10: if((i + this.type[0]) > RAW || (j + this.type[1]) > COL){//判断边界 continue; } if(g_board.boxlist[i][j] == -1){ blockava[this.id] = 1; } break; } } } if(blockava[this.id] == -1){ return false }else{ return true; } }; } if(typeof(Block.prototype.place) == "undefined"){ Block.prototype.place = function(){//判断块是否可放置 var sp_x1 = get_self(this.splist[0][0],18,0,0,0); var sp_y1 = get_self(this.splist[0][0],19,0,0,0); var sp_x2 = get_self(this.splist[0][1],18,0,0,0); var sp_y2 = get_self(this.splist[0][1],19,0,0,0); var sp_x3 = get_self(this.splist[1][0],18,0,0,0); var sp_y3 = get_self(this.splist[1][0],19,0,0,0); var sp_x4 = get_self(this.splist[1][1],18,0,0,0); var sp_y4 = get_self(this.splist[1][1],19,0,0,0); if(isSlide==1){ for(var i=0;i < RAW;i++){ for(var j=0;j=2 && this.kd <= 7) || (ifast_abs(sp_x2 - g_board.bbox_x[i][j])<=C_EEROR && ifast_abs(sp_y2 - g_board.bbox_y[i][j])<=C_EEROR &&this.kd >=0 && this.kd<=1 ) || (ifast_abs(sp_x3 - g_board.bbox_x[i][j])<=C_EEROR && ifast_abs(sp_y3 - g_board.bbox_y[i][j])<=C_EEROR &&this.kd >=8 && this.kd<=9) || (ifast_abs(sp_x4 - g_board.bbox_x[i][j])<=C_EEROR && ifast_abs(sp_y4 - g_board.bbox_y[i][j])<=C_EEROR &&this.kd ==10)){ allsp = []; var sppos = []; var bsppos = []; typelist = []; set_self(bkflist[this.id],18,this.x,0,0,0); set_self(bkflist[this.id],19,this.y,0,0,0); switch(this.kd){ case 0: if((i + this.type[0]) > RAW || (j + this.type[1]) > COL){//判断边界 this.restpos(); return; } if(g_board.boxlist[i][j] != -1 || g_board.boxlist[i+2][j] != -1){ this.restpos(); return; } bsppos =[[i,j],[i+2,j]]; allsp = [g_board.splist[i][j],g_board.splist[i+2][j]];//需要替换的精灵号 sppos = [[0,1],[2,1]]; typelist = [this.margin[0][1],this.margin[2][1]]; break; case 1: if((i + this.type[0]) > RAW || (j + this.type[1]) > COL){//判断边界 this.restpos(); return; } if(g_board.boxlist[i][j] != -1 || g_board.boxlist[i+1][j]!= -1){ this.restpos(); return; } bsppos =[[i,j],[i+1,j]]; allsp = [g_board.splist[i][j],g_board.splist[i+1][j]];//需要替换的精灵号 sppos = [[0,1],[1,1]]; typelist = [this.margin[0][1],this.margin[1][1]]; break; case 2: case 3: case 4: case 5: case 6: case 7: if((i + this.type[0]) > RAW || (j + this.type[1]) > COL){//判断边界 this.restpos(); return; } for(var m=0;m<2;m++){ for(var n=0;n<2;n++){ if(this.margin[m][n] != -1){ if(g_board.boxlist[i+m][j+n] == -1){ bsppos.push([i+m,j+n]); allsp.push(g_board.splist[i+m][j+n]); sppos.push([m,n]); typelist.push(this.margin[m][n]); }else{ //allsp=[]; //appos=[]; this.restpos(); return; } } } } break; case 8: if((i + this.type[0]) > RAW || (j + this.type[1]) > COL){//判断边界 this.restpos(); return; } if(g_board.boxlist[i][j] != -1 || g_board.boxlist[i][j+1]!= -1){ this.restpos(); return; } bsppos =[[i,j],[i,j+1]]; allsp = [g_board.splist[i][j],g_board.splist[i][j+1]];//需要替换的精灵号 sppos = [[1,0],[1,1]]; typelist = [this.margin[1][0],this.margin[1][1]]; break; case 9: if((i + this.type[0]) > RAW || (j + this.type[1]) > COL){//判断边界 this.restpos(); return; } if(g_board.boxlist[i][j] != -1 || g_board.boxlist[i][j+2]!= -1){ this.restpos(); return; } bsppos = [[i,j],[i,j+2]]; allsp = [g_board.splist[i][j],g_board.splist[i][j+2]];//需要替换的精灵号 sppos = [[1,0],[1,2]]; typelist = [this.margin[1][0],this.margin[1][2]]; break; case 10: if((i + this.type[0]) > RAW || (j + this.type[1]) > COL){//判断边界 this.restpos(); return; } if(g_board.boxlist[i][j] != -1){ this.restpos(); return; } bsppos =[[i,j]]; allsp = [g_board.splist[i][j]];//需要替换的精灵号 sppos = [[1,1]]; typelist = [this.margin[1][1]]; break; } for(var k=0;k -1){ set_self(this.splist[i][j],1,this.margin[i][j],0,0); } } } }; } if(typeof(Block.prototype.changecolor) == "undefined"){ Block.prototype.changecolor = function(){//块回原位 switch(this.kd){ case 0: var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[0][1]); var b_type = carr[ifast_random(5)]; this.margin[0][1] = b_type; this.margin[2][1] = b_type; break; case 1: var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[0][1]); var b_type = carr[ifast_random(5)]; this.margin[0][1] = b_type; this.margin[1][1] = b_type; break; case 2: var carr = [1,2,3,4,5,6]; if(this.margin[0][1]>-1){ C_Fun.removeByValue(carr,this.margin[0][1]); var b_type = carr[ifast_random(5)]; this.margin[0][1] = b_type; this.margin[1][0] = b_type; }else{ if(this.margin[0][0]>-1){ C_Fun.removeByValue(carr,this.margin[0][0]); var b_type = carr[ifast_random(5)]; this.margin[0][0] = b_type; this.margin[1][1] = b_type; } } break; case 3: var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[0][1]); var b_type = carr[ifast_random(5)]; for(var i=0;i<2;i++){ for(var j=0;j<2;j++){ if(this.margin[i][j]>-1){ this.margin[i][j] = b_type; } } } break; case 4: var iTemp=parseInt(this.tt[0]/2); var jTemp=this.tt[0]%2; var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[iTemp][jTemp]); var b1 = carr[ifast_random(5)]; var b2; if(this.tt[0]==0){ var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[0][1]); C_Fun.removeByValue(carr,b1); var b2 = carr[ifast_random(4)]; }else{ var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[0][0]); C_Fun.removeByValue(carr,b1); var b2 = carr[ifast_random(4)]; } for(var i=0;i<2;i++){ for(var j=0;j<2;j++){ if((i*2+j)== this.tt[0]){ this.margin[i][j] = b1; }else{ this.margin[i][j] = b2; } } } break; case 5: //var p1 = ifast_random(2);//相连两个横竖放 var p1 =this.tt[0]; switch(p1){ case 0://横 var p2 = this.tt[1];//相连两个放置位置 var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[p2][0]); var t1 = carr[ifast_random(5)]; this.margin[p2][0] = t1; this.margin[p2][1] = t1; break; case 1://竖 var p2 = this.tt[1];//相连两个放置位置 var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[p2][0]); var t1 = carr[ifast_random(5)]; this.margin[0][p2] = t1; this.margin[1][p2] = t1; break; } if(this.tt[0]==0){ if(this.tt[1]==0){ var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[1][0]); C_Fun.removeByValue(carr,this.margin[0][0]); var t2 = carr[ifast_random(4)]; this.margin[1][0]=t2; var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[1][1]); C_Fun.removeByValue(carr,this.margin[1][0]); C_Fun.removeByValue(carr,this.margin[0][0]); var t3 = carr[ifast_random(3)]; this.margin[1][1]=t3; }else if(this.tt[1]==1){ var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[0][0]); C_Fun.removeByValue(carr,this.margin[1][0]); var t2 = carr[ifast_random(4)]; this.margin[0][0]=t2; var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[0][1]); C_Fun.removeByValue(carr,this.margin[0][0]); C_Fun.removeByValue(carr,this.margin[1][0]); var t3 = carr[ifast_random(3)]; this.margin[0][1]=t3; } }else if(this.tt[0]==1){ if(this.tt[1]==0){ var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[0][0]); C_Fun.removeByValue(carr,this.margin[0][1]); var t2 = carr[ifast_random(4)]; this.margin[0][1]=t2; var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[1][0]); C_Fun.removeByValue(carr,this.margin[0][1]); C_Fun.removeByValue(carr,this.margin[0][0]); var t3 = carr[ifast_random(3)]; this.margin[1][1]=t3; }else if(this.tt[1]==1){ var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[0][0]); C_Fun.removeByValue(carr,this.margin[0][1]); var t2 = carr[ifast_random(4)]; this.margin[0][0]=t2; var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[1][0]); C_Fun.removeByValue(carr,this.margin[0][0]); C_Fun.removeByValue(carr,this.margin[0][1]); var t3 = carr[ifast_random(3)]; this.margin[1][0]=t3; } } break; case 6: var p1 = this.tt[0]; switch(p1){ case 0: var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[0][0]); var t1 = carr[ifast_random(5)]; this.margin[0][0] = t1; this.margin[1][1] = t1; var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[0][1]); C_Fun.removeByValue(carr,this.margin[0][0]); var t2 = carr[ifast_random(4)]; this.margin[0][1]=t2; var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[1][0]); C_Fun.removeByValue(carr,this.margin[0][1]); C_Fun.removeByValue(carr,this.margin[0][0]); var t3 = carr[ifast_random(3)]; this.margin[1][0]=t3; break; case 1: this.margin[0][1] = t1; this.margin[1][0] = t1; var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[0][1]); var t1 = carr[ifast_random(5)]; this.margin[0][1] = t1; this.margin[1][0] = t1; var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[0][0]); C_Fun.removeByValue(carr,this.margin[0][1]); var t2 = carr[ifast_random(4)]; this.margin[0][0]=t2; var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[1][1]); C_Fun.removeByValue(carr,this.margin[0][0]); C_Fun.removeByValue(carr,this.margin[0][1]); var t3 = carr[ifast_random(3)]; this.margin[1][1]=t3; break; } break; case 7: var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[0][0]); var t1 = carr[ifast_random(5)]; this.margin[0][0] = t1; var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[0][0]); C_Fun.removeByValue(carr,this.margin[0][1]); var t2 = carr[ifast_random(4)]; this.margin[0][1]=t2; var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[1][0]); C_Fun.removeByValue(carr,this.margin[0][0]); C_Fun.removeByValue(carr,this.margin[0][1]); var t3 = carr[ifast_random(3)]; this.margin[1][0]=t3; var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[1][1]); C_Fun.removeByValue(carr,this.margin[0][0]); C_Fun.removeByValue(carr,this.margin[0][1]); C_Fun.removeByValue(carr,this.margin[1][0]); var t4 = carr[ifast_random(2)]; this.margin[1][1] = t4; break; case 8: var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[1][0]); var t1 = carr[ifast_random(5)]; this.margin[1][0] = t1; this.margin[1][1] = t1; break; case 9: var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[1][0]); var t1 = carr[ifast_random(5)]; this.margin[1][0] = t1; this.margin[1][2] = t1; break; case 10: var carr = [1,2,3,4,5,6]; C_Fun.removeByValue(carr,this.margin[1][1]); var t1 = carr[ifast_random(5)]; this.margin[1][1] = t1; break; } for(var i=0;i -1){ set_self(this.splist[i][j],1,this.margin[i][j],0,0); } } } }; }