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

news2025/1/16 14:09:33
本文首发于微信公众号: 小蚂蚁教你做游戏。欢迎关注领取更多学习做游戏的原创教程资料,每天学点儿游戏开发知识。

嗨!大家好,我是小蚂蚁。

上篇文章中我们讲了三消查找算法的原理和实现,在宝石方块中,除了水平和竖直的三消之外,斜方向上也可以三消,今天这篇就讲一下斜方向上三消的原理和实现。

斜方向查找的原理

如图,黑线画出来的红色宝石满足斜方向上的三消条件,所以这些红色宝石也能够消除。

斜方向分为两种,一种是从左下方向右上方倾斜,我们把它叫做“向右斜”,一种是从右下方向左上方倾斜,我们把它叫做“向左斜”。对于斜方向的查找,就是沿着两个方向查找,即“向右斜查找”和“向左斜查找”。

首先,仍然是进行一下数据抽象,构建一个由数字组成的表格,这个表格是后续的判断和计算的基础。

整个查找过程是这样的:

从第 1 行第 2 列的宝石开始。

先进行“右斜”查找,检查右上方的宝石是否与自己相同,如果相同就记录下来,然后继续向右上方检查,直到右上方的宝石与自己不同为止。查找完成后,统计找到的相同的宝石数量,如果大于等于 3 个,则记录这些宝石满足消除条件。

再进行“左斜”查找,检查左上方的宝石是否与自己相同,如果相同就记录下来,然后继续向左上方检查,知道左上方的宝石与自己不同为止。查找完成后,统计找到的相同的宝石数量,如果大于等于 3 个,则记录这些宝石满足消除条件。

接着检查第 1 行第 2 列的宝石。

......

直到所有的宝石检查完毕为止。

来看一下第 1 行第 1 列宝石的整个查找过程。

接着将剩下的每个宝石都进行一次斜方向的查找,所有的宝石都查找完毕后,这整个过程就结束了。

如图,“向右斜”的查找用蓝线表示,“向左斜”的查找用绿线表示。其实,在这整个查找遍历的过程中,并不需要将表格中的每个宝石都进行一遍斜方向的查找,例如在对第 1 行 1 列的宝石进行查找的过程中,已经找到了与它相同的第 2 行 2 列的,以及第 3 行 3 列的宝石。所以这两个宝石在遍历的过程中,就不需要再次进行检查了。

可以借助一个列表来记录那些已经检查过的,不需要再次检查的宝石。在检查之前可以先去找一下列表,如果这个宝石已经在里面了,就无需再次检查了。这样可以提升整个遍历检查的效率,即使计算机很擅长计算,也不要让它去做重复的无意义工作。

至于怎么找到右上方或者左上方的宝石呢?其实非常的简单,已知当前宝石的行列号,那么它右上方的宝石就是(行号+1,列号+1),左上方的宝石就是(行号+1,列号-1)。

以上就是斜方向查找的理论基础了,要比水平竖直的三消查找简单很多。

斜方向查找的实现

来看一下实现的积木逻辑。

右斜查找的函数,其中只包含一个斜方向查找的迭代函数。

接着来看一下两个一摸一样的迭代函数。

除了名字不一样,所有的积木都一样。

以上就是斜方向三消查找的原理和实现了,加上之前讲过的水平和竖直方向上三消的查找,就构成《宝石方块》游戏中完整的消除规则了。

三消的查找算法是一些看似很难,但是实际上并不难的东西。

这里分享一点儿我自己的学习技巧,有些东西,尤其是之前从未接触过的,乍一看,完全看不懂。这时的第一反应往往是抗拒,会产生这样的想法:不要弄了,这个太难了,你学不会,看都看不懂,怎么学呢?

此时,我就会不停的告诉自己:看不懂很正常,那就多看几遍,硬着头皮使劲看,早晚能够看的懂。现实往往也是这个样子,每多看一遍似乎就能够多懂一点点,当看的遍数足够多了,这个东西就变的不再难了。另外,除了看,动手也很重要,我习惯于在纸上画,这能够帮助我更好的理顺思路,更好的理解问题。

其实不大部分学不会的东西,并不是因为它太难了,而是因为我们太懒了。

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

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

相关文章

雅思经验(2)

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

【JVM系列】字符串常量池

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

