棋盘游戏,棋子移动

时间:2016-10-16 23:48:02

标签: list python-3.x

我正在编写一个棋盘游戏,其中棋子可以在10x10的棋盘上水平,垂直和对角移动,棋盘上有像Battleship这样的坐标。 (A1,A2,A3,... J7,J8,J9)。这些碎片不能移动到其他碎片上,所以我创建了一个检查它的功能。功能参数是:

  • board:包含在整个游戏中变化的单元格坐标的列表。例如:董事会= ['a3','a5','h6']
  • intial_position:它是玩家即将移动的棋子的坐标
  • final_position:想要位置的坐标。

现在,我创建了一个函数,将坐标(字符串)转换为具有数组实际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。

0 个答案:

没有答案