当前位置: 首页 > 知识库问答 >
问题:

Python中的Tic-tac-toe获胜检测系统

莘聪
2023-03-14

我正在Python中创建一个井字游戏,并正在努力创建一个模块来检测是否有人赢了。我将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次移动后调用该模块。如果有人赢了,它将返回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

共有2个答案

柳联
2023-03-14

您可以使用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
羿易安
2023-03-14

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

然后,您不需要执行< code>each=each 1,因为< code>for已经为每个获胜组合循环了。最后,您的< code>try/except只是防止您看到您不能执行< code>each 1,因为每个都是< code>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

编辑:注意命名约定,将CamelCase保留为Classed。

也是一个单线解决方案:

return any(
    (board[each[0]] == board[each[1]] and board[each[1]]== board[each[2]])
    for each in win_comb)
 类似资料:
  • 我该怎么做? 下面是我的代码:

  • 我在C和一般编程方面是个新手,我想知道这段代码的性能/复杂性有多好,因为它与我在SO的其他帖子中发现的不同。for循环是否使这变得不必要的复杂?

  • 对角线从右到左 在这里,支票中奖者代码结束。

  • 我正在写一个井字游戏,“编码规则”的一部分是应该有一个“checkwin”函数来查看玩家是否赢了。我定义了两个名为“tttXArray”和“tttOArray”的变量,以查看一个玩家是否连续获得三个水平,垂直或对角线输入。这是以 tttXArray 为例放置的函数: Checkwin是time循环的一部分: 我得到的错误是: 问题是什么?

  • 首先,我是java的初学者,我正在尝试模拟TicTacToe游戏。我想使用游戏树为所有状态创建一个可能的树。树中的每个节点都将代表状态并使用此树来决定下一步要做的事情。我计划按如下方式进行, > 接口类包括表示单个移动所需的信息。 抽象/接口类包括以下方法: a、 返回一个新的状态对象,该对象表示应用该移动后游戏的状态。 B.如果当前状态代表其中一名玩家的胜利,则此游戏的获胜者ID。 c、 返回当