从开发角度看羊了个羊

时间:2022-09-26 13:28:02

写在前面:博主是一只经过实战开发历练后投身培训事业的“小山猪”,昵称取自动画片《狮子王》中的“彭彭”,总是以乐观、积极的心态对待周边的事物。本人的技术路线从Java全栈工程师一路奔向大数据开发、数据挖掘领域,如今终有小成,愿将昔日所获与大家交流一二,希望对学习路上的你有所助益。同时,博主也想通过此次尝试打造一个完善的技术图书馆,任何与文章技术点有关的异常、错误、注意事项均会在末尾列出,欢迎大家通过各种方式提供素材。

  • 对于文章中出现的任何错误请大家批评指出,一定及时修改。
  • 有任何想要讨论和学习的问题可联系我:zhuyc@vip.163.com。
  • 发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。

从开发角度看羊了个羊

本文关键字:羊了个羊、设计、源码、复刻、开发

一、撰文背景

据说最近有一款游戏名为 “羊了个羊”,风靡了各平台及社交圈。之所以用据说是因为自己一开始并没有注意到这个事情,不过由于受到 【话题达人】 勋章的召唤,还是决定写一写。
从开发角度看羊了个羊
整个游戏的玩法比较简单,亲自体验过的小伙伴应该也都走过了其中的套路,本文主要从开发的角度进行描述。

二、设计逻辑

目前网络上已经可以找到很多复刻版开源代码,已经可以勾勒出整个游戏的全貌。小编在查阅资料时,发现李永乐老师在视频中已经对游戏的设计逻辑做了整体和全面的分析,在此重新整理一下,同时在文章末尾给出一些资源链接,大家感兴趣可以自行查看。

1. 游戏玩法

从开发角度看羊了个羊
游戏的基本核心是三消,只不过在形式上有了一些变化。在下方的操作区会有一块7个格子的空间,用来存放从草坪取下来的牌,如果凑齐三个一样的牌则会消失【不需要连续】,如果拿满了7个不能消除的牌则游戏结束,游戏的目标就是在不死的情况下清空草坪上的所有牌。
在游戏的过程中,草坪上的牌是多层的,并且有些是被完全遮挡的,这就为游戏增加了难度和不确定性。当然,对于羊了个羊游戏本身源码以及实现模式我们靠外部推测是没办法完全还原的,毕竟还有运营和商业模式的因素,在牌局构建时,到底是单纯的随机还是有目的的增加死局概率这是无从得知的,毕竟游戏本身也经过多次更新,因此本文是建立在构建一个有解局的大前提下去分析设计思路。

2. 游戏设计

  • 卡牌规则

由于卡牌的位置是多层的,因此需要用三个坐标点来描述每个卡牌的位置:(Xi,Yi,Zi)。如果要生成一个有解牌局,则每一种卡牌要3个为一组进行生成,可以有多组,这样卡牌的总数为:卡牌种类数 X 卡牌组数 X 3,这是一个笼统的描述,因为在每一局中出现的卡牌种类数和相应的卡牌组数都可以波动。

  • 卡位设计

根据游戏中的实际效果,不同层的卡牌之间是有遮挡关系的【可在程序实现中调整】,如果错位的卡牌比较多是属于低难度的,因为可以预先看到底层的卡,多多少少可以提前布局。还有一种情况是完全遮挡的,也就是说只有把正上方的卡牌拿走之后才能看到底层的卡牌是什么,而留给玩家的操作空间是有限的,这就增加了游戏难度。

  • 洗牌乱序

在开始一个新的牌局时,可以通过上面描述的卡牌规则生成一个具有固定卡牌数量的牌局,卡牌种类可以调整,原则上就是种类也少,游戏越简单。因为如果卡牌总数一致,则每一种卡牌出现的组数就会相对增加,在洗牌乱序后,相同牌出现在视野中的概率就会增加。
在执行完乱序之后,其实你已经成功生成了一局新的游戏了,只需要将得到的新序列填充到预先设计的卡位中就可以了,但是此时牌局是否有解是未验证的,还应该去做一个解锁逆序的自检程序,只有被认定为有解的牌局才会送到玩家面前,如果这个时候还是游戏失败,那就真的是玩家实力不济了。

  • 视频解析

李永乐老师 - 史上最难小游戏“羊了个羊”深度剖析!

三、开源复刻

  • 复刻版本

开发游戏的老王 / Godot版羊了个羊

  • 开源游戏

一款名为鱼了个鱼的游戏,玩法相同,可以自定义难度。
【开源代码】:https://github.com/liyupi/yulegeyu
【在线玩耍】:https://www.yulegeyu.cn/

扫描下方二维码,加入CSDN官方粉丝微信群,可以与我直接交流,还有更多福利哦~
从开发角度看羊了个羊