Popstar小游戏4(Popstar检测点击POP的上下左右)

在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()]);
    }
}


你可能感兴趣的:(Popstar小游戏4(Popstar检测点击POP的上下左右))