BI技巧丨计算Topn品名

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

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

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

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

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

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 的接口,是一种专门用来进行搜索的容器或数据结构,而他搜索…

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

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

1.4、操作系统的运行机制和体系结构

整体框架 1、运行机制 1.1、什么是指令 简单来说,“指令” 就是处理器(CPU)能识别、执行的最基本命令 比如:加法指令就是让 CPU 进行加法运算 1.2、特权指令&非特权指令 新的问题: 有的指令 “人畜无害” 。 比如&#xf…

【NI Multisim 14.0操作实例——最小系统电路】

目录 序言 🥝1.设置工作环境 🥝 2.设置原理图图纸 🥝 3.设置图纸的标题栏 🥝 4.增加元件 🥝 5.放置电阻 🥝 6.放置无极性电容 🥝 7. 放置可变电容 🥝 8. 放置电感 &#x…

概论_第3章_两个随机变量的函数的分布__卷积公式

前面, 我详细介绍了 一个随机变量函数的概率分布 ,本文开始介绍 两个随机变量的函数。注意, 不能写成 两个随机变量函数, 那就会误认为 两个函数,本文主要介绍两个连续型随机变量的函数, 至于离散型&#x…

网络通信原理——数据传输、OSI模型与TCP/IP、3种数据交换技术

数据传输过程 参考:https://blog.csdn.net/qq_37954088/article/details/80355000、https://baike.baidu.com/item/ARP/609343?fraladdin 基本概念 网络通信的协议体系模型:理想模型OSI(Open System Interconnection);常用模型TCP/IP OS…

C/C++ 字符指针指向字符串的几种方法

字符指针指向字符串的方法 由于字符串在内存中连续存储的特点,可以使用指针进行操作,并且指针必须是字符型的。通常将指针指向字符串的首地址,利用指针的后移可以指向后续字符。 字符指针指向字符串一般有三种的方法: &#xff0…

【MySQL进阶】多版本并发控制——MVCC

【MySQL进阶】多版本并发控制——MVCC 文章目录【MySQL进阶】多版本并发控制——MVCC一:MVCC 原理1:版本链2:ReadView 简介3:访问记录的规则4:READ COMMITTED —— 每次读取数据前都生成一个 ReadView5:REP…

vue入门到精通(四)

三、vue3组合式API 1、组合式API 1.1 什么是组合式API 组合式 API (Composition API) 是一系列 API 的集合,使我们可以使用函数而不是声明选项的方式书写 Vue 组件。它是一个概括性的术语,涵盖了以下方面的 API: 响应式 API:例…

【安卓学习笔记】Activity的生命周期和加载模式

Activity的生命周期 Activity是安卓应用的重要组成单元之一,其对于安卓的作用类似于Servlet对于Web应用的作用。 整个Activity生命周期的图解如下 具体的生命周期可以总结成如下几个步骤 onCreate():Activity启动后第一个被调用的函数,常用…

1819. 序列中不同最大公约数的数目

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 题目: 给你一个由正整数组成的数组 nums …

四信5G工业路由器全面支持中国移动研究院5G专网质量探针,满足5G专网高质保障需求

面向工业4.0时代,5G行业应用也在不断拓展,大量的5G专网兴起,“一业带百业”效果显著,截至2022年9月,我国5G行业虚拟专网数量已超过1万张,5G已在全国200余家智慧矿山、1700余家智慧工厂、250余个智慧电网项目…

SOFA Weekly|铜锁探「密」、本周贡献 issue 精选

SOFA WEEKLY | 每周精选 筛选每周精华问答,同步开源进展欢迎留言互动~SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件&#…

Shiro【授权、整合Spirng、Shiro过滤器】

前言 本文主要讲解的知识点有以下: Shiro授权的方式简单介绍与Spring整合初始Shiro过滤器 一、Shiro授权 上一篇我们已经讲解了Shiro的认证相关的知识了,现在我们来弄Shiro的授权 Shiro授权的流程和认证的流程其实是差不多的: 1.1Shiro支…

React相关扩展二(Fragment、Content、useContext、组件优化、render props、错误边界)(十)

系列文章目录 第一章:React基础知识(React基本使用、JSX语法、React模块化与组件化)(一) 第二章:React基础知识(组件实例三大核心属性state、props、refs)(二&#xff0…