下面讲解今天的重头戏,就是如何吧两个符合规则的图片链接起来。这个杂眼看起来很简单,不过BOY 也是费了很大的周折。

其实我发现连连第二个重要的算法就是这个了。不过BOY 想到了一个很简单的解决办法。

下面就讲解一下。

大家看到这个连接的红线了,或许刚开始 可能看不出来这有什么规律,我也是研究和一下,看看希望怎么把这个算法告诉大家。
大家看到这个红线的时候 主要看那两个拐角的地方。其实在做的时候BOY 发现所有的线都是指向拐角处的。我画个图大家就明白了。

通过上一章的算法讲解我们很容易知道 那个拐角处的点是什么,如果对着一点不明白的先看看上一章连连看的算法。
这里有的朋友要问了,那没有拐角的怎么办呢,其实很好办,我之所以非要知道这个拐角是因为,这个拐角就是这个链接的结束。对已没有拐角的我就假设一个拐角,让其中的一条线指向他就可以了。简答一点说就是连连看中所有的连接线都是一条线段或者多条线段组成的,只是在游戏中我们看到只会是一气呵成的线。既然有线段 那么大家在初中的时候就知道线段有开始点和结束点。
然后我们在程序中就是想法求出这些线段的开始点和结束点就可以了。

有这个思想以后 我们就开始我们程序之旅 我上部分代码

[cpp]  view plain  copy
  1. void LLKAlgorithm::lineWay(cocos2d::CCArray* array,cocos2d::CCArray* htiarray,bool orishen){
  2. CustomSprite* hit1=(CustomSprite*)htiarray->objectAtIndex(0);// 取出第一个
  3. CustomSprite* hit2=(CustomSprite*)htiarray->objectAtIndex(1);// 取出第二个
  4. CustomSprite* pEnd=NULL; // 结束点
  5. CustomSprite* pStar=NULL;// 开始点
  6. // 看看这两个点 有没有开始点 如果没有 就把hit1 设置成 结束点 hit2 设置成 开始点
  7. if (hit1->getOriginal()==1){
  8. pEnd=hit1;
  9. pStar=hit2;
  10. }
  11. if (hit2->getOriginal()==1){
  12. pEnd=hit2;
  13. pStar=hit1;
  14. }
  15. if (pEnd==NULL){
  16. pEnd=hit1;
  17. pStar=hit2;
  18. }
  19. pEnd->setPath(0);
  20. if (orishen){
  21. int temppath=1;// 设置当前 直线的方向
  22. if(pStar->getX()>pEnd->getX()){
  23. temppath=3;
  24. }
  25. for (int i=0;i<array->count();i++){
  26. CustomSprite* hitteim=(CustomSprite*) array->objectAtIndex(i);
  27. if (hitteim!=pEnd){
  28. hitteim->setPath(temppath);
  29. }
  30. }
  31. }else {
  32. int temppath=2;// 设置当前 直线的方向
  33. if(pStar->getY()<pEnd->getY()){
  34. temppath=4;
  35. }
  36. for (int i=0;i<array->count();i++){
  37. CustomSprite* hitteim=(CustomSprite*) array->objectAtIndex(i);
  38. if (hitteim!=pEnd){
  39. hitteim->setPath(temppath);
  40. }
  41. }
  42. }
  43. }

通过上面的这个只是没有拐角的连点连通的直线如何去画,不过看过BOY 的算法的人都知道,BOY 最后的步骤都是吧这些拐角都转化成了 两点直线连接的。所以来说就这个就可以了。

下面就说下道具的使用
连连看中最常用的道具, 查找道具  炸弹 道具 重新排序道具。这三种最重要和最常用的道具,下面我就说下这三个道具的是如何通过算法实现的,
第一个查找道具
实现代码如下

[cpp]  view plain  copy
  1. void LLKGameLayer::seachCallBack(cocos2d::CCObject* psend){
  2. LLKmapLayer* lLKmapLayer=(LLKmapLayer*) this->getChildByTag(1);
  3. CCArray* llkarry= lLKmapLayer->getllkArray();
  4. CCArray* searcharr=CCArray::create();
  5. for(int i=0;i<llkarry->count();i++){
  6. CustomSprite* custom=(CustomSprite*)llkarry->objectAtIndex(i);
  7. if (custom->getIsEliminate()==false){
  8. searcharr->addObject(custom);
  9. for(int j=0;j<llkarry->count();j++){
  10. CustomSprite* custom2=(CustomSprite*)llkarry->objectAtIndex(j);
  11. if (custom2->getIsEliminate()==false){
  12. if (custom2!=custom){
  13. if (custom->getIndex()==custom2->getIndex()){
  14. searcharr->addObject(custom2);
  15. break;
  16. }
  17. }
  18. }
  19. }
  20. if(searcharr->count()==2){
  21. CCArray* temp=LLKAlgorithm::algorithm(lLKmapLayer->gettotalArray(),searcharr);
  22. if (temp->count()>0){
  23. break;
  24. }else{
  25. LLKAlgorithm::removeAllArray(searcharr,false);
  26. }
  27. }
  28. }
  29. }
  30. if (searcharr->count()==2){
  31. for(int i=0;i<searcharr->count();i++){
  32. CustomSprite* temp=(CustomSprite*)searcharr->objectAtIndex(i);
  33. temp->displayHitPic(1);
  34. }
  35. LLKAlgorithm::removeAllArray(searcharr,false);
  36. }
  37. }

