请斑竹将前序版本删除。
有谁会网络编程,给个提示怎么写联机的连连看
//判断两副图是否能连接 //px,py为第一副图坐标 px2,py2为第二副图坐标 //pickey[i,j]为存储图片值数组,值为-1时表示没有图片,如下 // -1-1-1-1-1-1 -1 // -1 0 1 2 3 4 -1 // -1 5 6 7 8 9 -1 // -1 0 1 2 3 4 -1 // -1-1-1-1-1-1 -1
//key[i,j]为存储图片所能连线数组,初始为0,为2时表示两副图有交叉 //如下图pickey数组,两个0可以消,两副图上下左右所能到达的空图(即pickey[i,j]==-1)key值加1,则key数组如右 // -1 -1-1-1-1-1 -1 0100000 // -1 0 1 2 3 4 -1 1000000 // -1 -1 6 7 8 9 -1 0100000 // -1 -1 0 2 3 5 -1 1200000 // -1 -1-1-1-1-1 -1 0110000 //有一个key值为2,所以可以连
private bool canline(int px,int py,int px2,int py2) { int i,j; int []row=new int[12];//存储每行的key值 int []col=new int[22];//存储每列的key值 bool flag=false; if(px2==px&&py2==py) return false;//两副图为同一张图,不能消 if(pickey[px,py]!=pickey[px2,py2]) return false;//两副图不一样,不能消 if(pickey[px,py]==-1||pickey[px2,py2]==-1) return false;//有一张图为空图,不能消 if((px2==px&&py2==py-1)||(px2==px&&py2==py+1)||(py2==py&&px2==px+1)||(py2==py&&px2==px-1)) return true;//两张图相临,能消 //有一张图四周被其他图片包围,不能消 if((pickey[px-1,py]>=0&&pickey[px+1,py]>=0&&pickey[px,py-1]>=0&&pickey[px,py+1]>=0)||(pickey[px2-1,py2]>=0&&pickey[px2+1,py2]>=0&&pickey[px2,py2-1]>=0&&pickey[px2,py2+1]>=0)) return false; //key数组初始为0 for(i=0;i<x+1;i++) for(j=0;j<y+1;j++) { key[i,j]=0; } //(px,py)点对应图左边为空,则key值+1 for(i=px-1;i>=0;i--) { if(pickey[i,py]>=0) break; key[i,py]++;
} //(px,py)点对应图右边为空,则key值+1 for(i=px+1;i<=x;i++) { if(pickey[i,py]>=0) break; key[i,py]++;
} //(px,py)点对应图上边为空,则key值+1 for(j=py-1;j>=0;j--) { if(pickey[px,j]>=0) break; key[px,j]++; } //(px,py)点对应图下边为空,则key值+1 for(j=py+1;j<=y;j++) { if(pickey[px,j]>=0) break; key[px,j]++; } //(px2,py2)点对应图左边为空,则key值+1 for(i=px2-1;i>=0;i--) { if(pickey[i,py2]>=0) break; key[i,py2]++;
} //(px2,py2)点对应图右边为空,则key值+1 for(i=px2+1;i<=x;i++) { if(pickey[i,py2]>=0) break; key[i,py2]++;
} //(px2,py2)点对应图上边为空,则key值+1 for(j=py2-1;j>=0;j--) { if(pickey[px2,j]>=0) break; key[px2,j]++; } //(px2,py2)点对应图下边为空,则key值+1 for(j=py2+1;j<=y;j++) { if(pickey[px2,j]>=0) break; key[px2,j]++; } for(i=0;i<=x;i++) for(j=0;j<=y;j++) { if(key[i,j]==2) return true;//key值为2,表示有交叉,可以消 col[i]+=key[i,j];//累计每一列的总值 row[j]+=key[i,j];//累计每一行的总值 } //列值>=2,且此列两图中间无其他图,可以消 for(i=0;i<=x;i++) if(col[i]>=2) { flag=true; if(py2>py) { for(j=py;j<=py2;j++) if(pickey[i,j]>=0) {flag=false;break;} } else for(j=py;j>=py2;j--) if(pickey[i,j]>=0) {flag=false;break;} if(flag) return true; } //行值>=2,且此列两图中间无其他图,可以消 for(j=0;j<=y;j++) if(row[j]>=2) { flag=true; if(px2>px) { for(i=px;i<=px2;i++) if(pickey[i,j]>=0) {flag=false;break;} } else for(i=px;i>=px2;i--) if(pickey[i,j]>=0) {flag=false;break;} if(flag) return true; } return flag; }