我正在为python3中的学校项目做一个国际象棋游戏。 我被困在主教运动中。我做了所有事情的一切动作,但主教真的很难。以下是我编写电路板的方法:
def fou_valide(piece,l,m,c,n):
if piece[0]=="F":
if (abs(m-l)+abs(n-c))%2==0 and l!=m and n!=c and board_fou_dame[l][c]==board_fou_dame[m][n] and abs(l-m)==abs(c-n):
if m>l and n>c:
for x in range(l+1,m):# on scanne les cases ou va passer la piece si elle ne passe par-dessus une pieces en effet elle ne peut pas sauter au dessus d\'une autre piece
for y in range(c+1,n):
if board[x][y]!="___":
print ("faux")
return False
return True
elif m>l and n<c:
for z in range(l+1,m):# on scanne les cases ou va passer la piece si elle ne passe par-dessus une pieces en effet elle ne peut pas sauter au dessus d\'une autre piece
for j in range(c-1,n,-1):
if board[z][j]!="___":
print ("fau")
return False
以下是我为主教编程的方式:
l
只有代码的一半m
,n
,c
和n>c
正在发生变化。
我的问题是即使"fau"
,它也会显示"faux"
而不是l = int(input("ligne de selection?:\n"))-1 #on demande au joueur la ligne de la piece a selectionné
c = int(input("colonne de selection?:\n"))-1#on demande au joueur la colonne de la piece a selectionné
m = int(input("ligne de destination ?:\n"))-1#on demande au joueur la ligne ou il veut pose la piece
n = int(input("colonne de destination?:\n"))-1#on demande au joueur la colonne ou il veut pose la piece
piece = board[l][c] # piece correspond a la piece selectionné
以下是我要求的职位:
{{1}}
答案 0 :(得分:3)
事实上,piece
是用途,因为您有l
和c
。
在您的功能中,您必须验证四件事。
l
和c
与m
和c
不同
3)它们在同一对角线上
4)两者之间的细胞是免费的
4)是最难的,除非你注意到你需要检查的方向是(sign(m - l), sign(n - c))
。没有必要为每个方向或每种颜色编写不同的代码。
sign
功能,您需要自己编写。
def sign(n):
return 1 if n >= 0 else -1
然后,您可以使用一个适用于任何方向的while循环来检查单元格。
def can_eat(l, c, m, n):
dl = sign(m - l)
dc = sign(n - c)
x, y = c + dc, l + dl
while x != n and y != m:
if board[y][x] != '___': # non empty cell
return False
x += dc
y += dl
return True
答案 1 :(得分:1)
非常感谢Bruno L,它现在运行正常,这是我使用的主教的代码,这是一个简化版本:
def fou_valide(piece,l,m,c,n,):
if piece[0]=="F":#F in french stand for bishop, "Fou",
if l!=m and n!=c and abs(l-m)==abs(c-n): #the condition for the bishop movement
dl = sign(m - l)#it get the me direction of the movement
dc = sign(n - c)
x, y = c + dc, l + dl
while x != n and y != m:#This check if they are any non-empty cell on the way
if board[y][x] != '___': # non empty cell
return False
x += dc
y += dl
return True
return False
return True
这是签名功能:
def sign(z):
if z >= 0:
return 1
else:
return -1