上面的代码主要实现思路就是 把剩下的还没消除的图片 循环取出 两张相同的图片,然后通过我们上一章讲解的算法来判断这两章图片是否相连。如果找到那么就把这两张图片标示出来。  是不是很简单 哈哈。

第二个算法 
炸弹 这个我感觉是最简单的了 
代码如下

[cpp]  view plain  copy
  1. void LLKGameLayer::boomCallBack(cocos2d::CCObject* psend){
  2. LLKmapLayer* lLKmapLayer=(LLKmapLayer*) this->getChildByTag(1);
  3. CCArray* llkarry= lLKmapLayer->getllkArray();
  4. CCArray* temparry=CCArray::create();
  5. for(int i=0;i<llkarry->count();i++){
  6. CustomSprite* custom=(CustomSprite*)llkarry->objectAtIndex(i);
  7. if (custom->getIsEliminate()==false){
  8. temparry->addObject(custom);
  9. }
  10. }
  11. if(temparry->count()>=2){
  12. CustomSprite* custom=(CustomSprite*)temparry->randomObject();
  13. CustomSprite* temp=NULL;
  14. for(int i=0;i<temparry->count();i++){
  15. temp=(CustomSprite*)temparry->objectAtIndex(i);
  16. if(custom!=temp){
  17. if(custom->getIndex()==temp->getIndex()){
  18. break;
  19. }
  20. }
  21. }
  22. if(temp!=NULL){
  23. temp->displayHitPic(3);
  24. }
  25. custom->displayHitPic(3);
  26. }
  27. }

就是找到两张一样的图片然后让他们呢消失, 哈哈是不是很简单。

第三个也就是重新排序 
这个算法稍微复杂一点不过经过BOY 的手 哪里还有那么的难 废话不多说上代码

[cpp]  view plain  copy
  1. void LLKGameLayer::restCallBack(cocos2d::CCObject* psed){
  2. // 处理方式 取出现在所有的 没有被消除的 元素
  3. LLKmapLayer* lLKmapLayer=(LLKmapLayer*) this->getChildByTag(1);
  4. CCArray* llkarry= lLKmapLayer->getllkArray();
  5. CCArray* temparry=CCArray::create();
  6. for(int i=0;i<llkarry->count();i++){
  7. CustomSprite* custom=(CustomSprite*)llkarry->objectAtIndex(i);
  8. if (custom->getIsEliminate()==false){
  9. custom->displayHitPic(2);
  10. temparry->addObject(custom);
  11. }
  12. }
  13. // 把剩下的元素 取出前半部分 然后随机抽取出来一个 和 后半部分的元素呼唤位置   这样就达到了重排的效果
  14. if (temparry->count()>=2){
  15. int ban=temparry->count()/2;
  16. CCArray* banarr=CCArray::create();
  17. for(int i=0;i<ban;i++){
  18. banarr->addObject(temparry->objectAtIndex(i));
  19. }
  20. int temnum=0;
  21. for(int j=0;j<banarr->count();j++){
  22. CustomSprite* custom=(CustomSprite*)banarr->randomObject();
  23. banarr->removeObject(custom,false);
  24. j--;
  25. CustomSprite* custom2=(CustomSprite*) temparry->objectAtIndex(temnum+ban);
  26. CCPoint ccptem=custom->getPosition();
  27. int x=custom->getX();
  28. int y=custom->getY();
  29. custom->setPosition(custom2->getPosition());
  30. custom->setX(custom2->getX());
  31. custom->setY(custom2->getY());
  32. custom2->setPosition(ccptem);
  33. custom2->setX(x);
  34. custom2->setY(y);
  35. temnum++;
  36. }
  37. }
  38. }

这个算法的思路是这样 把剩下的图片 分成两分,然后拿着第一份随机抽取里面的图片和后面的元素兑换剩下的那半分兑换,坐标 这样就实现了重新刷新,哈哈是不是很简单,其实做了连连看的这个算法的东西BOY 我深深的迷恋上算法,以后我的教程中会对游戏中常用的算法进行讲解。 以最通俗明了的办法给大家讲解关于算法的东西。

以上到此我们连连看的大部分就整理完了,大家可以把这个稍微改一下就可以做个自己的APP了。大家有疑问的可以加下面的这个群,或者在我的博客给我留言。我会给大家讲解的。

