现在是九点四十多快十点了,我做完了左哥给我们布置的作业了。
连连看的进阶,迷宫算法。
连连看的规则是只能消去行竖或者是一拐和俩拐的。
所以我写了四个方法,两个是行竖判断,如果是相连或者中间有空隙就消除。
一个拐点的方法是判断两个相同图形所组成矩阵的对角,判断两对角是否为空,然后再用行竖方法判断。
两个拐点的方法是:从第一个选中的图形向四周出发,一个个点判断一个拐点的消除方法。
代码如下:
//判断行消除
public boolean checkRow(int Row1,int Column1,int Row2,int Column2){
if(Row1 == Row2){
int ColumnMin = Math.min(Column1, Column2);
int ColumnMax = Math.max(Column1, Column2);
for(int i=ColumnMin+1;i<ColumnMax;i++){
if(!"".equals(model.value[Row1][i])){
return false;
}
}
return true;
}
return false;
}
//判断列消除
public boolean checkColumn(int Row1,int Column1,int Row2,int Column2){
if(Column1 == Column2){
int RowMin = Math.min(Row1, Row2);
int RowMax = Math.max(Row1, Row2);
for(int i=RowMin+1;i<RowMax;i++){
if(!"".equals(model.value[i][Column1])){
return false;
}
}
return true;
}
return false;
}
//判断一个拐点消除
public boolean onePoint(int Row1,int Column1,int Row2,int Column2){
//如果同行同列则无一个拐点
if(Row1 == Row2||Column1 == Column2){
return false;
}
//两个对角拐点:
// Row1 Column2 Row2 Column1
//判断拐点Row1 Column2是否为空
if("".equals(model.value[Row1][Column2])){
if(checkRow(Row1, Column1, Row1, Column2)&&
checkColumn(Row1, Column2, Row2, Column2)){
return true;
}
}
//判断拐点Row2 Column1是否为空
if("".equals(model.value[Row2][Column1])){
if(checkColumn(Row1, Column1, Row2, Column1)&&
checkRow(Row2, Column1, Row2, Column2)){
return true;
}
}
return false;
}
//判断两个拐点消除
public boolean twoPoint(int Row1,int Column1,int Row2,int Column2){
//向左寻找
for(int i=Row1;i>0;i--){
if("".equals(model.value[i][Column1])&&onePoint(i, Column1, Row2, Column2)){
return true;
}
}
//向右寻找
for(int i=Row1;i<model.value.length;i++){
if("".equals(model.value[i][Column1])&&onePoint(i, Column1, Row2, Column2)){
return true;
}
}
//向上寻找
for(int i=Column1;i>0;i--){
if("".equals(model.value[Row1][i])&&onePoint(Row1, i, Row2, Column2)){
return true;
}
}
//向下寻找
for(int i=Column1;i<model.value[0].length;i++){
if("".equals(model.value[Row1][i])&&onePoint(Row1, i, Row2, Column2)){
return true;
}
}
return false;
}
以下是我的连连看用四个方法消除后的游戏结局:
这个游戏还有点小小的bug:做完了两拐的方法之后发现了有时候可以三拐消除、有时候甚至是可以消除被围住的图形
虽然有点无伤大雅的小bug。
但是做完了连连看,我还是挺开心的,现在还没下课,我就继续看看怎么补一下bug吧。