2016-07-17 4 views
0

Ich habe Verbindung 4, und ich versuche, einen Algorithmus zu erarbeiten, um den Gewinner zu bestimmen. Der folgende bestimmt den horizontalen Gewinner, obwohl aus irgendeinem Grund ein Fehler auftritt, wenn die Zähler vertikal wie folgt positioniert sind. Was verursacht diesen Fehler und wie behebe ich ihn?Indexfehler in Python aus unbekannten Grund

board [5] [5] == 1 (rot-Chip)

board [4] [5] == 1 (rot-Chip)

board [3] [5] == 1 (rot-Chip), wenn dieser Fehler verursacht wird pLATZIERT

#Check for horizontal win 
for y in range(6): 
     for x in range(7 - 3): 
      if board[x][y] == 1 and board[x+1][y] == 1 and board[x+2][y] == 1 and board[x+3][y] == 1: 
       return True 

Game Image ERROR:

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

UPDATE: Das worke d aber jetzt funktioniert der vertikale Test nicht, was habe ich getan?

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

UPDATE 2: Index Fehler, wenn ich vertikale arranaged, tritt auf, wenn Chips in derselben Position wie unten

Prüfung vertikale Räume

for x in range(6): 

    for y in range(7 - 3): 

     if board[y][x] == 1 and board[y+1][x] == 1 and board[y+2][x] == 1 and board[y+3][x] == 1: 

      return True 
+0

Also, wie löse ich das? –

+0

, aber dann nach horizontalen Gewinnen zu suchen funktioniert nicht? –

+0

@Rawing Ich habe nicht das gesamte Board gesehen, du hast Recht – Li357

Antwort

1

Es ist wie die Abmessungen des Boards scheint gemischt . Das von Ihnen gepostete Bild zeigt die eingefügten Chips in vertikaler Reihenfolge mit wechselndem y.

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

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

board[3][5] == 1 (red chip) # Like so 

Also Ihr Board-Layout sollte eigentlich mit Board[y][x] zugegriffen werden.

Aber wenn Sie den horizontalen Raum suchen, schauen Sie sich das Board mit Board[x][y]. Versuchen Sie, dass zu

#Check for horizontal win 
for y in range(6): 
     for x in range(7 - 3): 
      if board[y][x] == 1 and board[y][x + 1] == 1 and board[y][x + 2] == 1 and board[y][x + 3] == 1: 
       return True 

Edit: vertikal zu beheben, wechseln Sie einfach x und y, wie wir horizontale Kontrolle Problem

EDIT2 gelöst: Stellen Sie sicher, drucken und überprüfen Sie die Indizes, während mit negativen Begriffen, zu große Zahlen würde Ihnen einen Indexfehler geben, aber negative Zahlen würden Ihnen keine Fehler in Listenindizes geben. Und Sie würden das Problem erst erkennen, wenn Ihre Gewinnprüfung fehlschlägt.

+0

Überprüfen Sie das Update über –

+0

Schalten Sie das Suchlayout zu "Board [y] [x]', Ihr ist ist Board [x] [y] 'wie du siehst. Das kann vielen Programmierern passieren, die neu im Gaming sind, ich habe etwas Erfahrung mit pygame und sogar ich hatte eine sehr schwere Zeit damit, die Board-Zugriffsreihenfolge zu verwechseln, während ich ein Schachspiel schrieb. – Rockybilly

+0

danke für deine Hilfe Ich weiß es zu schätzen, aber als ich das gemacht habe, was wir oben gemacht haben, ist der Indexfehler wieder aufgetreten. Update lesen –