我做了连接4,我试图找出一个算法来确定胜利者。下面的一个确定水平获胜者,虽然由于某种原因,当计数器像这样垂直定位时会发生错误。 导致此错误的原因是什么?如何解决?
董事会[5] [5] == 1(红筹)
董事会[4] [5] == 1(红筹)
董事会[3] [5] == 1(红筹)当这是错误造成的
#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
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
更新: 这有效但现在垂直测试不起作用,我做了什么?
# 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
更新2:我选择垂直时的索引错误,当筹码位于以下相同位置时发生
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 :(得分:1)
看起来你的电路板的尺寸是混合的。您发布的图片显示插入的芯片按垂直顺序插入并更改y。
board[5][5] == 1 (red chip)
board[4][5] == 1 (red chip)
board[3][5] == 1 (red chip) # Like so
因此,实际上应使用Board[y][x]
访问您的电路板布局。
但是当您在水平空间中搜索时,您会使用Board[x][y]
查看电路板。尝试将其更改为
#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
编辑:要修复垂直,只需在我们解决水平检查问题时切换x和y
Edit2:确保在使用否定词时打印并检查索引,太大的数字会给你索引错误,但负数不会给你列表索引中的任何错误。在胜利检查失败之前,你不会意识到这个问题。