棋盘游戏.md

   
#全局变量
X = "X"
O = "O"
EMPTY = " "
TIE = "TIE"
NUM_SQUARES = 9

def display_instruct():
    """Display game instruction."""
    print("""
    Welcome to the greatest intellectual challenge of all time:Tic-Tac-Toe.
    This will be a showdown between your human brain and my silicon processor.
    
    You will make your move known by entering a number 0-8,The number 
    will correspond to the board position as illustrate:
                     
                    0 | 1 | 2 |
                    -----------
                    3 | 4 | 5 |
                    -----------
                    6 | 7 | 8 |
                    
    Prepare yourself,human.The ultimate battle is about tobegin.\n
""")
    
def ask_yes_no(question):
    """Ask a yes or no question"""
    response = None
    while response not in ("y","n"):
        response = input(question).lower()
    return response

def ask_number(question,low,high):
    """Ask for a nummber within a range."""
    response = None
    while response not in range(low,high):
        response = int(input(question))
    return response

def pieces():
    """Determine if player or comuputer goes first."""
    go_first = ask_yes_no("Do you require the first move?(y/n):")
    if go_first == "y":
        print("\nThen take the first move.You will need it.")
        human = X
        computer = O
    else:
        print("\nYour bravery will be your undoing...I wil go first.")
        computer = X
        human = O
    return computer,human

def new_board():
    """Create new game board."""
    board = []
    for square in range(NUM_SQUARES):
        board.append(EMPTY)
    return board

def display_board(board):
    """Display game board on screen."""
    print("\n\t",board[0],"|",board[1],"|",board[2])
    print("\t","----------")
    print("\t",board[3],"|",board[4],"|",board[5])
    print("\t","----------")
    print("\t",board[6],"|",board[7],"|",board[8],"\n")

def legal_move(board):
    """Create list of legal moves."""
    moves = []
    for square in range(NUM_SQUARES):
        if board[square] == EMPTY:
            moves.append(square)
    return moves

def winner(board):
    """Detemine the game winner."""
    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]] != EMPTY:
            winner = board[row[0]]
            return winner
    if EMPTY not in board:
        return TIE
    return None

def human_move(board,human):
    """Get human move."""
    legal = legal_move(board)
    move = None
    while move not in legal:
        move = ask_number("Where will you move?(0-8):",0,NUM_SQUARES)
        if move not in legal:
            print("\nThat square is already occupied.foolish human.Choose another.\n")
    print("Fine...")
    return move

def computer_move(board,computer,human):
    """Make computer move."""
    board = board[:]

    BEST_MOVES = (4,0,2,6,8,1,3,5,7)
    
    print("I shall take square number",end=" ")
    for move in legal_move(board):
        board[move] = computer
        if winner(board) == computer:
            print(move)
            return move
        board[move] = EMPTY
    for move in legal_move(board):
        board[move] = human
        if winner(board) == human:
            print(move)
            return move
        board[move] = EMPTY
    for move in BEST_MOVES:
        if move in legal_move(board):
            print(move)
            return move

def next_turn(turn):
    """Switch turns."""
    if turn == X:
        return O
    else:
        return X

def congra_winner(the_winner,computer,human):
    """Congratulate the winner."""
    if the_winner != TIE:
        print(the_winner,"won!\n")
    else:
        print("It's a tie!\n")
    if the_winner == computer:
        print("As I predicted,human,I am triumphant once more.\n")
    elif the_winner == human:
        print("NO,no! It cannot be!Somehow you tricked me,human.\n")
    elif the_winner == TIE:
        print("You were most lucky,human,and somehow managed to tie me.\n")
    
def main():
    display_instruct()
    computer,human = pieces()
    turn = X
    board = new_board()
    display_board(board)
    
    while not winner(board):
        if turn == human:
            move = human_move(board,human)
            board[move] = human
        else:
            move = computer_move(board,computer,human)
            board[move] = computer
        display_board(board)
        turn = next_turn(turn)
    
    the_winner = winner(board)
    congra_winner(the_winner,computer,human)
    
    
main()
    
    
 Welcome to the greatest intellectual challenge of all time:Tic-Tac-Toe.
 This will be a showdown between your human brain and my silicon processor.
 
 You will make your move known by entering a number 0-8,The number 
 will correspond to the board position as illustrate:
                  
                 0 | 1 | 2 |
                 -----------
                 3 | 4 | 5 |
                 -----------
                 6 | 7 | 8 |
                 
 Prepare yourself,human.The ultimate battle is about tobegin.


Do you require the first move?(y/n):n

Your bravery will be your undoing...I wil go first.

	   |   |  
	 ----------
	   |   |  
	 ----------
	   |   |   

I shall take square number 4

	   |   |  
	 ----------
	   | X |  
	 ----------
	   |   |   

Where will you move?(0-8):0
Fine...

	 O |   |  
	 ----------
	   | X |  
	 ----------
	   |   |   

I shall take square number 2

	 O |   | X
	 ----------
	   | X |  
	 ----------
	   |   |   

Where will you move?(0-8):6
Fine...

	 O |   | X
	 ----------
	   | X |  
	 ----------
	 O |   |   

I shall take square number 3

	 O |   | X
	 ----------
	 X | X |  
	 ----------
	 O |   |   

Where will you move?(0-8):5
Fine...

	 O |   | X
	 ----------
	 X | X | O
	 ----------
	 O |   |   

I shall take square number 8

	 O |   | X
	 ----------
	 X | X | O
	 ----------
	 O |   | X 

Where will you move?(0-8):1
Fine...

	 O | O | X
	 ----------
	 X | X | O
	 ----------
	 O |   | X 

I shall take square number 7

	 O | O | X
	 ----------
	 X | X | O
	 ----------
	 O | X | X 

It's a tie!

You were most lucky,human,and somehow managed to tie me.

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/DMU_lzq1996/article/details/82963275