Python连接四个对角线检查

时间:2013-10-16 21:45:37

标签: python

我在启动代码时遇到了问题。我的编程课有一个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 
 _ _ _ _ _ _ _ 
|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|
|_|_|_|_|_|_|_|

我只是站在它正在检查的东西上遇到困难。我不是要求你给我代码。请解释一下。 :)

2 个答案:

答案 0 :(得分: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的实际位置取决于列表列表代表董事会的方式)

答案 1 :(得分: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