看了半天,没看出来哪写错了
python入门吧
全部回复
仅看楼主
level 1
胡紫彤 楼主
明明应该返回的是True呀。occupy中1表示被红方棋子占有,2表示被黑方棋子占有,0表示没有被占据。
2023年08月08日 03点08分 1
level 1
胡紫彤 楼主
终于搞明白了,是我把self.startx和self.starty弄错了,应该是1,0而不是0,1
2023年08月09日 04点08分 3
level 1
没有注释,命名也不规范,写法也不好,看得头疼。
类名动词开头……为什么不是“ValidateXxx”?
2023年08月09日 14点08分 4
level 1
没有注释,命名也不规范,写法也不好,看得头疼。
类名动词开头……为什么不是“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
2023年08月09日 15点08分 5
1