井字棋获胜检测系统-Python

Tic-tac-toe win detection system-Python

我正在 python 中创建 Tic-Tac-Toe 游戏,并且正在努力创建一个模块来检测是否有人赢了。我将 2 个东西传递到模块中,棋盘和一组获胜组合:
win_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 次移动后调用该模块。如果有人赢了那么它应该 return a 1,但如果有人没有那么它应该 return a -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

在你的检查中,你只需要检查两次。
由于将隐含第三个相等性(如果 a==b 和 b==c 则隐含 a==c)

那么您无需执行 each=each+1,因为 for 已经为每个获胜组合循环。 最后,你的 try/except 只会阻止你看到你不能做 each+1 因为每个都是 tuple 并且不能递增。

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 保留 CamelCase。

同样是一行解决方案:

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

您可以使用 python 的设置功能非常轻松地确定获胜者。

#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