我正在编写一个棋盘游戏,其中棋子可以在10x10的棋盘上水平,垂直和对角移动,棋盘上有像Battleship这样的坐标。 (A1,A2,A3,... J7,J8,J9)。这些碎片不能移动到其他碎片上,所以我创建了一个检查它的功能。功能参数是:
现在,我创建了一个函数,将坐标(字符串)转换为具有数组实际xy坐标的列表(a10 = [0,0],b10 = [0,1],c9 = [1,2] ])所以我可以创建循环。还有一个包含所有字母数字坐标的列表,所以我可以回到字符串。防爆。 L [0] [0] ='a10',L [1] [2] ='c9'。
垂直移动的代码是:
def validate_movement(board,initial_position,final_position):
invalid = 0
a = get_coordinate(initial_position)
b = get_coordinate(final_position)
for i in range(3):
if final_position in board[i]:
invalid += 1
else:
invalid += 0
if a[0] != b[0] and a[1] == b[1]:
if b[0] > a[0]:
for n in range(a[0],b[0]):
if L[n][a[1]] in board[i]:
invalid += 1
else:
invalid += 0
else:
for n in range(b[0],a[0]):
if L[n][a[1]] in board[i]:
invalid += 1
else:
invalid += 0
我真的在努力检查对角线移动的功能。希望你能帮助我,我知道我的代码非常原始,但我希望你坚持使用相同的逻辑,这样我才能理解。
我试过这个:
if (b[1] - a[1])//(b[0] - a[0]) == 1:
while a[0] != b[0] and a[1] != b[1]:
a[0] += 1
a[1] += 1
if L[a[0]][a[1]] in board:
invalid += 1
else:
invalid += 0
这适用于例如a = [0,0]和b = [2,2]的情况,但它给出了ZeroDivisionError。