H5——连连看小游戏实现思路及源码

news2025/2/24 21:05:30

部门要求推广新产品用连连看小游戏的方式, 设计那边UI还没有排期,先撸个功能demo,正好记录一下;

连连看都玩过,程序的关键在于判断连续点击的两张图片是否能够消除,两个图片消除的条件有两个:

  1. 图片相同
  2. 两张图之间连线的转角数不超过2

第一个条件不需要赘述;
判断能否通过小于2个转角的路径联通两张图的算法这里介绍两种:

  • 分类判断法
  • 以转角数为标准的广度搜索

继续剖析这两种算法: (重点)

1、分类判断法

这里实质上是一种递归的思想,要判断图片A与图片B能否通过一条有N个转角的路径相连,可以转化为判断能否找到图片C,C与A能直线相连,且C与B能用一条有N-1个转角的路径相连。若这样的图片C存在,那么A与B就可以通过一条有N个转角的路径相连。

根据转角数不得超过2个的规则,我们可以分为转角数分别为0个、1个、2个这三种情况分别讨论。

  • 一、0转角连通(直线连通):两个图片的纵坐标或横坐标相等,且两者连线间没有其他图案阻隔。
  • 二、一个转角连通:其实相当于两个图片划出一个矩形,这两个图片是一对对角顶点,另外两个顶点如果可以同时和这两个棋子直连,那就说明可以"一折连通"。见下图两个红色棋子的连通情况,右上角绿框的位置就是折点。
    在这里插入图片描述
  • 三、两个转角连通: 判断图片A与图片B能否经过有两个转角的路径连通实质上可以转化为判断能否找到一个点C,这个C点与A可以直线连通,且C与B可以通过有两个转角的路径连通。若能找到这样一个C点,那么A与B就可以经过有两个转角的路径连通 。

判断是否经两个转角连通的算法需要做两个方向上的扫描:水平扫描和垂直扫描。

水平扫描 如下图所示,为了判断A,B能否通过2个转角连通,则从A开始在水平方向上向左右扫描,并判断经过的点能否与B点经过1个转角连通。显然C点能与B点经1个转角连通,故A,B能经2个转角连通。
在这里插入图片描述
垂直扫描 如下图所示,为了判断A,B能否通过2个转角连通,则从A开始在垂直方向上下扫描,并判断经过的点能否与B点经过1个转角连通。显然C点能与B点经1个转角连通,故A,B能经2个转角连通。
在这里插入图片描述

2、以转角数为基准的广度优先搜索法

这种算法参考《编程之美》。

这种算法的动机:若能将所有与图片A经过不多于2个转角的路径相连的图片找出来,加入一个集合S中。那么判断B与A能否相连只需判断B是否存在于集合S中即可。采用广度优先搜索算法可以方便的实现这一构想。算法的思路如下:

(1)定义空集S与T,将A加入集合S

(2)找出所有与A能直接相连的点,将其加入集合S

(3)找出与集合S中的点能直接相连的点,加入集合T,然后将T中所有元素加入到集合S中,清空集合T

(4)找出与集合S中的点能直接相连的点,加入集合T,然后将T中所有元素加入到集合S中

(5)若B在集合S中,则A,B可以相连。否则A,B不能相连

我知道对于程序员来说,文字的表达多少有点难以阅读,模仿图论中广度优先搜索的算法,可以写出以转角为基准的广度优先搜索的伪代码:

//判断图片A与图片B能否经过不多于2个转角的路径相连的算法
bool Check( Picture A,Picture B )
{
    Set< picture > S ; //已经搜索到的点的集合,集合S中每个元素与A都可以通过不多于个转角的路径连通
    Set< picture > T ; //临时存储搜索到的点
    //将A加入到S中
    
    int crossNum = 0 ; //用于记录当前搜索到节点的最大转角数
 
    While( B 不在S 中 && crossNum < 3 )
    {
        for( S 中每个元素e )
        {
            // 将所有与e能直线连通的点加入到T中
        }
        // T中的所有元素加入到S中
        // 转角数+1
        crossNum ++ ;
    }
    if( B 在S中)
        return true ;
    else
        return false ;
}

