Python Tic tac toe win检测系统

Python Tic tac toe win检测系统,python,tic-tac-toe,Python,Tic Tac Toe,我正在用python创建一个Tic-Tac-Toe游戏,并且正在努力创建一个模块来检测是否有人赢了。我将两件东西输入模块、电路板和一组获胜组合:win\u comb=((0,1,2)、(3,4,5)、(6,7,8)、(6,3,0)、(7,4,1)、(8,5,2)、(6,4,2)、(8,4,0)) 我用来检查某人是否获胜的模块。在进行4次移动后调用该模块。如果有人赢了,它将返回1;如果没有赢,它将返回-1 def Check_Results(Board,win_comb): for eac

我正在用python创建一个Tic-Tac-Toe游戏,并且正在努力创建一个模块来检测是否有人赢了。我将两件东西输入模块、电路板和一组获胜组合:
win\u comb=((0,1,2)、(3,4,5)、(6,7,8)、(6,3,0)、(7,4,1)、(8,5,2)、(6,4,2)、(8,4,0))

我用来检查某人是否获胜的模块。在进行4次移动后调用该模块。如果有人赢了,它将返回1;如果没有赢,它将返回-1

def Check_Results(Board,win_comb):
    for each in win_comb:
        try:
            if (Board[each[0]] == Board[each[1]] and Board[each[1]]== Board[each[2]] and Board[each[0]]==Board[each[2]]):
                return 1
            else:
                each=each+1
        except:
            pass
        return -1

在支票if中,您只需要两张支票。
因为第三个等式是隐含的(如果a==b和b==c,那么a==c是隐含的)

然后,您不需要执行
each=each+1
,因为
for
将为每个获胜组合循环。 最后,您的
try/except
只会阻止您看到不能执行
each+1
,因为每个都是
元组,不能递增

def check_Results(board, win_comb):
    for each in win_comb:
        if (board[each[0]] == board[each[1]] and board[each[1]]== board[each[2]]):
            return 1
    return -1
编辑:关于命名约定的注意事项,请为Classed保留大小写

也是一种单线解决方案:

return any(
    (board[each[0]] == board[each[1]] and board[each[1]]== board[each[2]])
    for each in win_comb)

在支票if中,您只需要两张支票。
因为第三个等式是隐含的(如果a==b和b==c,那么a==c是隐含的)

然后,您不需要执行
each=each+1
,因为
for
将为每个获胜组合循环。 最后,您的
try/except
只会阻止您看到不能执行
each+1
,因为每个都是
元组,不能递增

def check_Results(board, win_comb):
    for each in win_comb:
        if (board[each[0]] == board[each[1]] and board[each[1]]== board[each[2]]):
            return 1
    return -1
编辑:关于命名约定的注意事项,请为Classed保留大小写

也是一种单线解决方案:

return any(
    (board[each[0]] == board[each[1]] and board[each[1]]== board[each[2]])
    for each in win_comb)

您可以很容易地使用python的set功能来确定赢家

#Assume pre-defined BOARD_LEN (for instance 3)
Board = [[None for y in range(BOARD_LEN)] for x in range(BOARD_LEN)]

TOKEN_1 = "0"
TOKEN_2 = "X"

"""
Get a sequence of tokens and see which one would win. Examples:
[None,0,x] gives None as winner
[0,0,0] gives 0 as winner
[0,X,0] gives None as winner
"""
def get_winner_of_sequence(seq, TOKEN1, TOKEN2):
  token_set = set(seq)
  if len(token_set) > 1 or None in token_set:
    return None
  return TOKEN1 if TOKEN1 in seq else TOKEN2

"""
Assume a N x N board.
Winning sequences are:
- all rows
- all columns
- the diagonal (0,0 -> N-1,N-1)
"""
def get_possible_winning_sequences(board):
  winning_sequences = []
  #Add each row
  #Add each column
  #Add the diagonal
  return winning_sequences

您可以很容易地使用python的set功能来确定赢家

#Assume pre-defined BOARD_LEN (for instance 3)
Board = [[None for y in range(BOARD_LEN)] for x in range(BOARD_LEN)]

TOKEN_1 = "0"
TOKEN_2 = "X"

"""
Get a sequence of tokens and see which one would win. Examples:
[None,0,x] gives None as winner
[0,0,0] gives 0 as winner
[0,X,0] gives None as winner
"""
def get_winner_of_sequence(seq, TOKEN1, TOKEN2):
  token_set = set(seq)
  if len(token_set) > 1 or None in token_set:
    return None
  return TOKEN1 if TOKEN1 in seq else TOKEN2

"""
Assume a N x N board.
Winning sequences are:
- all rows
- all columns
- the diagonal (0,0 -> N-1,N-1)
"""
def get_possible_winning_sequences(board):
  winning_sequences = []
  #Add each row
  #Add each column
  #Add the diagonal
  return winning_sequences

与问题无关,但请看一看。它根本不会改变代码的工作方式,但它使其他人阅读它变得更加容易<代码>线路板
->
线路板
检查结果
->
检查结果
等您只需要检查每行(或列)和一条对角线。然后,你的板和重复。与问题无关,但看看。它根本不会改变代码的工作方式,但它使其他人阅读它变得更加容易<代码>线路板
->
线路板
检查结果
->
检查结果
等您只需要检查每行(或列)和一条对角线。然后,打开棋盘并重复。你可以将这两张支票合并为一张
a==b==c
作为布尔表达式有效。您可以将这两个检查组合为一个
a==b==c
作为布尔表达式有效。