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

常见又好用的消除方法

作者: 与时间赛跑_ | 来源:发表于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--;

                    }

                }

            }

        }

    }

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

感谢关注日宅记~

相关文章

  • 常见又好用的消除方法

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

  • 一周一本书《认知觉醒》(6)

    消除模糊的方法 (1)学习知识,消除认知模糊,学习知识的目的是消除模糊,获取知识的方法也是消除模糊,目的和方法统一...

  • 遍历数据的常见操作

    遍历数据最常见的方法就是for循环,出for循环外也有其他的一些比较好用的方法。 一、 forEach forE...

  • 读书笔记一年顶十年如何才能更受欢迎

    学:如何才能让自己的课程更受欢迎?一简单易懂。多使用常见词之外,多举例子、多打比方。二非常好用,好用的方法论。三充...

  • 如何消除腿上的鸡皮肤 这些方法真心好用

    谈到美丽,谈到护肤,是不是很多人都先想到脸部的保养,貌似很多人也是这么做的,其实不要认为脸上皮肤好其他就可以了...

  • Xcode消除常见警告

    在iOS开发中我们经常会遇到很多Xcode提示的警告,比如某个类被系统废弃了、某个变量只初始化了而未使用等等。这些...

  • 不是所有痘痘都可以针清, 针清痘痘应该注意的事项

    很多女性都会苦恼于脸上的痘痘痘印,于是为了消除痘痘尝试了很多方法。一种常见的祛痘方法就是针清,只是针清适合所有的痘...

  • ps常见七种抠图方法,非常好用又高效

    PS软件可以抠图的工具有很多,针对不同的图可以采用不同的抠图方法。今天分享这七种抠图方法,对于学习PS的新手来说,...

  • 如何缓解眼睛疼痛

    如何缓解眼睛疼痛 3 方法:消除眼睛疲劳防止眼睛疼痛寻求专家帮助 眼睛疼痛的原因有很多,最常见的是用眼过度或眼睛疲...

  • ios绘图基础

    ios绘图才一些场合很好用,这里演示一些基本的方法。 -1 ios绘图基础 -2 ios常见的图形绘制 代码下载:...

网友评论

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

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