假设您的电路板看起来像:
| |
cell[0][0] | cell[1][0] | cell[2][0]
| |
------------+------------+------------
| |
cell[0][1] | cell[1][1] | cell[2][1]
| |
------------+------------+------------
| |
cell[0][2] | cell[1][2] | cell[2][2]
| |
一种方法是简单地递归检查相邻的单元格(在一个方向上)。例如(伪代码):
def checkSame (val, cellX, cellY. deltaX, deltaY):
# No winner if check value is empty.
if val == empty: return false
# Winner if we've gone off edge. No need to worry about < 0
# since one direction is always ascending but I've left it
# in anyway.
if cellX > 2 or cellY > 2: return true
if cellX < 0 or cellY < 0: return true
# No winner if piece has changed.
if cell[cellX][cellY] != val: return false
# Otherwise use recursion to check next one.
return checkSame (val, cellX + deltaX, cellY + deltaY, deltaX, deltaY)
然后,我们只需要检查八个可能的起点/方向值:
# Check rows.
if checkSame (cell[0][0], 0, 0, 1, 0): return true
if checkSame (cell[0][1], 0, 1, 1, 0): return true
if checkSame (cell[0][2], 0, 2, 1, 0): return true
# Check columns.
if checkSame (cell[0][0], 0, 0, 0, 1): return true
if checkSame (cell[1][0], 1, 0, 0, 1): return true
if checkSame (cell[2][0], 2, 0, 0, 1): return true
# Check diagonals.
if checkSame (cell[0][0], 0, 0, 1, 1): return true
return checkSame (cell[0][2], 0, 2, 1, -1)
现在,当然,这是对递归的相当有限(和人为)的使用,但正如您所说,无论如何,这并不是真正适合递归的情况。最好只使用 8 个 if 语句,前提是您不打算将其扩展到超过标准的 3x3 tic-tac-toe。