brython | 笨办法写个连连看-1.核心功能实现

简介: brython | 笨办法写个连连看-1.核心功能实现

前端大佬们不要笑话,运维小弟献丑了。


前段时间在码上掘金看见大佬用【文言文】写了一个连连看,于是乎突发奇想,能不能用brython也实现一个连连看呢? 顺便复习下python基础,于是乎,你们就看到了这个码上掘金项目 和 这篇文章了,但是不得不说,brython是真的没啥人用。

code.juejin.cn/pen/7159814…



关于【码上掘金】如何编写brython


这个在以前文章中就有讲述过初始化brython,本地和码上掘金的都有,这里不再啰嗦,如果有需要的话,可以翻看以下文章:


或者直接Fork下小弟初始化后的项目: code.juejin.cn/pen/7155678…



连连看定义的规则


连连看作为一个类似于棋牌游戏,其最终目的是将棋盘上的对象都清除掉。其规则简单来说,可以定义如下:


  • 一次只能选择2个点进行相连。
  • 相连的2点内容需要一致。
  • 2点之间的路径不能超过3条直线。
  • 2点连接成功后,则对其消除。

最终,将棋盘上的对象全部清除后,则赢得胜利。


查看规则后,我们知晓,第1点 、 第2点 以及 最后一点,都不是很复杂,第三点才是连连看的核心点,那么接下来,我们分析下第三点。


所谓的不超过3条直线,例如,我们想让蓝色框框的点相连


image.png


我们可以通过3条线相连,具体如下:

image.png


如下这样,是不行的。

image.png


因为想让蓝色的点相连,至少需要4条线,即:

image.png



笨办法判断2点是否相连


你可能在别的文章中看到,连连看判断是否能够相连,有几种方法,比如: 2点事垂直的或者是平行的、2点可以通过单拐实现、2点必须通过双拐实现。


本篇文章不会介绍如上方法,我们采取一个最笨办法,即:判断2点的延长线是否相交。


若相交了,则代表可以相连,这种情况一般出现在2点为直线或者是单拐的情况,若不相交,我们则需要判断下是否能够双拐实现。具体的,我们可以看如下案例:


相交的点

例如,我们想判断蓝色的点是否能够相连

image.png


我们将点位延长一下,只要是空格,都可以延长

image.png

延长后,我们找到了交点,则判断为可以相连。

再比如,平行的2个点

假设想对蓝色的2个点进行相连

image.png


将2个点都延长一下,我们发现了交点,则可以相连。

image.png


不相交的点

不想交的点,来判断能否相连,是最复杂的。但是使用相交法则,也有方法,例如如下2个点想连接,但是延长线后没有交点。

image.png


我们将2个点都给延长一下,发现并没有交点

image.png

在没有交点的情况下,我们可以尝试找下平行点是否相连,例如,这2个平行点可以相连


image.png


若平衡点都不相连的话,则无法进行连接,例如:

image.png

因为这2个点的相交点无法直接连接,且相交延长线的平行点也无法正常连接,即:

image.png

所以这2个点无法连接。



连连看核心编码实现


上述段落,我们已经分析了,2点能否相连,但是没有用代码实现,本段落,我们使用代码来模拟一下2点能否相连。

再次之前,我们需要模拟出如下的二维数组,来标定2点是否相连。

image.png



为此,我们使用python定义的列表如下:

maps = [
  [0,3,0,0,0,0,0],
  [0,9,0,0,0,0,0],
  [3,9,0,0,0,0,0],
  [5,0,0,0,5,6,0],
  [0,0,0,0,0,0,0],
  [0,0,8,9,7,0,0],
  [7,0,6,4,0,0,0]
]

其中0,代表空格,其他点位则是一一对应的。


收集点位信息,这里展示收集向上坐标的代码:

# 收集点位向上坐标的点位信息
def collecUp(x,y):
  # 定义空列表,用于收集值
  positions = []
  # 将点位向上移一格
  x = x - 1
  # 循环判断点位是否为0,直至到表格边界处
  while (x >= 0) and (x <= len(maps)-1) and (maps[x][y] == 0):
    positions.append([x,y])
    # 将点位向上移一格
    x = x - 1
  # 返回列表
  return positions

关于其他方位,可以通过本段落的【码上掘金】链接进行查看


我们来测试一下5,4点位周围的空格区域有哪些,我们修改程序函数如下:

collecPositions(5,4)

代码执行后,结果如下:

image.png


这个demo已经写好了,且放到了【码上掘金】中。

code.juejin.cn/pen/7163216…

