我刚刚开始学习python,这是TicTacToe游戏的代码。 您能提出任何建议吗?另外,如果在随后的输入中输入了相同的符号(不使用变量),该如何提醒玩家?
pos_matrix=[[' ',' ',' '],[' ',' ',' '],[' ',' ',' ']]
def my_tictactoe(pos,symbol):
if pos_matrix[pos[0]-1][pos[1]-1]!=' ':
print('Invalid input')
exit
else:
pos_matrix[pos[0]-1][pos[1]-1]=symbol
for i in range(0,3):
print(pos_matrix[i][0]+' | '+pos_matrix[i][1]+' | '+pos_matrix[i][2])
print('--|---|--')
if is_win():
print('GAME OVER. \n Player with symbol {x} wins!'.format(x=pos_matrix[pos[0]-1][pos[1]-1]))
for i in [0,1,2]:
pos_matrix[i][0]=pos_matrix[i][1]=pos_matrix[i][2]=' '
def is_win():
for i in [0,1,2]:
if pos_matrix[i][0]==pos_matrix[i][1]==pos_matrix[i][2]!=' ':
return True
elif pos_matrix[0][i]==pos_matrix[1][i]==pos_matrix[2][i]!=' ':
return True
if pos_matrix[0][0]==pos_matrix[1][1]==pos_matrix[2][2]!=' ':
return True
elif pos_matrix[0][2]==pos_matrix[1][1]==pos_matrix[2][0]!=' ':
return True
else:
return False
my_tictactoe((1,1),'o')
my_tictactoe((2,2),'x')
my_tictactoe((3,2),'o')
my_tictactoe((1,3),'x')
my_tictactoe((2,1),'o')
my_tictactoe((3,3),'x')
my_tictactoe((3,1),'o')
my_tictactoe((1,2),'x')
答案 0 :(得分:0)
您可以省略玩家一起输入其符号的操作。 玩家轮流使用,因此您可以前进一个简单的转弯计数器并使用适当的符号:
pos_matrix=[]
player = 'xoxoxoxox'
turn = 0
def initGame():
global pos_matrix
global turn
turn = 0
pos_matrix=[[' ',' ',' '],[' ',' ',' '],[' ',' ',' ']]
def printGame():
for i in range(3):
print("{} | {} | {}".format(*pos_matrix[i])) # decompose into its 3 values
print('--|---|--')
print("")
def my_tictactoe(pos):
global turn
global player
if pos_matrix[pos[0]-1][pos[1]-1] != ' ':
print('Invalid input')
exit(1) # return fail code
else:
pos_matrix[pos[0]-1][pos[1]-1]= player[turn]
printGame()
if is_win():
print('GAME OVER. \n Player with symbol {x} wins!'.format( x = player[turn] ))
initGame()
elif turn == 8:
print('Game Over - D R A W.')
initGame()
else:
turn += 1
def is_win():
for i in [0,1,2]:
if pos_matrix[i][0]==pos_matrix[i][1]==pos_matrix[i][2]!=' ':
return True
elif pos_matrix[0][i]==pos_matrix[1][i]==pos_matrix[2][i]!=' ':
return True
if pos_matrix[0][0]==pos_matrix[1][1]==pos_matrix[2][2]!=' ':
return True
elif pos_matrix[0][2]==pos_matrix[1][1]==pos_matrix[2][0]!=' ':
return True
else:
return False
initGame()
my_tictactoe((1,1))
my_tictactoe((2,1))
my_tictactoe((1,2))
my_tictactoe((2,2))
my_tictactoe((2,3))
my_tictactoe((1,3))
my_tictactoe((3,1))
my_tictactoe((3,2))
my_tictactoe((3,3))
要增强代码,请开始创建具有特定用途的较小功能(请参见printBoard()
),直到每个功能只有one reason to change为止-阅读有关其他S OLID 的信息好-它们还有助于获得更清晰的代码。
编辑:添加了DRAW-State和initGame()