羊了个羊游戏开发实战教程(1):堆叠牌的拾取

简介: 羊了个羊游戏开发实战教程(1):堆叠牌的拾取

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

最近“羊了个羊”小游戏爆火。一下子让想做微信小游戏或者想学做微信小游戏的人多了很多,因为小蚂蚁一直都在长期的写微信小游戏开发的教程,以及制作微信小游戏,所以我无缘无故的也因为这波热度得到了不少的“羊毛”。

不少人建议我写个“羊了个羊”游戏的制作教程,想了一下,为什么不写呢?反正我也是要长期持续写教程的,写别的游戏也是写,那为什么不写写当下如此爆火的游戏呢?羊毛都怼到脸上了,再不薅几把就显得有点儿奇怪了。

好了,废话不多说了。欢迎跟随者小蚂蚁开启你的游戏开发制作之旅。

这个系列教程会包含很多节(我也不知道几节能够写完),我会带你从零开始制作一个“羊了个羊”类型的消除游戏。通过学习教程,你将能够自己动手制作一个“羊了个羊”类型的游戏,并且是一个第二关可以闯过的游戏。

教程所使用的游戏开发工具是【微信小游戏制作工具】,这是微信官方出品的用于制作微信小游戏的开发工具,全中文环境,可视化的积木编程,面向的是没有任何开发经验的普通人,很容易上手,借助它你可以快速的制作出自己的微信小游戏。

微信小游戏制作工具官网:https://gamemaker.weixin.qq.com

这个系列教程并不属于零基础教程,它需要你有一定的基础,并且会用微信小游戏制作工具,如果你目前没有任何基础的话,可以先学习小蚂蚁的【人人都能做游戏】零基础系列教程。

接下来,让我们正式开始第一节的内容吧!

“羊了个羊”游戏本质上还是一个消除游戏,在下方的槽中凑满三个一样的图标即可消除。它跟其它消除游戏的最大的不同,在于它的布局方式上。一般的消除游戏都是一种平面的布局,即整体上是几行几列的平面,但是“羊了个羊”游戏中是一种堆叠的布局,即在一层上会叠加另一层,甚至很多层。

这比平面的布局多了一个“”的概念,图标是一层一层排列的,第一层的图标上如果有第二层图标压着它,那它就不可拾取,这个多层的堆叠布局就是这个游戏实现的难点之一。

这节课中我们就先来解决这个“堆叠牌拾取”的难点。


如图,我们将会制作一个这样的示例,一共有两层牌,第一层牌是 3 行 x 5 列,第二层牌是 3 行 x 4列。可拾取的牌用白色表示,不可拾取的牌用红色表示,游戏开始后,显示两层牌的布局,点击白色牌时,白色牌消失(相当于拾取),点击红色牌,红色牌不会消失(相当于不可拾取),每拾取一张牌后,所有剩余牌的状态都会刷新,如果当前牌由不可拾取状态,变为可拾取状态,则它的颜色会由红色变为白色。(文字描述有些长,大家可以借着上方的动图来理解这个示例要做的事情)

两层牌堆叠的初始布局

我们先来实现两层牌的初始布局。其实我们可以先来看看如何创建一层,因为创建一层后,再创建一层就是两层了。

如图是第一层的 3x5 的网格布局,我们先计算出它的左上角的起点的位置。计算公式在图中列出了,如果你之前有看过小蚂蚁的教程,就应该知道,关于这个网格布局的计算我已经讲过太多次了,所以这次我就不再讲了,拿出你的纸和笔,画一画,写一写,这两个计算公式就能很好理解了。

在计算出左上角的起点位置之后,我们就可以从这里开始,依次的去一行一行的创建每一张牌了。那如何设置每张牌的位置呢?

如图,在知道一些已知条件之后,我们可以根据右边的计算公式,计算得到网格布局中的每个位置上的牌的坐标。

这样第一层牌的计算公式就有了,接着看第二层牌。

如图,绿色的网格表示第二层牌,第二层牌压在第一层牌之上,而且它相对于第一层牌还有一个向上向右的偏移,从图中可以很直观的看出来,第二层左上角的起点位置,相对于第一层左上角的起点位置,向右上方偏移了半个格子,所以计算公式也很容易推出来,除了起点位置的计算不同,第二层牌的坐标位置的计算公式与第一层牌是一样的。

到这里,创建两层堆叠牌的理论基础我们就搞定了,接下来到微信小游戏制作工具中实现一下。

来到微信小游戏制作工具中,首先我们准备两个素材。


如图,一个是“卡牌”的图片,一个是“创建卡牌”的方块,这个方块不会在游戏中显示,它只是用于放置创建卡牌的积木逻辑。

接着,我们再创建一些全局变量


第一层起点位置X/Y:用于记录第一层卡牌左上角起点的位置;

