2016-07-18 8 views
0

私はconnect 4を作成しました。それは7×6グリッドです。以下は、対角接続4が勝ったかどうかをテストするためのアルゴリズムです。チップがイメージに示された位置にあるとき、インデックスエラーが発生します。どのようにこれを修正すればよいのですか?対角アルゴリズムをどのように動作させるのですか?インデックスエラー、範囲外Python

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 

エラー:

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

ボードは6行(0 - > 5)を有しているので、あなたは、行3(0から始まるインデックス)がboard[x+3][y-3]意志からxを開始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

関連する問題