实际编程实现这一算法时可以采取优化措施,不一定要搜索出所有与A转角不超过2的点。

下面附上本次程序实现的源码,采取了第一种算法。

H5连连看小游戏示例源码

如果这篇文章给你提供了思路或者任何帮助,请为我点个赞,谢谢!欢迎评论指教!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/162296.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【3 - 特征工程】菜菜sklearn机器学习

课程地址&#xff1a;《菜菜的机器学习sklearn课堂》_哔哩哔哩_bilibili 第一期&#xff1a;sklearn入门 & 决策树在sklearn中的实现第二期&#xff1a;随机森林在sklearn中的实现第三期&#xff1a;sklearn中的数据预处理和特征工程第四期&#xff1a;sklearn中的降维算法…

Blog Navigation

Blog Navigation Linux Kernel 0x01_LinuxKernel_内核的启动&#xff08;一&#xff09;之启动前准备[2022-7-5]0x02_LinuxKernel_内核的启动&#xff08;二&#xff09;SMP多核处理器启动过程分析 [TODO]0x21_LinuxKernel_内核活动&#xff08;一&#xff09;之系统调用 [20…

【OpenGL学习】OpenGL窗口创建

OpenGL窗口创建 本节介绍如何在利用配置好的GLFW和GLAD进行一个简单窗口的绘制&#xff0c;首先明白在OpenGL中进行图形绘制到窗口的整个流程&#xff1a; 初始化GLFW创建窗口window创建OpenGL上下文初始化Glad渲染循环结束绘制 初始化GLFW 然后我们从上面的流程逐步进行窗…

知微传感3D相机SDK开发文档一查找相机

知微传感3D相机SDK开发文档一查找相机 主要对知微传感3D相机的SDK文件做一个介绍&#xff0c;大家一个界面显示程序包含图像的获得&#xff0c;相机的查找和链接 查找相机&#xff0c;通过UDP广播形式查找局域网相机链接相机&#xff0c;通过IP地址链接局域网内的相机获取图片&…

如何提升计算机的运行速度-正确清理C盘的方法

本文是向大家介绍清理C盘的方法&#xff0c;它能够实现给系统盘瘦身&#xff0c;能够带来提升计算机运行速度价值。提升计算机的运行速度-清理C盘的方法1 利用Windows附带的磁盘清理工具鼠标右击【C盘】选择【属性】选择【磁盘清理】勾选需要清理的文件&#xff0c;点击【确定】…

2023 hgame --- week1 wp

文章目录Miscsign ine99p1ant_want_girlfriend神秘的海报Where am IWebClassic Childhood GameBecome A MemberGuess Who I AmShow Me Your BeautyCryptoRSABe Stream神秘的电话兔兔的车票Retest_your_IDAeasyasmencodeeasyenca_cup_of_teaPwntest_nciotHelp the uncle who can…

【阶段三】Python机器学习29篇:机器学习项目实战:DBSCAN算法的基本原理与DBCSAN新闻聚类分群模型

本篇的思维导图: DBSCAN模型 DBSCAN(全称为Density-Based Spatial Clustering of Applications with Noise)是一种以密度为基础的空间聚类算法,可以用密度的概念剔除不属于任一类别的噪声点。该算法将簇定义为密度相连的点的最大集合,将具有足够密度的区域划分为…

rabbitmq命令大全

大家好&#xff0c;我是早九晚十二&#xff0c;目前是做运维相关的工作。写博客是为了积累&#xff0c;希望大家一起进步&#xff01; 我的主页&#xff1a;早九晚十二 文章目录服务管理启动服务后台启动查看状态用户管理新增账号删除用户所有用户:修改密码:清除密码角色管理设…

MinIO安装总结

概述 初学者安装MinIO还是会遇到很多坑的&#xff0c;这里做个总结&#xff0c;希望能够大家可以快速的搭建MinIO环境&#xff0c;可以更好的快速入门。 linux下手动安装(不推荐) cd /opt/testMinIO wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x…

spark Shuffle