第二层起点位置X/Y:用于记录第二层卡牌左上角起点的位置;

单元格的宽度/高度:用于设置每个卡牌所占用的格子的宽度和高度(这里我们把格子的大小设置为 100x120);

当前创建的卡牌层级:用于区分当前创建的是第一层卡牌还是第二层卡牌;

行/列迭代:用于循环中的遍历;

网格中点位置X/Y:用于设置整个网格布局的中心位置;

除了这些全局变量之外,我们还创建了两个表格数据(这个在后续会用到)。

第一层表格:用于记录第一层卡牌的状态;

第二层表格:用于记录第二层卡牌的状态;

接着来看一下“创建卡牌”精灵上的积木逻辑。


根据之前推导出的计算公式,先计算出两层网格的左上角起点的位置,接着使用双重循环,一行一行的创建卡牌,这里注意了,我们使用“当前创建的卡牌层级”这个变量来区分创建的是哪一层的牌,另外每一层创建多少张牌,是根据这一层的表格来确定的(这个稍后会讲),除此之外,在创建卡牌前我们还进行了一个判断,只有表格中当前位置上的数据为 1 时,才创建卡牌,可以先猜一下为什么要这样。

接着,再看一下卡牌上的积木逻辑。


卡牌被创建出来之后,根据不同的层级,来计算和设置自己的坐标位置(计算用的就是我们上方推导出的卡牌位置坐标的计算公式)。

你应该也发现了,在卡牌克隆逻辑刚开始的时候,我们设置了几个变量,这几个变量都是位于“卡牌”上的局部变量。


行/列号:记录当前卡牌在整个网格布局中的行列号位置;

层级:记录当前卡牌位于第几层;

是否可抽取:用于判断当前的卡牌是否可以点击拾取(如果上方被其它卡牌压住了就不能拾取);

到这里,两层牌堆叠的初始布局就制作好了,可以点击预览看一下。


因为我们在创建第二层牌之前等待了 0.5 秒,所以能够明显的看出两层牌的创建顺序。

检测卡牌的状态

完成初始布局之后,接着我们来实现第二个功能,每张牌都有两个状态,一个是可拾取状态,一个是不可拾取状态我们使用不同的颜色来区分卡牌的状态,红色表示不可拾取,白色表示可拾取。

两层共计 27 张牌,如何判断哪张牌是可拾取的,哪张牌是不可拾取的呢?接下来我们就需要借助数据抽象了。

如图,我们将两个表格中填满了数字 1,1 表示的就是这个位置上有牌,如果一个位置上的牌被取走了,我们就把该位置上的 1 设置为 0,表示这个位置上没有牌了。

这里我们把这两个表格平铺开了,因为这样方便查看,其实它们在游戏中更像是下面这样。

看起来很混乱,所以后续讲解的时候我们还是将它们平铺开来,但是你要能够自己脑补它们堆叠的样子。

来看一下这张图,左下角的蓝色牌是第一层的牌,它目前是不可拾取状态,如果它要变成拾取状态的话,就需要拿走第二层左下角第一张红色的牌,对不对?也就是说,第一层某个位置上的牌能不能拾取,要取决于第二层有没有牌压在它上面,如果有的话,那它就是不可拾取状态,否则的话是可拾取状态

接着再来看一下另外两种情况。

一种是有两张牌压着蓝牌,一种是有四张牌压着蓝牌。

第一层牌到底能不能拾取,好像不但跟第二层牌有关,而且还跟它自己的位置有关,有的位置只有一张牌压着它,有的位置有两张压着它,有的位置有四张牌压着它.....看起来好像是没有什么规律,但是作为一个游戏开发者,你一定要相信,它背后肯定是有规律的,而找到这个规律,就是解决这个问题的关键。

如图,就是我找到的规律,假设当前需要判断第一层牌中行列号为 (2,4) 的牌的状态,那就需要判断第二层四个位置上是否有牌,这四个位置分别为(2,4),(3,4),(2,3),(3,3),第一层上的所有牌的状态判断都满足这个规律。

对于边角位置也依然满足这个规律,因为有些位置超出了第二个表格边界,超出表格边界的位置其实就相当于没有牌。

如果你的抽象能力不是很强的话,这部分读起来会很困难,不过没关系,我建议你利用现实中的道具来帮助自己理解。比如我在找这个规律的时候,就借助扑克牌来帮助自己理解这些抽象的数据表格。

好了,找到规律了,这个问题就解决一大半了。接下来,让我们去小游戏制作工具中实现一下吧!

还记得我们之前创建的两个表格数据吗?它们中的内容如下:


要实现所有卡牌状态的更新,我们需要借助通知,所以在数据区中创建一个“刷新卡牌”的通知。


接着来看一下“刷新卡牌”的积木逻辑。这段逻辑位于“卡牌”精灵上。


