关于《连连看》的算法研究和演示Demo

关于连连看寻路算法的思路 图-:0, 0, 0, 0, 0, 0, 0, 0 , 0, 00, 8, 0, 0, 0, 0, 0, 0 , 0, 00, 0, 0, 0, 0, 0, 0, 0 , 0, 00, 0, 0, 0, 0, 0, 0, 0 , 0, 00, 0, 0, 0, 0, 0, 0, 0 , 0, 00, 0, 0, 0, 0, 0, 0, 0 , 0, 00, 0, 0, 0, 0, 0, 0, 0 阅读详情

连连看曾经是一款非常受欢迎的游戏,同时它也是一款比较古老的游戏。看到这里你千万不要认为本篇文章打算讨论《连连看》的历史以及它取得的丰功伟绩。恰恰相反,在这篇文章中我们打算讨论该游戏背后的实现思想,包括它定义的游戏规则,以及游戏的实现算法。作为应用,我们还将利用Java代码实现一个通用的《连连看》算法,并使用Java Swing框架创建一个演示实例。


1《连连看》的游戏规则是如何定义的?


连连看的游戏界面和游戏规则都非常简单。游戏界面可以简单看作一个具有M×N个单元格的棋盘,每个单元格内部显示着各种图片,游戏的最终目的是消除所有图片。但是在消除的过程中,我们需要遵守以下规则:


  1. 只有内容相同的图片才有消除的可能
  2. 每次只能消除两张图片,消除时需要使用鼠标指定(即连接)
  3. 两张图片连接时所经过的路径(连接路径)不能超过两个拐点
  4. 连接路径经过的单元格所包含的图片必须已经消除

直观感受,第一条和第二条规则不应该是算法完成的任务,因为这两条规则实现起来比较简单,应该尽量放在游戏逻辑中完成,避免算法与游戏逻辑产生强依赖关系。实现第三条和第四条规则有一个非常经典的算法理论,该算法就是接下来我们要讲的分类搜索算法。


2 分类搜索算法的原理


分类搜索算法的基本原理是一种递归思想。假设我们要判断A单元与B单元格是否可以通过一条具有N个拐点的路径相连,该问题可以转化为能否找到一个C单元格,C与A可以直线连接(0折连接),且C与B可以通过一条具有N-1个拐点的路径连接。下面截图解释了这一思想。图中,白色和浅灰色的单元格表示没有内容,可以连通。可以发现,A与B连接必须经过①②③④⑤⑥个拐点。假设我们找到了一个可以直接与A连接的C点,那么只需要搜索C与B连接需要经过的②③④⑤⑥个拐点即可。




基于连连看要求的拐点数不能超过2个的规则,我们可以将上述思想简化为三种情况。


1)0折连接

0折连接表示A与B的X坐标或Y坐标相等,可以直线连接,不需要任何拐点,且连通的路径上没有任何阻碍,具体可以分为下面两种情况。



2)1折连接

1折连接与0折连接恰好相反,要求A单元格与B单元格的X轴坐标与Y轴坐标都不能相等。此时通过A与B可以画出一个矩形,而A与B位于矩形的对角点上。判断A与B能否一折连接只需要判断矩形的另外两个对角点是否有一个能同时与A和B满足0折连接。下面截图说明了1折连通的原理:



3)2折连接

根据递归的思想,判断A单元格与B单元格能否经过两个拐点连接,可以转化为判断能否找到一个C单元格,该C单元格可以与A单元格0折连接,且C与B可以1折连接。若能找到这样一个C单元格,那么A与B就可以2折连接,下面截图解释了2折连接的情况:



判断A单元格和B单元格是否可以2折连接时需要完成水平和竖直方向上的扫描。观察下面两幅截图,A与B单元格的连接属于典型的2折连接,首先我们需要找到图中的C单元格,然后判断C与B单元格是否可以1折连接。在搜索C单元格时我们必须从A单元格开始,分别向右、向左扫描,寻找同时可以满足与A单元格0折连接,与B单元格1折连接的C单元格。




