我正在使用tic tac toe应用程序,目前正在尝试弄清楚如何让计算机知道用户已经赢了。
我的方法是将用户占据的每个位置附加到“ x_moves”列表中,并对照“ win_if”列表进行检查,以查看x_moves列表是否包含任何顺序的任何组合。
win_if = (
["top_l", "top_m", "top_r"],
["mid_l", "mid_m", "mid_r"],
["bot_l", "bot_m", "bot_r"],
["top_l", "mid_l", "bot_l"],
["top_m", "mid_m", "bot_m"],
["top_r", "mid_r", "bot_r"],
["top_l", "mid_m", "bot_r"],
["top_r", "mid_m", "bot_l"]
)
x_moves = ["top_m", "mid_r", "mid_m", "bot_m"]
我尝试使用“ in”,但是这不起作用,因为x_moves列表需要按照非常特殊的顺序排列。
答案 0 :(得分:1)
您可以获取win_if
中的每个内部列表,并检查用户是否在内部移动。如果计数大于2
(或等于3),则表示有赢家。像这样:
win_if = (
["top_l", "top_m", "top_r"],
["mid_l", "mid_m", "mid_r"],
["bot_l", "bot_m", "bot_r"],
["top_l", "mid_l", "bot_l"],
["top_m", "mid_m", "bot_m"],
["top_r", "mid_r", "bot_r"],
["top_l", "mid_m", "bot_r"],
["top_r", "mid_m", "bot_l"]
)
x_moves = ["top_m", "mid_r", "mid_m", "bot_m"]
for inner in win_if:
count = 0
for each in x_moves:
if each in inner:
count += 1
if count > 2:
print("winner")
break
答案 1 :(得分:0)
我认为您可以编写一个简单的函数,例如:
编辑:您可以使用sets
来获得结果。
def is_winner(test):
win_if = [
{"top_l", "top_m", "top_r"},
{"mid_l", "mid_m", "mid_r"},
{"bot_l", "bot_m", "bot_r"},
{"top_l", "mid_l", "bot_l"},
{"top_m", "mid_m", "bot_m"},
{"top_r", "mid_r", "bot_r"},
{"top_l", "mid_m", "bot_r"},
{"top_r", "mid_m", "bot_l"}
]
for win_possibility in win_if:
if set(test) == win_possibility:
return True
return False
这有意义吗?
答案 2 :(得分:0)
一种更好的方法是将电路板表示为这样的2D矩阵
board = [[1, 2, 3], ['o', 'o', 'o'], [7, 8, 9]]
player_1 = 'x'
player_2 = 'o'
winner = None
# checks rows
def check_rows(board):
for i in range(3):
if board[i].count(board[i][0]) == len(board[i]):
if board[i][0] == player_1:
return 'player_1'
elif board[i][0] == player_2:
return 'player_2'
return None
column = [[board[i][j] for i in range(3)] for j in range(3)]
diagonal_1 = [board[i][j] for i, j in enumerate(range(3))]
diagonal_2 = [board[i][j] for i, j in enumerate(range(2, -1, -1))]
winner = check_rows(board) or check_rows(column) or check_rows(diagonal_1) or check_rows(diagonal_2)
print(winner)
这将返回None,如果在当前董事会状态下没有获胜者,则它非常紧凑,并且仅对行,列和对角线使用一个函数。
board[i].count(board[i][0]) == len(board[i])
检查矩阵中一行中的所有3个项目是否相等,这意味着两个玩家中的一个获胜,因此我们通过检查该行中的第一个项目来检查哪个获胜(因为它们都是相等的),并返回以字符串形式获胜的玩家。