SaveText.Ru

Без имени
  1. X = "X"
  2. O = "O"
  3. EMPTY = " "
  4. TIE = "Ничья"
  5. NUM_SQUARES = 9
  6.  
  7.  
  8. def display_instr():
  9.         print("Инструкция")
  10.  
  11.  
  12. def ask_yes_no(question):
  13.         respone = None
  14.         while respone not in ("y", "n"):
  15.                 respone = input(question).lower()
  16.         return respone
  17.  
  18.  
  19. def ask_number(question, low, high):
  20.         respone = None
  21.         while respone not in range(low, high):
  22.                 respone = int(input(question))
  23.         return respone
  24.  
  25.  
  26. def pieces():
  27.         go_first = ask_yes_no("Хочешь оставить за собой первый ход? (y/n): ")
  28.         if go_first == "y":
  29.                 print("Ну что ж, даю тебе фору, играй крестикаи")
  30.                 human = X
  31.                 computer = O
  32.         else:
  33.                 print("Твоя удаль тебя погубит... Буду начинать я.")
  34.                 human = O
  35.                 computer = X
  36.         return computer, human
  37.  
  38.  
  39. def new_board():
  40.         board = []
  41.         for square in range(NUM_SQUARES):
  42.                 board.append(EMPTY)
  43.         return board
  44.  
  45.  
  46. def display_board(board):
  47.         print("nt", board[0], "|", board[1], "|", board[2])
  48.         print("t", "----------")
  49.         print("nt", board[3], "|", board[4], "|", board[5])
  50.         print("t", "----------")
  51.         print("nt", board[6], "|", board[7], "|", board[8], "n")
  52.  
  53.  
  54. def legal_moves(board):
  55.         moves = []
  56.         for square in range(NUM_SQUARES):
  57.                 if board[square] == EMPTY:
  58.                         moves.append(square)
  59.         return moves
  60.  
  61.  
  62. def winner(board):
  63.         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))
  64.         for row in WAYS_TO_WIN:
  65.                 if board[row[0]] == board[row[1]] == board[row[2]] != EMPTY:
  66.                         winner = board[row[0]]
  67.                         return winner
  68.  
  69.  
  70. def human_move(board, human):
  71.         legal = legal_moves(board)
  72.         move = None
  73.         while move not in legal:
  74.                 move = ask_number("Твой ход. Выбери поля (0-8):", 0, NUM_SQUARES)
  75.                 if move not in legal:
  76.                         print("Смешной человек! Это поле уже занято.")
  77.                 return move
  78.  
  79.  
  80. def computer_move(board, computer, human):
  81.         board = board[:]
  82.         BEST_MOVES = (4, 0, 2, 6, 8, 1, 3, 5, 7)
  83.         print("Я выберу поле номер", end=" ")
  84.         for move in legal_moves(board):
  85.                 board[move] = human
  86.                 if winner(board) == human:
  87.                         print(move)
  88.                         return move
  89.                 board[move] = EMPTY
  90.         for move in legal_moves(board):
  91.                 board[move] = human
  92.                 if winner(board) == human:
  93.                         print(move)
  94.                         return move
  95.  
  96.  
  97. def next_turn(turn):
  98.         if turn == X:
  99.                 return O
  100.         else:
  101.                 return X
  102.  
  103.  
  104. def congrat_winner(the_winner, computer, human):
  105.         if the_winner != TIE:
  106.                 print("Три", the_winner, "в ряд")
  107.         else:
  108.                 print("Ничья")
  109.         if the_winner == computer:
  110.                 print("Как я и предсказывал, победа в очередной раз осталась за мной")
  111.         elif the_winner == human:
  112.                 print("О нет, неужели ты перехитрил меня")
  113.         elif the_winner == TIE:
  114.                 print("Ничья")
  115.  
  116.  
  117. def main():
  118.         display_instr()
  119.         computer, human = pieces()
  120.         turn = X
  121.         board = new_board()
  122.         display_board(board)
  123.         while not winner(board):
  124.                 if turn == human:
  125.                         move = human_move(board, human)
  126.                         board[move] = human
  127.                 else:
  128.                         move = computer_move(board, computer, human)
  129.                         board[move] = computer
  130.                 display_board(board)
  131.                 turn = next_turn(turn)
  132.         the_winner = winner(board)
  133.         congrat_winner(the_winner, computer, human)
  134.  
  135.  
  136. main()
  137. input("Нажмите ентер, чтобы выйти")
  138.  
  139.  

Share with your friends:

Print