2016-07-18 3 views
0

연결 4; 그것은 7x6 격자입니다. 다음은 대각선 연결 4가 승리했는지 여부를 테스트하는 알고리즘입니다. 그러나 칩이 이미지에 표시된 위치에있을 때 인덱스 오류가 발생합니다. 이 문제를 어떻게 해결할 수 있습니까? 그리고 어떻게 대각선 알고리즘을 사용할 수 있습니까?인덱스 오류, 범위를 벗어남 파이썬

enter image description here

board[5][1] = 1 # (red chip) 

board[4][2] = 1 # (red chip) 

board[3][3] = 1 # (red chip) #THIS IS WHEN ERROR OCCURS FOR THE FIRST DIAGONAL ALGORITHM 

# check/diagonal spaces 
for x in range(7 - 3): 
    for y in range(3, 6): 
     if board[x][y] == 1 and board[x+1][y-1] == 1 and board[x+2][y-2] == 1 and board[x+3][y-3] == 1: 
      return True 

# check \ diagonal spaces 
for x in range(7 - 3): 
    for y in range(6 - 3): 
     if board[x][y] == 1 and board[x+1][y+1] == 1 and board[x+2][y+2] == 1 and board[x+3][y+3] == 1: 
      return True 

오류 : 보드가 6 개 행이

if board[x][y] == 1 and board[x+1][y-1] == 1 and board[x+2][y-2] == 1 and board[x+3][y-3] == 1: 
IndexError: list index out of range 
+1

'range (7 - 3)'는'range (4)'와 동일하며 0에서 3까지 계산됩니다. 원하는 것이 맞습니까? –

+0

제가 대각선 4를 감지 할 수있게 해주는 유일한 방법은 제가 생각하기에 이것의 수학을 혼란스럽게 만들었을 것입니다. 대각선 승리가 감지되지 않는 이유가 될 수 있습니다. –

답변

1

때문에 (0 -> 5), 당신은 행 3에서 x을 시작 (0 기반 인덱스) 그래서 board[x+3][y-3] 것이다 x + 3 = 6> 5이기 때문에 list index out of range을 입력하십시오.

0

0에서 6 대신 1에서 7까지 행 번호를 매기 고 있습니다.

또한 루프는 하이픈이 아닌 쉼표를 사용해야합니다.

for x in range (4, 7): # This will count 4, 5, 6 

하이픈을 사용하면 컴퓨터에서 빼기 작업을 수행합니다. 결국

으로 끝납니다.
for x in range (7 - 3): # Computer will do subtraction, this will count 0, 1, 2, 3 

또한 대각선을 확인하는 데 더 일반적인 알고리즘이 필요합니다. 숫자가 아닌 변수를 사용해야합니다. 팁으로, 나는 마지막 조각이 각 움직임에 위치했던 곳으로부터의 수직/수평/대각선 만 점검한다.

+0

didnt가 작동하는 것처럼 보였습니다. 변경했을 때 여전히 색인 오류가 발생합니다. –

+0

새 코드를 게시 할 수 있습니까? – Yaelle

관련 문제