学习连连看 连接线之谜+道具的使用相关推荐

  1. 【solidity学习】僵尸之谜一

    我们开始做一个NFT游戏"僵尸之谜",类似于迷恋猫.话不多说,现在开始. 需求分析.  知道需求后,首先使用solidity在线工具Remix - Ethereum IDE, 新建 ...

  2. 猪猪侠的黑客学习路线

    猪猪侠是谁,我想说,他应该是我们这一代黑客都想成为的人 在"知乎"上,"如何黑掉知乎"的问题被提出后,他就跟帖贴出了密码库的连接密码和用户数据的信息结构. 36 ...

  3. 学计算机动漫设计软件,动漫设计需要学习哪些软件?

    众所周知,现在的动漫片大量运用的是电脑技术,那么,在动漫制作时要使用那些软件呢?动漫设计需要学习哪些软件呢?下面我们就来了解一下. 如果你想快速提升自己的绘画水平,并且绝对的不怕辛苦,欢迎挑战轻微课魔 ...

  4. 国产解谜游戏《盲点》:扬长避短,解谜与剧情相得益彰的精品

    <盲点>是由无限飞(Unlimited Fly Games)工作室开发的一款第一人称冒险解谜游戏,游戏早在去年10月的时候就以VR游戏的形式在PSVR发售,不过当时游戏的剧情尚未完成,只发 ...

  5. [unreal4入门系列之四] 熟悉虚幻4项目浏览器界面

    虚幻4项目浏览器界面有两个大选项卡,一个是项目,一个是新建项目. 项目选项卡 项目选项卡包含了过去创建或购买的项目.示例.如果项目版本不兼容当前的UE4版本,将会显示灰色的项目图标,你可以对其进行升级 ...

  6. MMO游戏数值框架概述(偏模拟方向)

    - 作者:雪焰  2011-8-14 转载:http://bbs.gameres.com/thread_171173.html 概述: 本文讨论了以下几个模块: 1.国内游戏数值的现状 2.游戏数值策 ...

  7. 关于图片的多标签分类(1)

    最近还在处理人脸附件(眼镜,刘海,口罩,帽子)的multi-label分类.给自己普及一下常识性问题: 1)什么是multi-label分类? multi-label分类,常见一张图片中可以存在多个目 ...

  8. 黑客暗战 —— 黑帽、白帽、灰帽背后的隐秘世界

    "世界上有三种人:一种是被黑过,一种是不知道自己被黑过,还有一种是不承认自己被黑过." 一位穿着灰衬衣黑长裤的年轻人在发表演讲.他中等个头.精瘦,略显紧张地单手插在口袋里.台下黑压 ...

  9. 猿学~黑客、红客、白帽子之间的技术较量,为什么大公司都有黑客团队?

    [全栈开发者2017年04月14日讯]QQ号.信用卡密码.企业核心数据库,在地下黑色产业链上,互联网上的一切信息都可能成为黑帽子黑客牟利的工具.处于防御姿态的白帽子黑客在与黑帽子黑客的较量中,赢一次不 ...

最新文章

  1. R语言构建随机森林模型错误解决:Error in y - ymean : non-numeric argument to binary operator
  2. grub error:unknown filesystem的解决方案
  3. python为什么这么火 知乎-没想到 Google 排名第一的编程语言,为什么会这么火?...
  4. 申万一级行业日指数_申万一级行业指数一周表现
  5. 拼接 结果集_MetaQuast:评估宏基因组拼接
  6. gdb 10.2的安装
  7. leetcode 628. 三个数的最大乘积(排序)
  8. [C++]MySQL数据库操作实例
  9. java跑到linux上,Java程序在Linux上运行虚拟内存耗用很大
  10. Kubernetes 核心概念 1
  11. 解决IE8上传文件时javascript取文件的本地路径的问题C:\fakepath\..
  12. Java多线程优化方法及使用方式
  13. Windows操作系统正版盗版知识简介
  14. 通过python程序调取摄像头画面
  15. 离散数学题目——派谁出国学习
  16. win10上安装ubunt18双系统过程中出现mmx64.efi not found问题
  17. 1.9 Cubemx_STM32F4_57步进电机(一)----驱动代码
  18. 微信已发图片群里服务器撤回,怎样撤回微信群发的信息?撤不回怎么办?
  19. FSCapture(录屏,截屏软件)
  20. 一个很好用的maven settings.xml 配置文件镜像

热门文章

  1. Adobe Acrobat 打开PDF文件显示 “内容准备进度”窗口
  2. Shadow滤镜的副作用
  3. 天合光能产品怎么样?新一代光储电站系统全球发布
  4. Memristor+Matlab 仿真(四)
  5. 项目复盘会议实战经验与教训
  6. html5加js实现本地文件读取和写入并获取本地文件路径
  7. 阿里云Linux服务器漏洞修复 ( 继续汇总中 )
  8. bibtex到bibitem的转换的超详细教程(获取参考文献的bibitem)
  9. 【实用工具】QQ自动发消息
  10. Python批量操作文件写入数据库及从数据库取数据!