Android小项目--2048小游戏,实现原理分析

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();

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值