Unity 消消乐中最简单的算法
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 消消乐中最简单的算法相关推荐
- 机器学习中较为简单的算法有哪些?
链接:https://www.zhihu.com/question/431924548 编辑:深度学习与计算机视觉 声明:仅做学术分享,侵删 作者:石塔西 https://www.zhihu.com/ ...
- 在 asp.net mvc中的简单分页算法 (续)
在上个月发表的 http://www.cnblogs.com/bwangel/p/mvcpager.html 中,讨论了一下asp.net mvc中结合Entity framework框架进行的分页, ...
- Unity 3D游戏-消消乐(三消类)教程和源码
Unity 消消乐教程和源码 本文提供全流程,中文翻译. Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) 1 Start Game ...
- 【游戏开发实战】使用Unity制作水果消消乐游戏教程(八):游戏得分加分效果
文章目录 一.前言 二.使用TextMeshPro显示得分 1.导入TTF字体到工程中 2.创建字源txt文件 3.生成字体asset 4.制作得分预设 三.得分数字动画 四.得分代码 五.运行测试 ...
- 【Unity】消消乐游戏开发流程
消消乐核心功能是消除物品的生成,是一个很有画面感的生成,而不是一下子生成,那么就需要考虑使用协程或Invoke定时调用方法执行生成要消除的物品A(后称'A'),一般都是SpriteRenderer.如 ...
- 开心消消乐简单消除检测
最近在b站上看一个Unity教学视频,制作开心消消乐.个人感觉视频中的消除方法写得很随意,有点不爽,于是自己新写了个方法. 基本规则:三个或三个以上元素,横着连一起算消除,竖着连一起算消除. L形和T ...
- c语言解张静态的消消乐的图片,开心消消乐:那些迷失在消消乐的小时光,我们中招都一个样...
无聊的时候想到缓解一下压力,对于一个上班族没时间打竞技类手游的我,只有消消能玩一下了,这个游戏简单容易上手主要是还不占据内存,大人孩子都喜欢,但是我慢慢发现100关以内真的很简单,但是过了100关之后 ...
- 从零开始制作基于Unity引擎的宝石消消乐(三)
完整项目我已经放到GitHub啦~ GitHub: https://github.com/lucaschen1993/Lukastar 前言 前两篇把消消乐的设计以及基本操作的方法都讲了,这章开始讲消 ...
- 从零开始制作基于Unity引擎的宝石消消乐(一)
完整项目我已经放到GitHub啦~ GitHub: https://github.com/lucaschen1993/Lukastar 市场上有些消消乐真好玩,比如hxxxxxpop,pxxxxsag ...
最新文章
- 第18章:MYSQL分区
- Lucene+Tika 文件索引的创建与搜索
- UNIX V6内核源码剖析——unix v6 全貌
- 随心篇第九期:我不愿一无所有
- 常用查找算法(顺序、折半、二叉树、哈希、分块)介绍
- php 判断中英文冒号,判断字符串是否含有中英文和数字
- 使用VUE搭建后台管理系统(使用vue-cli搭建框架)
- 蓝桥杯国赛之阶乘位数
- 创建Spring项目没有Spring Config文件怎么办
- padStart()和padEnd()方法
- 五分钟就能上手的Android APP开发入门教程!!!
- 2011腾讯QQ通用BUG和变态小秘密!
- 随笔随想-2022-06-07
- python棋牌游戏开发之斗地主
- 语音合成数据解决方案助您获取专属AI声音
- 机器学习笔记十五之图片文字识别
- java se中的se指什么,什么是Java SE?
- 异步FIFO格雷码及同步相关问题?
- ui设计师与android,总算知道ui设计师适配的知识点
- 计算机如何在本地硬盘安装WinPE系统