同样,如果A与B单元格的位置关系是下面两幅截图展示的那样。那么我们就需要在垂直方向完成向上、向下搜索,找到符合要求的C单元格。




上面我们讨论了分类搜索法的实现原理,接下来我们使用Java语言实现一个通用的分类搜索算法。

3 如何实现通用的分类搜索算法


前面多次强调,我们需要实现一个通用的分类搜索算法。通用意味着算法与具体的实现分离。上面介绍的分类搜索算法建立在一个二维数组的前提下,但是我们应该使用何种类型的二维数组呢?为了满足上述要求,我们应该定义一个所有希望使用该算法的应用都应该实现的一个接口,然后在算法中使用该接口类型的二维数组。

那么该接口应该包含些什么方法呢?根据上面对算法的分析,分类搜索算法唯一需要判断的就是每个单元格的连通性,即单元格是否已经填充。理解了这些内容,下面我们创建该接口。

public interface LinkInterface {
   public boolean isEmpty();
   public void setEmpty();
   public vo
Unity 算法 之 A星(A Star/A*)寻路算法实现和封装,并带动态演示Demo Unity 算法 之 A星(A Star/A*)寻路的算法法实现和封装,并带动态演示Demo 目录 Unity 算法 之 A星(A Star/A*)寻路的算法法实现和封装,并带动态演示Demo 一、简单介绍 二、 A星(A Star/A*)寻路算法相关知识 1、什么是A星(A Star/A*)寻路算法 2、寻路:寻找最短路径并避开障碍物 3、几个重要的概念 4、寻路结束的条件... 阅读详情

相关推荐

【python】python制作 连连看 游戏脚本(一)

在游戏中学习编程,即享受了游戏的乐趣,有提升了编程能力,可谓一举两得。本文以【宠物连连看经典版2】为例,讲述使用python制作简单的游戏脚本。

sunriver2000的专栏 7479

用cocos2d-x 编写连连看小游戏

效果图

远在南非 2314

对称加密算法AES的MbedTLS代码实现Demo

AES (Advanced Encryption Standard) 加密算法就是一种广泛使用的对称加密算法。该算法用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,AES由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,AES已然成为对称密钥加密中最流行的算法之一。

mickey2007的博客 1291

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

撸个连连看核心功能demo,正好记录一下,欢迎大家借鉴,评论,指教!

HifunのZone 2348

架构汇报 + Demo 演示:如何讲清楚你的 Agent 系统?

花了几周甚至几个月构建一个智能体系统, **真正的挑战不是代码跑起来,而是——你能不能讲清楚它。** 无论是对外展示、项目立项、评审答辩,还是向团队汇报, **“讲清楚你的 Agent 系统” 本身就是一项核心能力。** 本章将围绕实战项目中最常见的场景,帮你构建一份: - 结构清晰 - 逻辑自洽 - 易于 Demo 展示 - 便于扩展复用的**智能体系统架构汇报方案 + Demo 演示话术模板**

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1243

NV 英伟达2022数字芯片笔试题

作者:数字IC打工人 链接:【开卷】第27期 NV 英伟达2022数字芯片笔试题_笔经面经_牛客网 来源:牛客网 1、Single Choice: Given thefollowing FIFO and rules, how deep does the FIFO need to be to preventunderflow or overflow? RULES: clk_A=25MHz; clk_B=100MHz; en_B is periodically asserted: period.

weixin_44072819的博客 6391

利用李雅普诺夫函数开发航天器姿态控制系统

本文基于李雅普诺夫函数控制方法,采用修正罗德里格斯参数(MRP)描述航天器姿态,设计了姿态控制律。通过构造能量型李雅普诺夫函数,推导出保证系统稳定的控制闭环方程,实现了航天器从初始状态到目标状态的稳定转换。针对MRP参数可能出现的奇异性问题,采用影子集进行规避。仿真实验包含两种模式:非追踪模式(目标状态为0)和追踪模式(目标为三角函数轨迹)。结果表明,该控制方法能够有效实现姿态稳定和轨迹跟踪,在短暂调整后即可精确跟随目标轨迹。控制律设计考虑了不同参考系间的转换,通过DCM矩阵处理目标角速度的坐标变换问题。

weixin_50227659的博客 1221

从OpenClaw到Hermes Agent:AI Agent实战部署与自动化工作流构建

AI Agent(智能体)作为大语言模型(LLM)的能力延伸,其核心原理在于通过工具调用(Tool Calling)与环境交互,使模型从“对话”走向“执行”。这一技术价值在于将自然语言指令转化为具体操作,实现业务流程自动化,从而提升开发与运维效率。在应用场景上,AI Agent广泛适用于自动化运维、智能客服、数据报告生成等重复性任务处理。本文聚焦于两大热门开源框架OpenClaw与Hermes Agent,深入探讨其部署配置、技能扩展及实战联调。通过结合OpenClaw的模块化扩展能力与Hermes Age

weixin_34122810的博客 504

水文仿真软件:HEC-RAS (Hydrologic Engineering Center‘s River Analysis System)_(7).一维非稳态水力模型

自定义脚本是通过编程语言(如 Python)编写的一系列自动化任务,可以帮助用户更高效地处理数据和运行模型。编写脚本:使用 Python 或其他编程语言编写自定义脚本。集成脚本:将脚本集成到 HEC-RAS 中,实现自动化数据处理和模型运行。

kkchenjj的博客 933

基于STM32L4XX、HAL库的ICM-42607-P姿态传感器驱动程序设计

/ 转换为dps(±1000dps量程)float accel_x = sensor_data.accel_x * (8.0f / 32768.0f);// 转换为g值(±8g量程)#define ICM42607_I2C_ADDR 0x68 << 1 // I2C地址(SA0=0)= 0x40) { // ICM-42607的WHO_AM_I值为0x40。// 读取传感器数据。

zhusl6688的博客 835

Debezium报错处理系列之二十一:Unable to connect: Communications link failure.The driver has not received any

Debezium报错系列之二十一:Unable to connect: Communications link failure.The driver has not received any。

zhengzaifeidelushang的博客 547

基于通义千问2.5-7B-Instruct的技术深度解析

通义千问2.5-7B-Instruct是一个基于Transformer架构的大型语言模型,具有70亿参数。它通过自注意力机制和前馈神经网络处理输入序列,能够捕捉长距离依赖关系,适用于多种NLP任务。微调是指在预训练模型的基础上,使用特定任务的数据进行进一步训练,以使模型更好地适应特定任务。微调可以显著提高模型在特定任务上的性能。通义千问2.5-7B-Instruct是一个强大的语言模型,适用于多种NLP任务。通过深入理解其架构、微调方法和核心代码,可以更好地应用于实际场景。

zhangjiaofa的专栏 1569

第9.3章 从CMake基础到自动驾驶实战:构建跨平台C/C++项目的全能指南

《CMake构建实战:项目开发卷》精要指南 本文系统梳理了许宏旭《CMake构建实战》核心内容,涵盖C++构建全流程: 基础构建:详解MSVC/GCC编译器使用、Makefile编写及静态/动态库构建方法 CMake核心:解析语法结构、变量控制、文件操作等关键命令,阐述项目全生命周期管理 实战应用:通过快速排序、手写数字识别项目演示现代CMake实践,特别针对自动驾驶领域给出多传感器融合、SLAM等场景的CMake配置方案 特色价值:本书填补了官方文档实例不足的空白,提供300+代码示例,是掌握工业级C++

行知SLAM 1343

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

上一篇: LibGDX教程——重建Flappy Bird——(8)屏幕切换与播放声音(终结)
下一篇: Java的死锁现象
artzok
博客等级 码龄11年 16粉丝 27原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值