python入门吧 关注:2,461贴子:15,644
  • 3回复贴,共1

看了半天,没看出来哪写错了

只看楼主收藏回复

明明应该返回的是True呀。occupy中1表示被红方棋子占有,2表示被黑方棋子占有,0表示没有被占据。




IP属地:湖北1楼2023-08-08 11:30回复
    终于搞明白了,是我把self.startx和self.starty弄错了,应该是1,0而不是0,1


    IP属地:湖北来自Android客户端3楼2023-08-09 12:19
    回复
      没有注释,命名也不规范,写法也不好,看得头疼。
      类名动词开头……为什么不是“ValidateXxx”?


      IP属地:湖北4楼2023-08-09 22:49
      回复
        没有注释,命名也不规范,写法也不好,看得头疼。
        类名动词开头……为什么不是“ValidateXxx”?
        象棋每个子走法的验证,做成一个方法,为何不将不同子做成不同子类?对于红黑双方,一些子只需要将棋盘上下翻转,规则就可以重用。
        马的走法判断,做4个if不对劲的。马的目标点必需不与自己同值(不能吃自己的子),这是第一个检查;马的两个点,X坐标差绝对值和Y坐标差绝对值必然一个是1一个是2,这是第二个检查,然后将坐标差为2的轴,取其平均值,与终点的另一个轴坐标值构成[x,y],检查它是不是无子(别腿),这是第三个检查。任何一个检查不通过就可以return False了,过程最后返回True,多省事。
        最后,棋盘设计,为什么不利用None?(用n/-n/None标示三态)
        from math import copysign
        def sign(n):
        return copysign(1, n)
        # by method ma()
        if sign(_map[x2][y2]) == sign(_map[x1][y1]):
        return False # 不能吃己方的子
        if set([abs(x1-x2), abs(y1-y2)]) != {1, 2}:
        return False # 不是马的走法
        if abs(x1-x2) == 2:
        if _map[(x1 + x2) / 2][y2] is Not None:
        return False # 别腿
        else:
        if _map[x2][(y1 - y2) / 2] is Not None:
        return False # 别腿
        return True


        IP属地:湖北5楼2023-08-09 23:25
        回复