break;
case 2:
// 向下滑动
swipeDown();
break;
case 3:
// 向上滑动
swipeUp();
break;
default:
break;
}
default:
break;
}
}
return true;
});
}
-
添加滑动事件(这里举例上滑):
-
简要说一下此处实现的游戏玩法算法:首先用for循环一行一行地去遍历每一个cell,然后从当前的位置往右去遍历,判断如果获取到了某一个值不是空的,此时有两种情况,一是当前位置上的值是空的,此时把获取到的值放到当前位置上,同时把获取到的位置上的数字清掉;二是当前位置上的值不是空的,并且获取到的值和当前位置上的值相同,则把合并这两个卡片,把当前位置上的值乘以二,同时把获取到的位置上的数字清掉。
-
还有一种情况是,如果我们当前位置上是空的,然后把右边的值放到当前的位置上去了,此时继续往后边(右边)去遍历,后边的位置还是空的,然后右边又有一个数字和之前放过去的数字是一样的情况的话,也是把它放到这个空位置上去了,这时会发生一个状况:这两张数字实际是一样的,但是它们并不合并。为了避免这种情况的发生,我们再让它去遍历一次,即让x-- ,这样这个问题就解决了。
//上滑事件
private void swipeUp() {
// 判断是否需要添加数字
boolean needAddDigital = false;
for (int i = 0; i < gridColumnCount; i++) {
for (int j = 0; j < gridColumnCount; j++) {
// 获取当前位置数字
int currentDigital = cells[j][i].getDigital();
someData.add(currentDigital);
if (currentDigital != 0) {
// 记录数字
if (recordPreviousDigital == -1) {
recordPreviousDigital = currentDigital;
} else {
// 记录的之前的数字和当前数字不同
if (recordPreviousDigital != currentDigital) {
// 加入记录的数字
dataAfterSwipe.add(recordPreviousDigital);
recordPreviousDigital = currentDigital;
} else {// 记录的之前的数字和当前的数字相同
// 加入*2
dataAfterSwipe.add(recordPreviousDigital * 2);
// 记录得分
recordScore(recordPreviousDigital * 2);
// 重置记录数字
recordPreviousDigital = -1;
}
}
}
}
if (recordPreviousDigital != -1) {
dataAfterSwipe.add(recordPreviousDigital);
}
// 补0
for (int p = dataAfterSwipe.size(); p < gridColumnCount; p++) {
dataAfterSwipe.add(0);
}
// 若原始数据和移动后的数据不同,视为界面发生改变
if (!someData.equals(dataAfterSwipe)) {
needAddDigital = true;
}
someData.clear();
// 重新设置格子数据
for (int k = 0; k < dataAfterSwipe.size(); k++) {
cells[k][i].setDigital(dataAfterSwipe.get(k));
}
// 重置数据
recordPreviousDigital = -1;
dataAfterSwipe.clear();
}