井字游戏方法来检查玩家是否赢了



我仍然不熟悉 OOP 编程和编写紧凑的代码,所以可能我忽略了一些东西,我正在尝试找到一种方法来检查井字游戏中的垂直胜利和对角线胜利,我已经有水平了。


如果可能的话,有没有办法将其他两种方式合并到我已经拥有的东西中?

#creates the gameboard that stores if spaces are open or not
game_board = [ [0,0,0], [0, 0, 0], [0, 0, 0,] ]
#0 = open space
#1 = O
#2 = X
#check for winners horizontaly
def find_winner():
# y represents the y axis
for y in range(3):
if game_board[y][0] == game_board[y][1] == game_board[y][2] != 0:
#returns if the X or 0 has won
return game_board[y][0] 
#returns 0 if no-one has won   
return 0    

您可以添加更多if语句,如下所示:

game_board = [ [0, 0, 0],
[0, 0, 0],
[0, 0, 0,] ]
def find_winner():
for y in range(3):
if game_board[y][0] == game_board[y][1] == game_board[y][2] != 0: # Check horizontal
return game_board[y][0]
if : # Check vertical
return game_board[0][y]
if game_board[0][0] == game_board[1][1] == game_board[2][2] != 0 or game_board[0][2] == game_board[1][1] == game_board[2][0] != 0: # Check diagonal
return game_board[1][1]
return 0  

也许这会有所帮助,这是垂直和对角线检查的两个功能

# Checks for vertical row 
def win(game_board, player): 
for x in range(len(game_board)): 
win = True
for y in range(len(game_board)): 
if game_board[y][x] != player: 
win = False
continue
if win == True: 
return(win) 
return(win) 
# Checks diagonal win 
def diag_win(game_board, player): 
win = True
y = 0
for x in range(len(game_board)): 
if game_board[x, x] != player: 
win = False
win = True
if win: 
for x in range(len(game_board)): 
y = len(game_board) - 1 - x 
if game_board[x, y] != player: 
win = False
return win 

如果您有疑问或建议,请随时发表评论。对于上述功能,玩家是随机选择的。使用函数是一种很好的做法

只有 3 个列表理解

所有胜利和位置

game_board = [ [1, 0, 1],
[0, 1, 0],
[0, 1, 0] ]
# Horizontals
h = [str(i+1) + ' Row' for i, v in enumerate(game_board) if sum(v) == 3]
# Verticals
v = [str(i+1) + ' Col' for i in range(3) if sum([j[i] for j in game_board]) == 3]
# Diagonals
d = [['Left Diag', '','Right Diag'][i+1] for i in [-1, 1] if sum([game_board[0][1+i], game_board[1][1]], game_board[2][1-i]) == 3]
if any([h,v,d]):
print('You won on:', h, v, d)
else:
print('No win yet')

最新更新