598 lines
13 KiB
JavaScript
598 lines
13 KiB
JavaScript
var Board = function(){//构造方法
|
|
this.spidbeg = -1;
|
|
this.splist = [];
|
|
this.boxlist = [];
|
|
this.bbox_x = [];
|
|
this.bbox_y = [];
|
|
}
|
|
if(typeof(Board.prototype.creat) == "undefined"){
|
|
Board.prototype.create = function(raw,col,spbeg){//创建方阵
|
|
this.spidbeg = spbeg;
|
|
|
|
for(var i = 0;i < raw;i++){
|
|
var listTemp = [];
|
|
for(var j=0;j<col;j++){
|
|
//var boxTemp = new Box();
|
|
listTemp[j] = -1;
|
|
}
|
|
this.boxlist.push(listTemp);
|
|
}
|
|
|
|
for(var i = 0;i < raw;i++){
|
|
var listTemp = [];
|
|
for(var j=0;j<col;j++){
|
|
listTemp[j] = i*col+j + spbeg;
|
|
}
|
|
this.splist.push(listTemp);
|
|
}
|
|
for(var i=0;i<this.splist.length;i++){
|
|
var iTemp = [];
|
|
for(var j=0;j<this.splist[0].length;j++){
|
|
iTemp.push(get_self(this.splist[i][j],18,0,0,0));
|
|
}
|
|
this.bbox_x.push(iTemp);
|
|
}
|
|
for(var i=0;i<this.splist.length;i++){
|
|
var iTemp = [];
|
|
for(var j=0;j<this.splist[0].length;j++){
|
|
iTemp.push(get_self(this.splist[i][j],19,0,0,0));
|
|
}
|
|
this.bbox_y.push(iTemp);
|
|
}
|
|
|
|
|
|
};
|
|
}
|
|
if(typeof(Board.prototype.init) == "undefined"){
|
|
Board.prototype.init = function(stlist){//数据初始化
|
|
if(stlist.length != COL){return;}
|
|
if(stlist[0].length!=RAW){return;}
|
|
for(var i = 0;i < raw;i++){
|
|
for(var j=0;j<col;j++){
|
|
this.boxlist[i][j].state = stlist[i][j];
|
|
}
|
|
}
|
|
|
|
};
|
|
}
|
|
if(typeof(Board.prototype.clear33) == "undefined"){
|
|
Board.prototype.clear33 = function(){//清除3X3格子
|
|
var p1=ifast_random(6);
|
|
var p2=ifast_random(6);
|
|
var parr = [];
|
|
var sarr = [];
|
|
for(var i=p1;i<p1+3;i++){
|
|
for(var j=p2;j<p2+3;j++){
|
|
if(this.boxlist[i][j]>0){
|
|
parr.push([i,j]);
|
|
sarr.push(this.splist[i][j]);
|
|
}
|
|
}
|
|
}
|
|
this.clear(parr,sarr);
|
|
};
|
|
}
|
|
if(typeof(Board.prototype.getspava) == "undefined"){
|
|
Board.prototype.getspava = function(arr){//获取所有不为空的方格精灵号
|
|
for(var i = 0;i < RAW;i++){
|
|
for(var j=0;j<COL;j++){
|
|
if(this.boxlist[i][j]>-1){
|
|
arr.push(this.splist[i][j]);
|
|
}
|
|
}
|
|
}
|
|
|
|
};
|
|
}
|
|
if(typeof(Board.prototype.allcolor) == "undefined"){
|
|
Board.prototype.allcolor = function(carr){//统计方阵中所有的颜色
|
|
for(var i = 0;i < RAW;i++){
|
|
for(var j=0;j<COL;j++){
|
|
if(this.boxlist[i][j]>-1){
|
|
if(carr.length==0){
|
|
carr.push(this.boxlist[i][j]);
|
|
}else{
|
|
var bTemp=0;
|
|
for(var k=0;k<carr.length;k++){
|
|
if(carr[k]==this.boxlist[i][j]){
|
|
bTemp = 1;
|
|
}
|
|
}
|
|
if(bTemp==0){
|
|
carr.push(this.boxlist[i][j]);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
};
|
|
}
|
|
if(typeof(Board.prototype.clearsome) == "undefined"){
|
|
Board.prototype.clearsome = function(){//消除方阵中一定数量方格
|
|
var carr=[];
|
|
var slist=[];
|
|
this.getspava(carr);
|
|
var l=carr.length;
|
|
if(l==0){return;}
|
|
if(l<4){
|
|
for(i=0;i<l;i++){
|
|
var b = carr[ifast_random(carr.length)];
|
|
slist.push(b);
|
|
C_Fun.removeByValue(carr,b);
|
|
}
|
|
}else if(l>=4){
|
|
for(i=0;i<4;i++){
|
|
var b = carr[ifast_random(carr.length)];
|
|
slist.push(b);
|
|
C_Fun.removeByValue(carr,b);
|
|
}
|
|
}
|
|
var pos=[];
|
|
for(var i=0;i<slist.length;i++){
|
|
var arr = this.getpos(slist[i]);
|
|
pos.push(arr);
|
|
this.boxlist[arr[0]][arr[1]] = -1;
|
|
set_self(slist[i],1,12,0,0);
|
|
}
|
|
utlscore(pos);
|
|
};
|
|
}
|
|
if(typeof(Board.prototype.clearone) == "undefined"){
|
|
Board.prototype.clearone = function(carr){//消除方阵中某种颜色
|
|
var carr=[];
|
|
var pos=[];
|
|
this.allcolor(carr);
|
|
if(carr.length==0){return;}
|
|
var t = carr[ifast_random(carr.length)];
|
|
//var arr=[1,2,3,4,5,6];
|
|
//C_Fun.removeByValue(arr,t);
|
|
//var ty = arr[ifast_random(arr.length)];
|
|
for(var i=0;i<RAW;i++){
|
|
for(j=0;j<COL;j++){
|
|
if(this.boxlist[i][j]==t){
|
|
this.boxlist[i][j]=-1;
|
|
pos.push([i,j]);
|
|
set_self(this.splist[i][j],1,12,0,0);
|
|
}
|
|
}
|
|
}
|
|
utlscore(pos);
|
|
};
|
|
}
|
|
if(typeof(Board.prototype.changeone) == "undefined"){
|
|
Board.prototype.changeone = function(carr){//改变方阵中某种颜色
|
|
var carr=[];
|
|
this.allcolor(carr);
|
|
var t = carr[ifast_random(carr.length)];
|
|
var arr=[1,2,3,4,5,6];
|
|
C_Fun.removeByValue(arr,t);
|
|
var ty = arr[ifast_random(arr.length)];
|
|
for(var i=0;i<RAW;i++){
|
|
for(j=0;j<COL;j++){
|
|
if(this.boxlist[i][j]==t){
|
|
this.boxlist[i][j]=ty;
|
|
set_self(this.splist[i][j],1,ty,0,0);
|
|
}
|
|
}
|
|
}
|
|
var poarr=[];
|
|
var sparr=[];
|
|
this.chgclear(poarr,sparr);
|
|
this.clear(poarr,sparr);
|
|
};
|
|
}
|
|
if(typeof(Board.prototype.getspid) == "undefined"){
|
|
Board.prototype.getspid = function(raw,col){//获得方格精灵号
|
|
return this.splist[raw][col];
|
|
};
|
|
}
|
|
if(typeof(Board.prototype.getpos) == "undefined"){
|
|
Board.prototype.getpos = function(spid){//获得精灵号为spid的方格位置
|
|
for(var i=0;i<9;i++){
|
|
for(j=0;j<9;j++){
|
|
if(this.splist[i][j]==spid){
|
|
return [i,j];
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
};
|
|
}
|
|
if(typeof(Board.prototype.cabplace) == "undefined"){
|
|
Board.prototype.canplace = function(block,raw,col){//能否放置
|
|
|
|
};
|
|
}
|
|
if(typeof(Board.prototype.place) == "undefined"){
|
|
Board.prototype.place = function(block,raw,col){//放置方块
|
|
|
|
};
|
|
}
|
|
if(typeof(Board.prototype.chgclear) == "undefined"){
|
|
Board.prototype.chgclear = function(posarr,sparr){//判断是否有方格可消除
|
|
//if(arr==null){return;}
|
|
var iTemp = 0;
|
|
while(iTemp < RAW){
|
|
var tarr=[-1,0];
|
|
var parr=[];
|
|
var poarr=[];
|
|
for(var i=0;i<COL;i++){
|
|
//if(this.boxlist[iTemp][i]>-1){
|
|
if(tarr[0]==-1){
|
|
if(this.boxlist[iTemp][i]>-1){
|
|
tarr[0] = this.boxlist[iTemp][i];
|
|
tarr[1] = 1;
|
|
parr.push(this.splist[iTemp][i]);
|
|
poarr.push([iTemp,i]);
|
|
}
|
|
}else{
|
|
if(this.boxlist[iTemp][i] == tarr[0]){//相同块
|
|
if(this.boxlist[iTemp][i]>-1){
|
|
tarr[1]++;
|
|
parr.push(this.splist[iTemp][i]);
|
|
poarr.push([iTemp,i]);
|
|
}
|
|
if(i==COL-1){
|
|
if(tarr[1]>=3){//个数大于等于3
|
|
for(var k=0;k<parr.length;k++){
|
|
var bTemp=0;
|
|
for(var m=0;m<sparr.length;m++){
|
|
if(sparr[m]==parr[k]){
|
|
bTemp = 1;
|
|
}
|
|
}
|
|
if(bTemp==0){
|
|
sparr.push(parr[k]);
|
|
posarr.push(poarr[k]);
|
|
}
|
|
}
|
|
tarr=[-1,0];
|
|
parr=[];
|
|
poarr =[];
|
|
}
|
|
}
|
|
}else{
|
|
if(tarr[1]>=3){//个数大于等于3
|
|
for(var k=0;k<parr.length;k++){
|
|
var bTemp=0;
|
|
for(var m=0;m<sparr.length;m++){
|
|
if(sparr[m]==parr[k]){
|
|
bTemp = 1;
|
|
}
|
|
}
|
|
if(bTemp==0){
|
|
sparr.push(parr[k]);
|
|
posarr.push(poarr[k]);
|
|
}
|
|
}
|
|
}
|
|
if(this.boxlist[iTemp][i] == -1){
|
|
tarr=[-1,0];
|
|
parr=[];
|
|
poarr =[];
|
|
}else{
|
|
if(i<COL-1){
|
|
tarr=[this.boxlist[iTemp][i],1];
|
|
parr=[];
|
|
parr.push(this.splist[iTemp][i]);
|
|
poarr=[];
|
|
poarr.push([iTemp,i]);
|
|
}else{
|
|
tarr=[-1,0];
|
|
parr=[];
|
|
poarr =[];
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
iTemp++;
|
|
}
|
|
var cTemp = 0;
|
|
while(cTemp < COL){
|
|
var tarr=[-1,0];
|
|
var parr=[];
|
|
var poarr=[];
|
|
for(var i=0;i<RAW;i++){
|
|
if(tarr[0]==-1){
|
|
if(this.boxlist[i][cTemp]>-1){
|
|
tarr[0] = this.boxlist[i][cTemp];
|
|
tarr[1] = 1;
|
|
parr.push(this.splist[i][cTemp]);
|
|
poarr.push([i,cTemp]);
|
|
}
|
|
}else{
|
|
if(this.boxlist[i][cTemp] == tarr[0]){//相同块
|
|
if(this.boxlist[i][cTemp]>-1){
|
|
tarr[1]++;
|
|
parr.push(this.splist[i][cTemp]);
|
|
poarr.push([i,cTemp]);
|
|
if(i==RAW-1){
|
|
if(tarr[1]>=3){//个数大于等于3
|
|
for(var k=0;k<parr.length;k++){
|
|
var bTemp=0;
|
|
for(var m=0;m<sparr.length;m++){
|
|
if(sparr[m]==parr[k]){
|
|
bTemp = 1;
|
|
}
|
|
}
|
|
if(bTemp==0){
|
|
sparr.push(parr[k]);
|
|
posarr.push(poarr[k]);
|
|
}
|
|
}
|
|
tarr=[-1,0];
|
|
parr=[];
|
|
poarr =[];
|
|
}
|
|
}
|
|
}
|
|
}else{
|
|
if(tarr[1]>=3){//个数大于等于3
|
|
for(var k=0;k<parr.length;k++){
|
|
var bTemp=0;
|
|
for(var m=0;m<sparr.length;m++){
|
|
if(sparr[m]==parr[k]){
|
|
bTemp = 1;
|
|
}
|
|
}
|
|
if(bTemp==0){
|
|
sparr.push(parr[k]);
|
|
posarr.push(poarr[k]);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(this.boxlist[i][cTemp] == -1){
|
|
tarr=[-1,0];
|
|
parr=[];
|
|
poarr=[];
|
|
}else{
|
|
if(i<RAW-1){
|
|
tarr=[this.boxlist[i][cTemp],1];
|
|
parr=[];
|
|
parr.push(this.splist[i][cTemp]);
|
|
poarr=[];
|
|
poarr.push([i,cTemp]);
|
|
}else{
|
|
tarr=[-1,0];
|
|
parr=[];
|
|
poarr=[];
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
//}
|
|
}
|
|
cTemp++;
|
|
}
|
|
if(posarr.length>0){
|
|
return true;//有可消除方格
|
|
}else{
|
|
|
|
return false;//无可消除方格
|
|
}
|
|
};
|
|
}
|
|
if(typeof(Board.prototype.newgame) == "undefined"){
|
|
Board.prototype.newgame = function(){//新游戏
|
|
C_Block.newgame();
|
|
for(var i=0;i<this.boxlist.length;i++){
|
|
for(var j=0;j<this.boxlist[i].length;j++){
|
|
this.boxlist[i][j] = -1;
|
|
set_self(this.splist[i][j],1,12,0,0);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
if(typeof(Board.prototype.canclear) == "undefined"){
|
|
Board.prototype.canclear = function(posarr,sparr,arr){//判断方格放置方块后是否有方格可消除
|
|
if(arr==null){return;}
|
|
var iTemp = arr[0][0];
|
|
while(iTemp < arr[0][0]+arr[1][0]){
|
|
var tarr=[-1,0];
|
|
var parr=[];
|
|
var poarr=[];
|
|
for(var i=0;i<COL;i++){
|
|
if(tarr[0]==-1){
|
|
if(this.boxlist[iTemp][i]>-1){
|
|
tarr[0] = this.boxlist[iTemp][i];
|
|
tarr[1] = 1;
|
|
parr.push(this.splist[iTemp][i]);
|
|
poarr.push([iTemp,i]);
|
|
}
|
|
}else{
|
|
if(this.boxlist[iTemp][i] == tarr[0]){//相同块
|
|
if(this.boxlist[iTemp][i]>-1){
|
|
tarr[1]++;
|
|
parr.push(this.splist[iTemp][i]);
|
|
poarr.push([iTemp,i]);
|
|
}
|
|
if(i==COL-1){
|
|
if(tarr[1]>=3){//个数大于等于3
|
|
for(var k=0;k<parr.length;k++){
|
|
var bTemp=0;
|
|
for(var m=0;m<sparr.length;m++){
|
|
if(sparr[m]==parr[k]){
|
|
bTemp = 1;
|
|
}
|
|
}
|
|
if(bTemp==0){
|
|
sparr.push(parr[k]);
|
|
posarr.push(poarr[k]);
|
|
}
|
|
}
|
|
tarr=[-1,0];
|
|
parr=[];
|
|
poarr =[];
|
|
}
|
|
}
|
|
}else{
|
|
if(tarr[1]>=3){//个数大于等于3
|
|
for(var k=0;k<parr.length;k++){
|
|
var bTemp=0;
|
|
for(var m=0;m<sparr.length;m++){
|
|
if(sparr[m]==parr[k]){
|
|
bTemp = 1;
|
|
}
|
|
}
|
|
if(bTemp==0){
|
|
sparr.push(parr[k]);
|
|
posarr.push(poarr[k]);
|
|
}
|
|
}
|
|
}
|
|
if(this.boxlist[iTemp][i] == -1){
|
|
tarr=[-1,0];
|
|
parr=[];
|
|
poarr =[];
|
|
}else{
|
|
if(i<COL-1){
|
|
tarr=[this.boxlist[iTemp][i],1];
|
|
parr=[];
|
|
parr.push(this.splist[iTemp][i]);
|
|
poarr=[];
|
|
poarr.push([iTemp,i]);
|
|
}else{
|
|
tarr=[-1,0];
|
|
parr=[];
|
|
poarr =[];
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
iTemp++;
|
|
}
|
|
var cTemp = arr[0][1];
|
|
while(cTemp < arr[0][1]+arr[1][1]){
|
|
var tarr=[-1,0];
|
|
var parr=[];
|
|
var poarr=[];
|
|
for(var i=0;i<RAW;i++){
|
|
if(tarr[0]==-1){
|
|
if(this.boxlist[i][cTemp]>-1){
|
|
tarr[0] = this.boxlist[i][cTemp];
|
|
tarr[1] = 1;
|
|
parr.push(this.splist[i][cTemp]);
|
|
poarr.push([i,cTemp]);
|
|
}
|
|
}else{
|
|
if(this.boxlist[i][cTemp] == tarr[0]){//相同块
|
|
if(this.boxlist[i][cTemp]>-1){
|
|
tarr[1]++;
|
|
parr.push(this.splist[i][cTemp]);
|
|
poarr.push([i,cTemp]);
|
|
if(i==RAW-1){
|
|
if(tarr[1]>=3){//个数大于等于3
|
|
for(var k=0;k<parr.length;k++){
|
|
var bTemp=0;
|
|
for(var m=0;m<sparr.length;m++){
|
|
if(sparr[m]==parr[k]){
|
|
bTemp = 1;
|
|
}
|
|
}
|
|
if(bTemp==0){
|
|
sparr.push(parr[k]);
|
|
posarr.push(poarr[k]);
|
|
}
|
|
}
|
|
tarr=[-1,0];
|
|
parr=[];
|
|
poarr =[];
|
|
}
|
|
}
|
|
}
|
|
}else{
|
|
if(tarr[1]>=3){//个数大于等于3
|
|
for(var k=0;k<parr.length;k++){
|
|
var bTemp=0;
|
|
for(var m=0;m<sparr.length;m++){
|
|
if(sparr[m]==parr[k]){
|
|
bTemp = 1;
|
|
}
|
|
}
|
|
if(bTemp==0){
|
|
sparr.push(parr[k]);
|
|
posarr.push(poarr[k]);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(this.boxlist[i][cTemp] == -1){
|
|
tarr=[-1,0];
|
|
parr=[];
|
|
poarr=[];
|
|
}else{
|
|
if(i<RAW-1){
|
|
tarr=[this.boxlist[i][cTemp],1];
|
|
parr=[];
|
|
parr.push(this.splist[i][cTemp]);
|
|
poarr=[];
|
|
poarr.push([i,cTemp]);
|
|
}else{
|
|
tarr=[-1,0];
|
|
parr=[];
|
|
poarr=[];
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
cTemp++;
|
|
}
|
|
if(posarr.length>0){
|
|
return true;//有可消除方格
|
|
}else{
|
|
utlplayWav("00003.mp3",2);
|
|
return false;//无可消除方格
|
|
|
|
}
|
|
};
|
|
}
|
|
if(typeof(Board.prototype.clear) == "undefined"){
|
|
Board.prototype.clear = function(posarr,sparr){//消除符合要求的方格
|
|
if(sparr.length == 0){return;}
|
|
|
|
for(var i=0;i<sparr.length;i++){
|
|
set_self(sparr[i],1,17,0,0);
|
|
play_ani(1,sparr[i],43,1,13,0,CLEARTIME,0,0,0,1,0,0);
|
|
}
|
|
utlscore(posarr);
|
|
};
|
|
}
|
|
if(typeof(Board.prototype.judgeplace) == "undefined"){
|
|
Board.prototype.judgeplace = function(block){//判断当前块是否有地方可放置
|
|
|
|
};
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|