Spark Shuffle的演进及SortShuffle的基本思想 1. 演进 HashShuffle -> HashShuffle 的Consolidate机制 -> SortBasedShuffle -> Tungsten-sort Based Shuffle 2. 各种 Shuffle的介绍 2.1 HashShuffle Spark 之所以一开始就提供基于 Hash 的 Shuffle 实现机制&…

高级驾驶辅助系统(ADAS)——自适应巡航控制系统

一、定速巡航——L1级别 定速巡航系统&#xff08;CCS&#xff1a;Cruise Control&#xff09;&#xff1a;驾驶员设定目标车速&#xff08;手动加速或减速&#xff09;&#xff0c;不能根据实际路况对车辆的行驶状态进行调节或者给予必要的预警提示&#xff0c;缺乏对环境的应…

【信管8.2】建设与管理项目团队

建设与管理项目团队在经过制定人力资源管理计划之后&#xff0c;我们就有了人力资源计划文档&#xff0c;然后通过组建团队也让团队有了正式的成员&#xff0c;接下来要干什么呢&#xff1f;当然就是在项目的开发过程中不断地建设团队和管理团队了。这两个部分的内容也是我们项…

斜方向三消查找算法的原理和实现

本文首发于微信公众号&#xff1a; 小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料&#xff0c;每天学点儿游戏开发知识。嗨&#xff01;大家好&#xff0c;我是小蚂蚁。上篇文章中我们讲了三消查找算法的原理和实现&#xff0c;在宝石方块中&#xff0c;除了水平…

雅思经验(2)

写作技巧&#xff1a;雅思写作忌讳的就是一边倒&#xff0c;辩论的精华在于驳斥&#xff0c;能够找出对方的漏洞&#xff0c;证明对方的观点和论据是没有道理的&#xff0c;这个点很重要。考官评价&#xff1a;“it does not address all parts of the question,so it loses ma…

【JVM系列】字符串常量池

字符串常量池 概念 字符串常量池是一个大小固定的HashTable&#xff0c;默认长度是1009。java6存放在永久代&#xff0c;java7和java8存放到java堆中。 常见面试题 用双引号定义的字符串是直接存储到常量池&#xff0c;用new String创建的是存放在堆中。 String s1 "1…

BI技巧丨计算Topn品名

BOSS&#xff1a;白茶&#xff0c;问你个事&#xff0c;能不能动态的根据我们的销量&#xff0c;告诉我销量前三的商品有哪些&#xff1f;这样便于我针对商品进行调控。 白茶&#xff1a;Topn问题&#xff1f; BOSS&#xff1a;什么套不套的&#xff0c;我不懂&#xff0c;你就…

深入理解数据结构 —— 并查集

什么是并查集 并查集是一种数据结构&#xff0c;主要能够高效地实现以下两个功能 给出图中任意两点a&#xff0c;b&#xff1a; union(a,b) &#xff1a;将a&#xff0c;b所在的集合合并起来isConnected(a,b) &#xff1a;问这a&#xff0c;b两点能否通过任意路径连接起来 …

防治新冠病毒感染,儿童如何居家备药?

随着新冠疫情防控的优化&#xff0c;如何为家里的孩子准备药物&#xff1f;这是家长们关心的问题。下面由小熊药师一一解惑。儿童新冠病毒感染主要表现为发热.流涕.咳嗽可能伴有呕吐&#xff0c;可能伴有呕吐.腹泻和其他胃肠道反应。症状一般持续2~5天&#xff0c;其中发热一般…

Map和Set的介绍

目录 1、Map 和 Set 的概念 2、模型 3、Map 的学习 3.1 关于 Map.Entry 3.2 Map 的常用方法 4、Set 的常用方法 5、 Map 和 Set 的注意点 1、Map 和 Set 的概念 Java 提供了 Map 和 Set 的接口&#xff0c;是一种专门用来进行搜索的容器或数据结构&#xff0c;而他搜索…

1.3、操作系统的发展和分类

整体框架 1、手工操作阶段 1.1、主要缺点 用户独占全机、人机速度矛盾导致资源利用率极低 一个用户把自己的程序放入纸带机&#xff0c;等待计算机执行完后&#xff0c;用户再取走自己的数据。 这时候&#xff0c;下一个用户才可以继续接着使用该计算机系统 在一个时间段内只…