1

我在启动我的代码时遇到问题。我的编程课有一个 Connect 4 项目,但我遇到了一个非常愚蠢的问题。我不明白对角线检查。他给了我们一个例子,但我真的不明白。

def CheckForWinner(board, playerName, playerChar):


diagonal = board[2][0] + board[3][1] + board[4][2] + board[5][3]
if playerChar * 4 in diagonal:
    return playerName

这是一个 42 空间板(7x6)

 1 2 3 4 5 6 7 
 _ _ _ _ _ _ _ 
|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|

我只是很难理解它正在检查的内容。我不是要你给我密码。请解释一下。:)

4

2 回答 2

3

它正在构建存储在对角线上的字符的字符串。例如,如果董事会是:

 1 2 3 4 5 6 7 
 _ _ _ _ _ _ _ 
|_|A|_|_|_|_|_|
|_|_|B|_|_|_|_|
|_|_|_|C|_|_|_|
|_|_|_|_|D|_|_|
|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|

然后是以下行:

diagonal = board[2][0] + board[3][1] + board[4][2] + board[5][3]

会将值分配给ABCD变量diagonal,因为它将board[2][0]( A)、board[3][1]( B) 等中的字符连接成一个字符串:ABCD.

if语句构成了玩家角色的 4 个字符的字符串,并检查它是否在diagonal字符串中。例如,如果玩家的角色是X,则if计算结果为检查是否XXXX在 中ABCD。如果是 ,它将返回玩家的名字True,这意味着他们已经赢了。

(当然,在我的示例中,A、B、C 和 D 的实际位置取决于列表列表代表棋盘的方式)

于 2013-10-16T21:52:20.847 回答
1
1 2 3 4 5 6 7 
 _ _ _ _ _ _ _ 
|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|
|_|_|_|_|W|_|_|
|_|_|_|Z|_|_|_|
|_|_|Y|_|_|_|_|
|_|X|_|_|_|_|_|

x = 2,0
y = 3,1
z = 4,2
w = 5,3

它可能对玩家 1 使用 1,对玩家 2 使用 2,因此棋盘看起来像一个数组(请注意,该数组可能(行)从显示的网格反转。)

player = 2
the_board = [[0,0,2,0,0,0,0],  
             [0,0,0,2,0,0,0],
             [0,0,0,0,2,0,0],
             [0,0,0,0,0,2,0],
             [0,0,0,0,0,0,0],
             [0,0,0,0,0,0,0]]
print the_board[2][0]  #2
diagonal = the_board[2][0] + the_board[3][1] + the_board[4][2] + the_board[5][3] # 2+2+2+2 = 8
player * 4  == diagonal # 2*4 =?= 2+2+2+2
于 2013-10-16T21:50:56.137 回答