私はPythonが初めてで、単純なチェストゲームで検証関数を作成して達成しようとしています:
ピースは完全に伸びる必要があります (つまり、B7:E4 のように移動方向に移動し、別のピース F4 をブロックします。これは合法的な動きです)。
def validate_move_rule(from_position, to_position, position_hash):
blocker_position = []
blocker_position.extend(position_hash)
if(abs((int(to_position[1]) - int(from_position[1]))) == abs(ord(to_position[0]) - ord(from_position[0]))):
if((int(to_position[1]) - int(from_position[1])) > 0 and (ord(to_position[0]) - ord(from_position[0])) > 0):
next_position = str_plus(to_position[0],1) + str(int(to_position[1]) + 1)
if(next_position in blocker_position):
return True
elif((int(to_position[1]) - int(from_position[1])) < 0 and (ord(to_position[0]) - ord(from_position[0])) < 0):
next_position = str_plus(to_position[0],-1) + str(int(to_position[1]) - 1)
if(next_position in blocker_position):
return True
# left_up
elif((int(to_position[1]) - int(from_position[1])) > 0 and (ord(to_position[0]) - ord(from_position[0])) < 0):
next_position = str_plus(to_position[0],1) + str(int(to_position[1]) - 1)
if(next_position in blocker_position):
return True
#left_down
elif((int(to_position[1]) - int(from_position[1])) < 0 and (ord(to_position[0]) - ord(from_position[0])) > 0):
next_position = str_plus(to_position[0], -1) + str(int(to_position[1]) + 1)
if(next_position in blocker_position):
return True
#right_up
elif(from_position[1] == to_position[1]):
if((ord(to_position[0]) - ord(from_position[0])) > 0):
next_position = str_plus(to_position[0],1) + to_position[1]
if(next_position in blocker_position):
return True
#right
elif((ord(to_position[0]) - ord(from_position[0])) < 0):
next_position = str_plus(to_position[0],-1) + to_position[1]
if(next_position in blocker_position):
return True
#left
elif(from_position[0] == to_position[0]):
if((int(to_position[1]) - int(from_position[1])) > 0):
next_position = to_position[0] + str(int(to_position[1]) + 1)
if(next_position in blocker_position):
return True
#down
elif((int(to_position[1]) - int(from_position[1])) < 0):
next_position = to_position[0] + str(int(to_position[1]) - 1)
if(next_position in blocker_position):
return True
#up
else:
puts("Error: it's not a legal move(hint: must diagonal horizontal vertical)")
return False
私のコードは本当に退屈だと思いました.Pythonにはコードを簡素化する機能が必要だと思いました.何か提案はありますか?