2008/8/29

网上偶遇的“砖块消除算法”

该算法并非最优化,但是对于学习来说,非常不错,再次感谢作者的贡献,也希望某日我能够贡献我的算法,共享给大家:-)
s0 和 s1是需要进行判断的砖块二维数组下标
/** 判断用户选择是否可以消除砖块如果可以则重新绘制map1的元素 */
public boolean ac(int s0, int s1) {
// 交换后行砖块是否可以消除
boolean b = false;
int temp = 0;
int temp1 = 0;

for (int i = s1; i >= 0; i--) {
if (map[s0][s1] == map[s0]) {
temp++;
} else {
break;
}
}
for (int i = s1; i <>= 3) {
b = true;
//加分
gared += (temp - 1) * 20;
for (int i = s1; i >= 0; i--) {
if (map[s0][s1] == map[s0]) {
map1[s0] = 0;
} else {
break;
}
}
for (int i = s1; i < i =" s0;">= 0; i--) {
if (map[s0][s1] == map[s1]) {
temp1++;
} else {
break;
}
}
for (int i = s0; i <= 5; i++) { if (map[s0][s1] == map[s1]) { temp1++; } else { break; } } if (temp1 - 1 >= 3) {
b = true;
//加分
gared += (temp - 1) * 20;
for (int i = s0; i >= 0; i--) {
if (map[s0][s1] == map[s1]) {
map1[s1] = 0;
} else {
break;
}
}
for (int i = s0; i <= 5; i++){ if (map[s0][s1] == map[s1]) { map1[s1] = 0; }else { break; } } } return b; } 相关的图示: