【2048强势来袭】第九期:2048游戏bug修复

        照着【2048强势来袭】系列的文章做完了2048的游戏,感觉还不错,也算是一个简单的游戏开发了,下面总结一个自己遇到的问题:

       1、当所有的块满了,手指姿势错误时,报错

        这个是我们检测游戏是不是结束的时候,使用的是,如果有一个块的数据是等于0或者有存在两边相等的情况,这时候游戏就是没有没有结束的,但是我们在autoCreateCardNumber()添加的时候并没有判断格子里面是不是有空位,这样就会出现死循环。

       修改:

//默认是不能添加的
    bool add_flag=false;
    for(int m=0;m<4;m++){
        for(int n=0;n<4;n++){
            if(cardArr[m][n]->getNumber()==0){
                add_flag=true;
            }
        }
    }
    if(add_flag){
        int i = CCRANDOM_0_1()*4;
        int j = CCRANDOM_0_1()*4;
        //求出单元格的宽度和高度

        //判断是否这个位置已存在卡片
        if(cardArr[i][j]->getNumber()>0)
        {
            log("chuangjian");
            autoCreateCardNumber();
        }
        else
        {
            log("begin to create");
            //CardSprite* card = CardSprite::createCardSprite(2, unitSize, unitSize, unitSize*i+140, unitSize*j+20);
            //cardArr[i][j]=card;
            cardArr[i][j]->setNumber(CCRANDOM_0_1()*10 < 5 ? 2: 4); 
        }   

   

     2.应该在判断了方向之后,判断游戏是不是结束了,再继续移动

if (isGameOver) {
        //游戏结束,重新开始游戏
        log("游戏结束");
        Director::getInstance()->replaceScene(TransitionFade::create(1, HelloWorld::createScene()));
    }else{
        log("haiyaotianjia");
        if(direction==1){
            doUp();
        }else if (direction==2)
        {
            doDown();
        }else if (direction==3)
        {
            doLeft();
        }else if (direction==4)
        {
            doRight();
        }
        autoCreateCardNumber();
    }

 

最终效果:

image

共有 0 条评论

Top