美文网首页
常见又好用的消除方法

常见又好用的消除方法

作者: 与时间赛跑_ | 来源:发表于2018-09-24 19:51 被阅读0次

    这个消除方法其实就是上上一篇文章的那个游戏当中的,如果你有兴趣的话,你可以到上上一篇文章中下载下来,也收到了几个反馈bug,有空会尽快迭代。

    下面一起来看看里面的一些关于消除的方法:

    游戏中的每一个块都是基于网格系统来放置的,市面上的很多消除游戏,基本上都是这样的做法,这样可以很好的定位游戏块的位置,还有应对游戏发生的各种情况。

    上图就是块消除的一种方向(这个游戏中只有两个方向上的消除),这个采用的是从网格系统中捕获属性,同步到块中,接着遍历该方向上的块,获取它的是否存在消除条件,让num++,最后判断个数的方法。到这里,对于这种情况,我们可以有很多的方案实现,但是,游戏中还存一种情况;如下:

    游戏过程中可能会出现,两个方向或者更多同时都达到消除条件的时候,这里就比较麻烦一点了,所以请看下面的方法:

    我们把所以的块放在(蓝色)的大容器中,在检查的时候,把满足方向一的东西拿走放在方向1的容器中,同时去掉大容器中该块,同时修改网格系统中对应网格的属性,方向2也是如此。这样分成不同的方向的容器,在消除的时候就可以完全不用去理块对象是否存在等等各种情况。包括一不小心操作空块的情况。

    贴上代码:

    int xindex=-1;

     int yindex=-1;

     int xNum[5]={0,0,0,0,0};

     int yNum[5]={0,0,0,0,0};

     bool haveone=false;//记录方向

     bool havetwo=false;

     for(int x=0;x<=4;x++){

     int tiledNum=0;

     for(int y=0;y<=4;y++){

     if(tiledsprite[x][y]->getTiledflag()){

    tiledNum++;//个数

                }

     if(tiledNum==5){

                    xindex++;

    haveone=true;//该方向达成消除

     int io=0;

     for(auto it=tileds.begin();it!=tileds.end();it++){

     auto p_tiled=*(it);

                        xNum[xindex]=x;

     if(p_tiled->getTagX()==x){

                            io++;

     this->cleanTiled.pushBack(p_tiled);//移动到该方向的容器中

    tileds.eraseObject(p_tiled);//从主容器消除

    it--;//容器元素会重新排序,为了能访问所有块,这里手动-1

                        }

                    }

                }

            }

        }

    //以下同上

     for(int y=0;y<=4;y++){

     int tiledNum = 0;

     for(int x=0;x<=4;x++){

     if(tiledsprite[x][y]->getTiledflag()){

                    tiledNum++;

                }

     if(tiledNum==5){

                    yindex++;

     int io=0;

    havetwo=true;

     for(auto it=tileds.begin();it!=tileds.end();it++){

     auto p_tiled=*(it);

     if(p_tiled->getTagY()==y){

                            io++;

                            yNum[yindex]=y;

     this->cleanTiledother.pushBack(p_tiled);

                            tileds.eraseObject(p_tiled);

                            it--;

                        }

                    }

                }

            }

        }

    至此我们已经收集到来个集合了,里面都是我们从大容器中拿来的满足消除条件和各方向的块了,剩下的就是分情况去处理他们了。好了。

    感谢关注日宅记~

    相关文章

      网友评论

          本文标题:常见又好用的消除方法

          本文链接:https://www.haomeiwen.com/subject/qlshoftx.html