如上,我们已经确定了某个点的点位信息,那么如何判断2个点是否相交呢? 我们仅需将点位给收集起来,而后判断一下是否有2个点点位信息一样就可以了,这段代码相对于较为简单,这里截图如下:

image.png


我们执行后,效果如下:

image.png


这个demo我也放到了【码上掘金】了,链接如下:

code.juejin.cn/pen/7163227…

若2个点,没有相交点,则我们就要判断2个点是否有平行点 或者是 垂直点了,这里也比较简单,直接给代码吧。


代码我也放到了【码上掘金】中,链接如下:

code.juejin.cn/pen/7163230…

最后我们测试的相连的点为:

  • 值为3,点位为:(0,1) 和 (2,0)
  • 值为5,点位为:(3,0) 和 (3,4)
  • 值为7,点位为:(6,0) 和 (5,4)
  • 值为6,点位为:(6,2) 和 (3,5)

效果如下:

image.png



总结


小弟在写相关项目的时候,一直坚持的思想是面向核心编程,什么意思呢? 就拿连连看举例来说,核心思想是判断2个点是否能够相连,所以我们一开始就写demo来判断2个点是否能够相连,将这个问题解决了其他外围问题不是迎刃而解了么? 害怕的是我们将外围写的花里胡哨,然而核心功能实现不了,岂不是功亏一篑。


好了,就这样吧,怎么样,觉得连连看有意思吧? 快动动你的小手指试试吧,此外,项目代码有注释哦,可以看看咯!


相关文章
|
Linux 开发工具 git
FreeSWITCH小白入门之freeswitch安装篇
技术小白,今天带领大家一起freeswitch源码编译安装。我的上一篇文章已经搭建好了运行环境(centos7-Minimal),有人会说fs官方不是说在debian8下运行最稳定吗?我只能说,我个人爱好而已!
3328 0
|
存储 算法 Linux
打破常规,Linux内核新的数据结构上场maple tree(下)
打破常规,Linux内核新的数据结构上场maple tree
|
XML 数据挖掘 Linux
服务器丨Linux安装测试单细胞分析软件copykat,遇到的常见报错与解决思路与方法
服务器丨Linux安装测试单细胞分析软件copykat,遇到的常见报错与解决思路与方法
|
12月前
|
存储 并行计算 算法
【动态多目标优化算法】基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2023研究(Matlab代码实现)
【动态多目标优化算法】基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2023研究(Matlab代码实现)
472 4
|
9月前
|
人工智能 供应链 监控
站在岔路口的1688商家,是观望,还是在新赛道中寻找机会?
1688商家正面临流量下滑的严峻挑战,平台转型、算法升级与外部竞争加剧使传统运营模式难以为继。面对困境,主动求变才是出路:通过内容化转型、直播短视频、数据驱动和私域沉淀等新策略,提升数字化能力与客户价值。唯有创新升级,才能穿越周期,赢得未来。
|
前端开发 测试技术 API
Apifox 深度评测:你应该使用的 API 管理工具
Apifox是一款强大的API管理工具,集API设计、开发、测试和文档管理于一体,有效解决传统工具分散导致的效率低下和信息不一致问题。它提供直观界面定义API接口,自动生成文档,支持数据模型管理及迭代分支功能。此外,Apifox具备Mock服务、强大的调试工具和自动化测试能力,还能进行性能测试评估API在高负载下的表现。其文档管理功能支持版本控制和变更历史追踪,便于团队协作与分享。Apifox的优势在于一体化解决方案和简洁直观的用户界面,相较于Postman和Swagger等竞品,在功能整合和易用性方面表现出色。总之,Apifox为API全生命周期管理提供了全面支持,极大提升了开发效率。
|
存储 对象存储 C++
在 VS Code 中使用 OSS 进行 Markdown 文档编写
阿里云OSS对象存储服务是理想的存储解决方案,专门用于承载大量非结构化数据。在VSCode中编写Markdown文档时,手动上传图片至OSS并获取相应链接的过程通常复杂且耗时。为此,Aliyun OSS Uploader插件应运而生,以简化和优化此流程。它不仅能够自动将图片上传到OSS并生成可供插入的链接,还能在您需要时通过撤回链接,删除已上传的图片,极大地提升了效率和便捷性。
|
存储 缓存 NoSQL
缓存:热点key重建优化。
缓存:热点key重建优化。
416 0
|
Java 数据库连接 Spring
|
前端开发 数据可视化 JavaScript
【五一创作】QML、Qt Quick /Qt中绘制圆形
【五一创作】QML、Qt Quick /Qt中绘制圆形
1464 0

热门文章

最新文章