
引言
哈喽大家好,我是亿元程序员,有小伙伴私信到:
亿哥你好,老板说最近上面这款游戏非常火,让我抄一款。
可是,我连玩都玩不明白,怎么抄?
的确是,这款既像数独又像扫雷的游戏,最近的确爆火,很多主播都在直播解谜。
言归正传,本期带大家一起来实战看看,做这款游戏到底有哪些关键点。
本文源工程可在文末获取,小伙伴们自行前往,有体验链接。
游戏规则
很多小伙伴刚看到这款游戏时,的确比较懵,这游戏到底怎么玩的?为什么能确定那里是小牛?

其实最核心的推理依据就是以下的三个规则:
1. 颜色唯一性
每种颜色区域内,有且仅有 1 只小牛。
所以当你发现某个颜色只有一个格子时,那么这个格子肯定是小牛,如下。

2. 行列唯一性
每一行、每一列,有且仅有 1 只小牛。
因此 当我们找到 1 只小牛时,我们可以大胆地把它的横竖列都标记为x,就像扫雷一样,如下。

3. 非相邻性
小牛的上下左右相邻格子,不能有其他小牛。
顾名思义 ,就是小牛的邻居们,肯定不是小牛,因此我们也可以将当前小牛格子的 8 方向邻居标记为x,如下。

以上就是这个游戏的三个基础的推理依据,我们在游戏开发中应该怎么实现呢?
数据结构与算法
这款 游戏核心的数据结构就是一个N * N的二维网格,要实现这款游戏,我们首要目标就是能够生成 N 个符合规则的小牛。

以上三个基础的规则,除去颜色,它和我们在刚入门学习数据结构与算法时见过的 N 皇后问题十分相似:
N 皇后问题,即在 N×N 的国际象棋棋盘 上放置 N 个皇后,使得任意两个皇后之间不能互相攻击(国际象棋中皇后可以沿行、列、对角线 无限制移动)。
最经典的解法就是回溯法,通过暴力枚举和剪枝,就能得出结果,示例代码如下:

通过计算可得,仅仅 8 * 8,就有 5242 个解,这就不难理解为什么这个游戏的排行榜前十的小伙伴都是 5000 多关了。

道理我都懂,那代码要怎么写?
游戏实战
根据上述内容,再加上颜色的设定,我们想要生成一个关卡就非常简单了,但是这个游戏的关键并不是生成,而是推导。
推导的意思就是,在代码中,模拟玩家的逻辑思维,进行逐步地拆解,从而找出所有的小牛,然后通关,推导过程如下。
1. 找出单色

遍历所有格子,统计每种颜色的格子,逐个颜色扫描,找出未出现过牛和剩余未被标记的数量为 1 的颜色格子。
核心代码如下:

2. 行列排除

先找到 小牛的行和列,然后将该行和列的所有方块都标记为X。
核心代码如下:

3. 邻居排除

与上面的行列同理,找到小牛坐标,然后把邻居排除。
获取邻居格子代码如下:

4. 单色占排

根据每个颜色都有一头小牛和同行列只能有一头小牛的规则一起推断,当某个颜色只在某一排出现时,那么这一排的其他颜色都不可能是小牛。
核心代码如下:

5. 整排同色

逐行判断,如果该行全是同一个颜色,则遍历非本行的所有格子,排除颜色一样的格子。
核心代码如下:

6. 多色共占

如果 选定的若干行(或列)里,有至少同样多种颜色在"占领"它们,那么在这几行(列)里,不属于这些占领色的格子一定没有牛,可以标×(图中高亮蓝色部分)。
代码就是枚举「若干行」和「若干列」的组合:

7. 邻居互斥

如果某个格子的邻居中,该颜色只在邻居中出现,其他地方没有,那么这个格子不可能是小牛,可以排除。
核心代码如下:

通过以上的推导方法,整个游戏从关卡编辑生成到解谜通关形成闭环,即可完成到下面的效果。
效果演示
完整效果:

编辑器:

QA
1. 为什么要编辑器,直接每关随机不好吗?
关卡提前编辑好,能够保证关卡能够正常通关,每个玩家体验到的游戏是一样的。
其次就是缓解游戏的压力,因为当关卡去到 10 * 10 之后,生成起来需要耗费时间,甚至还可能没解。
2. 为什么能在直播中受欢迎?
首先游戏给人感觉比较熟悉,有点像数独或者扫雷,降低观众理解门槛。
其次 就是游戏自带智商挑战 的情绪钩子,主播解题时的卡壳/顿悟/翻车 极具戏剧效果,观众会产生我上我也行 、主播居然解不出来的参与感。
3. 哪里可以玩?
感兴趣 的小伙伴可以通过阅读原文进行体验游戏。
结语
这游戏 实现起来相对容易,主要是对游戏规则的理解,然后转变成代码,数形结合。
小伙伴们玩明白了吗?
本文实战完整源码包含编辑器 已集成到亿元Cocos小游戏实战合集(已完结),已经拥有的小伙伴可以直接更新。
我是"亿元程序员",一位有着8年游戏行业经验的主程。在游戏开发中,希望能给到您帮助, 也希望通过您能帮助到大家。
AD:笔者线上的小游戏《打螺丝闯关》《贪吃蛇掌机经典》《重力迷宫球》《填色之旅》《方块掌机经典》大家可以自行点击搜索体验。
实不相瞒,想要个赞 和爱心 !请把该文章分享给你觉得有需要的其他小伙伴。谢谢!
推荐文章: