我正在写一个连接4游戏,你可以选择大小的董事会。这个游戏对大多数棋盘大小都完美无瑕,但当棋盘高过宽时会给我带来麻烦。我不断地得到索引超出范围的错误,我不确定我做错了什么。这是我现在的支票功能,因为它是唯一给我的问题部分。
def checkOWin(board):
boardHeight = len(board)
boardWidth = len(board[0])
tile = 'O'
# check horizontal spaces
for y in range(boardHeight):
for x in range(boardWidth - 3):
if board[x][y] == tile and board[x+1][y] == tile and board[x+2][y] == tile and board[x+3][y] == tile:
return True
# check vertical spaces
for x in range(boardWidth):
for y in range(boardHeight - 3):
if board[x][y] == tile and board[x][y+1] == tile and board[x][y+2] == tile and board[x][y+3] == tile:
return True
# check / diagonal spaces
for x in range(boardWidth - 3):
for y in range(3, boardHeight):
if board[x][y] == tile and board[x+1][y-1] == tile and board[x+2][y-2] == tile and board[x+3][y-3] == tile:
return True
# check \ diagonal spaces
for x in range(boardWidth - 3):
for y in range(boardHeight - 3):
if board[x][y] == tile and board[x+1][y+1] == tile and board[x+2][y+2] == tile and board[x+3][y+3] == tile:
return True
return False
如有任何帮助或建议,将不胜感激。提前谢谢!
好吧,这是3年后的事了,我正在学习编程和Python,并且正在做我自己的Connect Four项目,所以请忍受我。。。但我认为问题在于条件。
下面是一个示例输入,应该与OP使用的类似:
我把条件改写成:
我们有6个不同的名单存储在董事会名单。当访问板时,y排在第一位,因为它首先告诉我们需要使用这6个列表中的哪一个,在板列表中向上或向下移动我们。现在x索引把我们移到我们访问过的y列表中。
try and except允许您删除
for x in range(boardWidth - 3)
,因为如果收到索引错误,我们知道我们已经到达游戏板的边缘,无法满足获胜条件。所以我们继续下一个测试点。你刚刚把尺寸弄混了,你应该这样设置:
因为当你提到board[x]时,那是在计算board中的列表数,当你提到board[x][y]时,那是指board中一个特定行的长度。
当我翻转这些值时,函数运行没有错误。
相关问题 更多 >
编程相关推荐