看上去挺长的,其实实现的就是我们上方找到的那个规律,分别判断第二层表格中的四个位置,如果任何一个位置上有牌,那么第一层这个牌就不能抽取,否则的话,就能抽取。图中你看到的那个很长的判断积木,其实就是为了判断这个位置是否超出了第二个表格的边界,位于边界之外的我们也当作无牌的情况。最后,如果当前牌是第二层的话,那全部设置为可抽取状态,因为目前第二层就是最上层了。

最后,再来看一下卡牌点击的积木逻辑。


如果当前牌不能抽取的话,我们就让它抖动一下,如果能抽取的话,根据它的层级设置对应的表格中的数据为 0 (表格这个位置上没有牌了),另外每当有牌被取走了,我们都应该刷新一下剩余牌的状态,这里使用了对所有卡牌的通知,让剩余的所有卡牌刷新自己的状态,最后删除掉抽取的这个卡牌。(这里暂时做简单的删除处理,在游戏中抽取的卡牌应该移动到下方的卡槽中,这个我们后续做到的时候再讲)

这样,一个堆叠牌的拾取功能就完成啦!什么?有点儿难呐?多看几遍,尽量去理解,然后多动手做,难一点的事情做到后才会有满满的成就感,加油!

在这个示例中,我们使用的是 3x5,3x4 这样满满当当的布局,如果不想要这样满当的布局该怎么做?正常游戏中每一关的布局可都是不一样的呢!

很简单,调整一个两个表格中数据即可,有牌的地方放个 1 ,没牌的地方放个 0。

再次预览一下,就有新的关卡布局啦!


在这篇教程里,我们学到了两层堆叠牌的实现,那三层呢?四层呢?五层呢?...... 原理都是一样的,接下去就是你动手挑战的机会啦!

相关文章
|
4月前
|
消息中间件 运维 监控
《聊聊分布式》BASE理论 分布式系统可用性与一致性的工程平衡艺术
BASE理论是对CAP定理中可用性与分区容错性的实践延伸,通过“基本可用、软状态、最终一致性”三大核心,解决分布式系统中ACID模型的性能瓶颈。它以业务为导向,在保证系统高可用的同时,合理放宽强一致性要求,并借助补偿机制、消息队列等技术实现数据最终一致,广泛应用于电商、社交、外卖等大规模互联网场景。
|
7月前
|
存储 人工智能 并行计算
阿里云六项满分!AI训推一体机权威报告发布
近日,IDC发布《中国AI训推一体机技术能力评估,2025》报告,阿里云在六大维度获满分,成为唯一性能满分厂商。其AI Stack提供轻量化、高性价比大模型解决方案,支持多行业智能化升级,已在政务、金融、制造等领域落地应用。
585 0
阿里云六项满分!AI训推一体机权威报告发布
|
4月前
|
运维 监控 安全
2025年10月远程控制软件评测:流畅度、群控能力,教你如何选最好用的远程桌面工具
2025年主流远程控制软件深度评测:基于性能、画质、安全与场景适配多维分析,推荐连连控为专业首选。其全平台兼容、4K高帧率、智能低延迟及批量管控能力突出,适合设计、运维等高要求场景,助力企业高效协同与数字化转型。
|
10月前
|
人工智能 运维 架构师
技能革命3.0时代:云计算就业岗位有哪些?
本文探讨云计算就业市场的深层逻辑,从岗位体系、AI赋能及技术局限性应对策略三方面解析。云计算岗位涵盖基础设施、平台服务、数据智能与应用创新四层,需复合型能力;AI不仅提供技术工具,还推动教育范式变革,助力跨界融合;面对技术局限,分步验证与经验洞察双管齐下。未来就业将向技能多元化、自主性增强和社会价值再定义方向进化,强调个体能力生态的持续成长。
|
SQL 数据可视化 BI
SQL语句及查询结果解析:技巧与方法
在数据库管理和数据分析中,SQL语句扮演着至关重要的角色
1778 0
羊了个羊游戏开发实战教程(5):制作更多层
羊了个羊游戏开发实战教程(5):制作更多层
367 0
|
安全 数据安全/隐私保护 开发者
Python实现简单的邮件发送系统
Python实现简单的邮件发送系统
260 3
|
算法 开发工具 索引
三消游戏查找算法的原理和实现
三消游戏查找算法的原理和实现
536 1
羊了个羊游戏开发实战教程(3):卡牌的放置和消除
羊了个羊游戏开发实战教程(3):卡牌的放置和消除
360 0
|
编解码 前端开发 人机交互
【Unity 3D】UI系统中UGUI各个组件的详细讲解(附源码 超详细)
【Unity 3D】UI系统中UGUI各个组件的详细讲解(附源码 超详细)
1071 0

热门文章

最新文章