我正在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
您可以使用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
在您的检查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、 返回当