返回

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

前端

写在前面

前段时间在码上掘金看见大佬用【文言文】写了一个连连看,于是乎突发奇想,能不能用brython也实现一个连连看呢?顺便复习下python基础,于是乎,你们就看到了这个码上掘金项目 和 这篇文章了,但是 brython的环境搭建巨坑无比,还有,这篇文章先从python实现讲起,对brython实现仅在文末做简单说明。

定义基本数据结构

两个类,PointBlock

class Point:
    def __init__(self, x:int, y:int):
        self.x = x
        self.y = y

class Block:
    def __init__(self, pos:Point, state:int):
        self.pos = pos
        self.state = state

核心算法

即检查连线条件是否成立,用4个点组成一条线段,如果是横线或竖线,那么容易判断,如果是斜线,那么麻烦了,且存在两种情况:

1. /
   /
  /
    \
     \
      \

如何判断呢?其实就一个条件,即 斜率为1,即:

y1 - y0 = x1 - x0

当然,也要考虑线段的起始点和终点,即:

point1.x < point2.x < point3.x < point4.x

下面,看看具体的代码实现:

def check_condition(point1:Point, point2:Point, point3:Point, point4:Point) -> int:
    # 先算斜率
    gradient = (point3.y - point1.y) / (point3.x - point1.x)

    if gradient != 1:
        return 0

    # 再判断四个点的位置
    if point1.x < point2.x < point3.x < point4.x:
        return 1
    elif point4.x < point3.x < point2.x < point1.x:
        return 1

    return 0

运行测试

接下来就是简单的运行测试啦:

p1 = Point(0,0)
p2 = Point(0,1)
p3 = Point(1,2)
p4 = Point(2,3)
print(check_condition(p1, p2, p3, p4))

输出结果:

1

brython实现

brython实现非常简单,在python代码的基础上,添加以下代码,然后运行html文件即可:

<script src="brython.js"></script>
<script type="text/python">
import my_package
</script>