1、算法环境:

这是一个判断元素匹配的算法。
假设三个相同元素连在一起可以消除,且不可以斜向消除。

2、思路:

通过二维数组的循环遍历得到一个 x * y 的矩形。
x轴从左到右递增,y轴从上到下递增。
以第一个选中的元素为起点开始遍历。
创建一个二维数组用来表示元素位置(items[ , ]),
创建Item类,定义X、Y、Type(元素种类)。
创建三个List用来存储相同元素:横向遍历到的所有相同元素,纵向遍历到的所有相同元素,
以及该算法返回的最终可消除元素(即横向List+纵向List)。

3、下面是代码:

  ` /// <summary>/// 匹配算法/// </summary>/// <param name="sweet">选中的元素</param>/// <param name="newX">该元素的X轴坐标</param>/// <param name="newY">该元素的Y轴坐标</param>/// <returns></returns>public List<GameItems> MatchItems(GameItems item, int itemX, int itemY){//横向遍历到的所有相同元素List<GameItems> matchRowItems = new List<GameItems>();//纵向遍历到的所有相同元素List<GameItems> matchLineItems = new List<GameItems>();//最终可消除元素List<GameItems> finishedMatchItems = new List<GameItems>();//先将选中的元素加入行匹配ListmatchRowItems.Add(item);//横向遍历//i=0代表往左遍历,i=1代表往右遍历//Column为横向最大值for (int i = 0; i <= 1; i++){for (int xDistance = 1; xDistance < Column; xDistance++){int x;//←if (i == 0){x = itemX- xDistance;}//→else{x = itemX+ xDistance;}//判断横向是否到达边界if (x < 0 || x >= Column){break;}//判断是否为同一种元素if (items[x, itemY].Type == items[x, itemY].Type){//加入行listmatchRowItems.Add(items[x, itemY]);}else{break;}}}//如果横向达到要求if (matchRowItems.Count >= 3){//将符合要求的元素放入finishedMatchItems for (int i = 0; i < matchRowItems.Count; i++){finishedMatchItems .Add(matchRowItems[i]);}}//当元素程型 L 或 T 型//如果横向达到要求if (matchRowItems.Count >= 3){for (int i = 0; i < matchRowItems.Count; i++){//满足条件的元素依次纵向匹配//0代表往上遍历,1代表往下遍历//Row为纵向最大值for (int j = 0; j <= 1; j++){int y;for (int yDistance = 1; yDistance < Row; yDistance++){//↑if (j == 0){y = itemY - yDistance;}//↓else{y = itemY + yDistance;}//限制边界if (y < 0 || y >= Row){break;}//如果符合条件的行匹配元素的上下方向的元素为同一种,就将其添加到matchLineItems 中if (items[matchRowItems[i].X, y].Type ==items[matchRowItems[i].X, y].Type){matchLineItems.Add(items[matchRowItems[i].X, y]);}else{break;}}}//如果列list不满足条件,就清空Listif (matchLineItems.Count < 2){   matchLineItems.Clear();}//如果满足条件,将符合要求的元素放入finishedMatchItems中else{for (int j = 0; j < matchLineItems.Count; j++){finishedMatchItems.Add(matchLineItems[j]);}break;}}}//如果finishedMatchItems中的元素数量符合消除要求,就返回finishedMatchItemsif (finishedMatchItems.Count >= 3){return finishedMatchItems;}//ClearmatchRowItems.Clear();matchLineItems.Clear();

纵向同理~复制粘贴上面的然后改个坐标和存储的List就可以了。
以上就是我个人学习到的消消乐中最简单的算法,希望能对大家有帮助。

有更好的方法欢迎指点。

Unity 消消乐中最简单的算法相关推荐

  1. 机器学习中较为简单的算法有哪些?

    链接:https://www.zhihu.com/question/431924548 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 作者:石塔西 https://www.zhihu.com/ ...

  2. 在 asp.net mvc中的简单分页算法 (续)

    在上个月发表的 http://www.cnblogs.com/bwangel/p/mvcpager.html 中,讨论了一下asp.net mvc中结合Entity framework框架进行的分页, ...

  3. Unity 3D游戏-消消乐(三消类)教程和源码

    Unity 消消乐教程和源码 本文提供全流程,中文翻译. Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Start Game ...

  4. 【游戏开发实战】使用Unity制作水果消消乐游戏教程(八):游戏得分加分效果

    文章目录 一.前言 二.使用TextMeshPro显示得分 1.导入TTF字体到工程中 2.创建字源txt文件 3.生成字体asset 4.制作得分预设 三.得分数字动画 四.得分代码 五.运行测试 ...

  5. 【Unity】消消乐游戏开发流程

    消消乐核心功能是消除物品的生成,是一个很有画面感的生成,而不是一下子生成,那么就需要考虑使用协程或Invoke定时调用方法执行生成要消除的物品A(后称'A'),一般都是SpriteRenderer.如 ...

  6. 开心消消乐简单消除检测

    最近在b站上看一个Unity教学视频,制作开心消消乐.个人感觉视频中的消除方法写得很随意,有点不爽,于是自己新写了个方法. 基本规则:三个或三个以上元素,横着连一起算消除,竖着连一起算消除. L形和T ...

  7. c语言解张静态的消消乐的图片,开心消消乐:那些迷失在消消乐的小时光,我们中招都一个样...

    无聊的时候想到缓解一下压力,对于一个上班族没时间打竞技类手游的我,只有消消能玩一下了,这个游戏简单容易上手主要是还不占据内存,大人孩子都喜欢,但是我慢慢发现100关以内真的很简单,但是过了100关之后 ...

  8. 从零开始制作基于Unity引擎的宝石消消乐(三)

    完整项目我已经放到GitHub啦~ GitHub: https://github.com/lucaschen1993/Lukastar 前言 前两篇把消消乐的设计以及基本操作的方法都讲了,这章开始讲消 ...

  9. 从零开始制作基于Unity引擎的宝石消消乐(一)

    完整项目我已经放到GitHub啦~ GitHub: https://github.com/lucaschen1993/Lukastar 市场上有些消消乐真好玩,比如hxxxxxpop,pxxxxsag ...

最新文章

  1. 第18章:MYSQL分区
  2. Lucene+Tika 文件索引的创建与搜索
  3. UNIX V6内核源码剖析——unix v6 全貌
  4. 随心篇第九期:我不愿一无所有
  5. 常用查找算法(顺序、折半、二叉树、哈希、分块)介绍
  6. php 判断中英文冒号,判断字符串是否含有中英文和数字
  7. 使用VUE搭建后台管理系统(使用vue-cli搭建框架)
  8. 蓝桥杯国赛之阶乘位数
  9. 创建Spring项目没有Spring Config文件怎么办
  10. padStart()和padEnd()方法
  11. 五分钟就能上手的Android APP开发入门教程!!!
  12. 2011腾讯QQ通用BUG和变态小秘密!
  13. 随笔随想-2022-06-07
  14. python棋牌游戏开发之斗地主
  15. 语音合成数据解决方案助您获取专属AI声音
  16. 机器学习笔记十五之图片文字识别
  17. java se中的se指什么,什么是Java SE?
  18. 异步FIFO格雷码及同步相关问题?
  19. ui设计师与android,总算知道ui设计师适配的知识点
  20. 计算机如何在本地硬盘安装WinPE系统

热门文章

  1. Pandas截取列部分字符,并据此修改另一列的数据
  2. 有关python方面的论文_有关python基础知识的文章推荐5篇
  3. Docker容器学习梳理--应用程序容器环境部署
  4. 解决URL传参中文乱码
  5. free命令详解(转载)
  6. 多线程并发的一些解决思路
  7. 貌似AppSpot com被封了
  8. 使用XML、XSLT和XPath创建可排序、分页、重用的数据显示页
  9. rust 文件读写操作
  10. Redis监控工具_RedisLive