The whole game of tic-tac-toe occurs in the console. I do not know how to implement the output image several times. That is, the player walks with a cross, the output of the updated image. I went to the computer nolikom-> output pictures. In the setting
function, the game field is set up and output. And then in the function display_board
should be a drawing of a cross or a zero, depending on the move, but it displays nothing in this function. Here is the complete program code.
import matplotlib.pyplot as plt from matplotlib.lines import Line2D class Game: X = "X" O = "O" EMPTY = " " NUM_SQUARES = 9 TIE = "TIE" xCircle = [0.5,1.5,2.5,0.5,1.5,2.5,0.5,1.5,2.5] yCircle = [2.5,2.5,2.5,1.5,1.5,1.5,0.5,0.5,0.5] radius = 0.5 xLine = [[0,1],[1,2],[2,3],[0,1],[1,2],[2,3],[0,1],[1,2],[2,3]] yLine = [[2,3],[2,3],[2,3],[1,2],[1,2],[1,2],[0,1],[0,1],[0,1]] fig = plt.figure() ax = fig.add_subplot(111,aspect='equal') color = 'k' fill =False def setting(self): self.ax = self.fig.add_subplot(111,aspect='equal') self.ax.set_xticks([1,2,3]) self.ax.set_yticks([1,2,3]) self.ax.tick_params(axis='both', left='off', top='off', right='off', bottom='off', labelleft='off', labeltop='off', labelright='off', labelbottom='off') self.ax.grid() plt.draw() plt.pause(0.1) def ask_yes_no(self,question): """ΠΠ°Π΄Π°ΡΡ Π²ΠΎΠΏΡΠΎΡ Ρ ΠΎΡΠ²Π΅ΡΠΎΠΌ 'ΠΠ°' ΠΈΠ»ΠΈ 'ΠΠ΅Ρ'.""" response = None while response not in ("y", "n"): response = input(question).lower() return response def ask_number(self,question, low, high): """ΠΡΠΎΡΠΈΡ Π²Π²Π΅ΡΡΠΈ ΡΠΈΡΠ»ΠΎ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°""" response = None while response not in range(low, high): response = int(input(question)) return response def pieces(self): """ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠΎΠ²ΠΎΠ³ΠΎ Ρ
ΠΎΠ΄Π°.""" go_first = self.ask_yes_no("ΠΠ³ΡΠ°ΡΡ ΠΊΡΠ΅ΡΡΠΈΠΊΠ°ΠΌΠΈ? (y, n): ") if go_first == "y": print("\n ΠΡ ΠΈΠ³ΡΠ°Π΅ΡΠ΅ ΠΊΡΠ΅ΠΊΡΠΈΠΊΠ°ΠΌΠΈ.") human = self.X computer = self.O else: print("\n ΠΡ ΠΈΠ³ΡΠ°Π΅ΡΠ΅ Π½ΠΎΠ»ΠΈΠΊΠ°ΠΌΠΈ") computer = self.X human = self.O return computer, human def new_board(self): """Π‘ΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΡ ΠΈΠ³ΡΠΎΠ²ΡΡ Π΄ΠΎΡΠΊΡ.""" board = [] for square in range(self.NUM_SQUARES): board.append(self.EMPTY) return board def display_board(self,board): """ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ ΠΈΠ³ΡΠΎΠ²ΡΡ Π΄ΠΎΡΠΊΡ Π½Π° ΡΠΊΡΠ°Π½Π΅.""" for i in range(self.NUM_SQUARES): if (board[i]!=self.EMPTY): if (board[i]==self.X): line = Line2D(self.xLine[i], self.yLine[i],color='k') self.ax.add_line(line) plt.draw() plt.pause(0.1) if (board[i]==self.O): self.ax.add_artist(plt.Circle((self.xCircle[i], self.yCircle[i]), self.radius, color=self.color, fill=self.fill)) plt.draw() plt.pause(0.1) def legal_moves(self,board): """Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠΏΠΈΡΠΎΠΊ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
Ρ
ΠΎΠ΄ΠΎΠ².""" moves = [] for square in range(self.NUM_SQUARES): if board[square] == self.EMPTY: moves.append(square) return moves def winner(self,board): """ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠΎΠ±Π΅Π΄ΠΈΡΠ΅Π»Ρ Π² ΠΈΠ³ΡΠ΅.""" WAYS_TO_WIN = ((0, 1, 2), (3, 4, 5), (6, 7, 8), (0, 3, 6), (1, 4, 7), (2, 5, 8), (0, 4, 8), (2, 4, 6)) for row in WAYS_TO_WIN: if board[row[0]] == board[row[1]] == board[row[2]] != self.EMPTY: winner = board[row[0]] return winner if self.EMPTY not in board: return self.TIE return None def human_move(self,board, human): """ΠΠΎΠ»ΡΡΠ°Π΅Ρ Ρ
ΠΎΠ΄ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°""" legal = self.legal_moves(board) move = None while move not in legal: move = self.ask_number("Π’Π²ΠΎΠΉ Ρ
ΠΎΠ΄. ΠΡΠ±Π΅ΡΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ (0 - 8):", 0, self.NUM_SQUARES) if move not in legal: print("\nΠΡΠΎ ΠΏΠΎΠ»Π΅ ΡΠΆΠ΅ Π·Π°Π½ΡΡΠΎ. ΠΡΠ±Π΅ΡΠΈ Π΄ΡΡΠ³ΠΎΠ΅.\n") return move def computer_move(self,board, computer, human): """ΠΠ΅Π»Π°Π΅Ρ Ρ
ΠΎΠ΄ Π·Π° ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΈΠ²Π½ΠΈΠΊΠ°.""" # ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ°Π±ΠΎΡΡΡ ΠΊΠΎΠΏΠΈΡ Π΄ΠΎΡΠΊΠΈ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π½ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΡΠΏΠΈΡΠΊΠ΅ board = board[:] # Ρ
ΠΎΠ΄Ρ, ΠΎΡ Π»ΡΡΡΠ΅Π³ΠΎ ΠΊ Ρ
ΡΠ΄ΡΠ΅ΠΌΡ BEST_MOVES = (4, 0, 2, 6, 8, 1, 3, 5, 7) print("Π― Π²ΡΠ±Π΅ΡΡ ΠΏΠΎΠ»Π΅ Π½ΠΎΠΌΠ΅Ρ", end = " ") # Π΅ΡΠ»ΠΈ ΡΠ΄Π΅Π΄ΡΡΡΠΈΠΌ Ρ
ΠΎΠ΄ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ±Π΅Π΄ΠΈΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅Ρ, Π²ΡΠ±Π΅ΡΠ΅ΠΌ ΡΡΠΎΡ Ρ
ΠΎΠ΄ for move in self.legal_moves(board): board[move] = computer if self.winner(board) == computer: print(move) return move # Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΡΠΎΠ³ΠΎ Ρ
ΠΎΠ΄Π°, ΠΎΡΠΌΠ΅Π½ΠΈΠΌ Π΅Π³ΠΎ (Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ ΠΈΠ³ΡΠΎΠ²ΠΎΠΉ Π΄ΠΎΡΠΊΠΈ) board[move] = self.EMPTY # Π΅ΡΠ»ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Ρ
ΠΎΠ΄ΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ±Π΅Π΄ΠΈΡΡ ΡΠ΅Π³Π»ΠΎΠ²Π΅ΠΊ, Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΠΌ ΡΡΠΎΡ Ρ
ΠΎΠ΄ for moves in self.legal_moves(board): board[move] = human if self.winner(board) == human: print(move) return move # Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΡΠΎΠ³ΠΎ Ρ
ΠΎΠ΄Π°, ΠΎΡΠΌΠ΅Π½ΠΈΠΌ Π΅Π³ΠΎ (Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ ΠΈΠ³ΡΠΎΠ²ΠΎΠΉ Π΄ΠΎΡΠΊΠΈ) board[move] = self.EMPTY # ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ Ρ
ΠΎΠ΄ΠΎΠΌ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· ΡΡΠΎΡΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ±Π΅Π΄ΠΈΡΡ, # Π²ΡΠ±Π΅ΡΠ΅ΠΌ Π»ΡΡΡΠ΅Π΅ ΠΈΠ· Π΄ΠΎΡΡΡΠΏΠ½ΡΡ
ΠΏΠΎΠ»Π΅ΠΉ for move in BEST_MOVES: if move in self.legal_moves(board): print(move) return move def next_turn(self,turn): """ΠΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ Ρ
ΠΎΠ΄Π°.""" if turn == self.X: return self.O else: return self.X def congrat_winner(self,the_winner, computer, human): """ΠΠΎΠ·Π΄ΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ±Π΅Π΄ΠΈΡΠ΅Π»Ρ ΠΈΠ³ΡΡ.""" if the_winner == computer: print("ΠΡ ΠΏΡΠΎΠΈΠ³ΡΠ°Π»ΠΈ!") elif the_winner == human: print("ΠΡ Π²ΡΠΈΠ³ΡΠ°Π»ΠΈ!") elif the_winner == self.TIE: print("ΠΠΈΡΡΡ!") def main(self): computer, human = self.pieces() self.setting() turn = self.X board = self.new_board() while not self.winner(board): if turn == human: move = self.human_move(board, human) board[move] = human else: move = self.computer_move(board, computer, human) board[move] = computer self.display_board(board) turn = self.next_turn(turn) the_winner =self.winner(board) self.congrat_winner(the_winner, computer, human) plt.ion() # Π·Π°ΠΏΡΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ clas=Game() clas.main() #input("ΠΠ°ΠΆΠΌΠΈΡΠ΅ Enter, ΡΡΠΎΠ±Ρ Π²ΡΠΉΡΠΈ.")