在HelloWorldScene场景中,声明文件中
private:
//创建一个数组来存放点击的POP
__Array *poparr;
//通过传递过来的点击pop对象获取它上下左右的数据
__Array *checkPopUDLR(PopSprite *pop);
实现文件中,onTouchBegin函数中判断自身格子周围是否有相同的
bool HelloWorld::onTouchBegin(Touch *touch,Event *event){
//初始化数组
poparr = __Array::create();
//获取触摸的X Y值
Point touchPO = touch->getLocation();
//获取屏幕大小
Size visibleSize = Director::getInstance()->getVisibleSize();
//得到了每个格子的位置,可以用来判读格子周围的一些
PopSprite *pops = getPopStarSprite(visibleSize,touchPO);
if(pops != NULL){
//点击的时候检测
poparr = checkPopUDLR(pops);
}
return true;
}
具体的用checkPopUDLR函数中的算法来实现
//通过传递过来的点击pop对象获取它上下左右的数据
__Array * HelloWorld::checkPopUDLR(PopSprite *pop){
__Array *arr = __Array::create();
bool isDoublePop = false;//如果有两个以上的,自身也返回
//判断点击位置往上的相同数
int up = pop->getPOPY();
for (int yu = up + 1; yu < 10; yu++) {
//如果当前位置和上一个位置是一样的话
if(popStarSprite[pop->getPOPX()][yu]->getNumber() == popStarSprite[pop->getPOPX()][up]->getNumber()){
arr->addObject(popStarSprite[pop->getPOPX()][yu]);
popStarSprite[pop->getPOPX()][yu]->setNumber(-1);
isDoublePop = true;
}else{
break;
}
}
//判断点击位置往上的相同数
int ud = pop->getPOPY();
for (int yd = ud - 1; yd >= 0; yd--) {
//如果当前位置和上一个位置是一样的话
if(popStarSprite[pop->getPOPX()][yd]->getNumber() == popStarSprite[pop->getPOPX()][ud]->getNumber()){
arr->addObject(popStarSprite[pop->getPOPX()][yd]);
popStarSprite[pop->getPOPX()][yd]->setNumber(-1);
isDoublePop = true;
}else{
break;
}
}
//判断点击位置往左的相同数
int ul = pop->getPOPX();
for (int xl = ul - 1; xl >= 0; xl--) {
if(popStarSprite[xl][pop->getPOPY()]->getNumber() == popStarSprite[ul][pop->getPOPY()]->getNumber()){
arr->addObject(popStarSprite[xl][pop->getPOPY()]);
popStarSprite[xl][pop->getPOPY()]->setNumber(-1);
isDoublePop = true;
}else{
break;
}
}
//判断点击位置往右的相同数
int ur = pop->getPOPX();
for (int xr = ur + 1; xr < 10; xr++) {
if(popStarSprite[xr][pop->getPOPY()]->getNumber() == popStarSprite[ur][pop->getPOPY()]->getNumber()){
arr->addObject(popStarSprite[xr][pop->getPOPY()]);
popStarSprite[xr][pop->getPOPY()]->setNumber(-1);
isDoublePop = true;
}else{
break;
}
}
if(isDoublePop){
arr->addObject(popStarSprite[pop->getPOPX()][pop->getPOPY()]);
}
}