Python Tic tac toe win检测系统
我正在用python创建一个Tic-Tac-Toe游戏,并且正在努力创建一个模块来检测是否有人赢了。我将两件东西输入模块、电路板和一组获胜组合: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
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
作为布尔表达式有效。