用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字

xiaoyaoXY    -  云代码空间

——

python 井字棋游戏

2021-11-07|381阅||

摘要:python井字棋游戏 X="X" O="O" EMPTY=" " def ask_yes_no(question):     response=None;     while response not in("先","后"):         response=input(qu

python井字棋游戏


X="X"
O="O"
EMPTY=" "
def ask_yes_no(question):
    response=None;
    while response not in("先","后"):
        response=input(question).lower()
    return response
def ask_number(question ,low,high):
    response=None
    while response not in range(low,high):
        response=int(input(question))
    return response
def pieces():
    go_first=ask_yes_no("请问玩家你是否先走(先/后):")
    if go_first=="先":
        print("\n玩家你先走")
        human=X
        computer=O
    else:
        print("\n计算机先走")
        computer=X
        human=O
    return computer,human
def new_board():
    board=[]
    for square in range(9):
        board.append(EMPTY)
    return board
def display_board(board):
    board2=board[:]
    for i in range(len(board)):
        if board==EMPTY:
            board2=i
    print("\t",board2[0],"|",board2[1],"|",board2[2])
    print("\t","----------")
    print("\t",board2[3],"|",board2[4],"|",board2[5])
    print("\t", "----------")
    print("\t",board2[6],"|",board2[7],"|",board2[8],"\n")
def legal_moves(board):
    moves=[]
    for square in range(9):
        if board[square]==EMPTY:
            moves.append(square)
    return moves
def winner(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]]!=EMPTY:
            winner=board[row[0]]
            return winner
    if EMPTY not in board:
        return "TIE"
    return False
def human_move (board,human):
    legal =legal_moves(board)
    move =None
    while move not in legal:
        move=ask_number("你走哪个位置?(0-8):",0,9)
        if move not in legal:
            print("\n此位置已经有子了")
    return  move
def computer_move(board,computer ,human):
    board=board[:]
    BEST_MOVES=(4,0,2,6,8,1,3,5,7)
    for move in legal_moves(board):
            board[move]=computer
            if winner(board)==computer:
                print("计算机下棋位置...",move)
                return move
            board[move]=EMPTY
    for move in legal_moves(board):
            board[move]=human
            if winner(board)==human:
                print("计算机下棋位置...",move)
                return move
            board[move]=EMPTY
    for move in BEST_MOVES:
        if move in legal_moves(board):
            print("计算机下棋位置....",move)
            return move
def next_turn(turn):
    if turn ==X:
         return  O
    else:
        return  X
def main():
        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)
        if the_winner==computer:
            print("计算机赢!\n")
        elif the_winner==human:
            print("玩家赢!\n")
        elif the_winner=="TIE":
            print("平局,游戏结束\n")
main()
input("按任意键退出游戏")
顶 0踩 0收藏
文章评论
    发表评论

    个人资料

    • 昵称: xiaoyaoXY
    • 等级: 中级程序员
    • 积分: 140
    • 代码: 0 个
    • 文章: 3 篇
    • 随想: 0 条
    • 访问: 1 次
    • 关注

    人气代码

      标签

      最新提问

        站长推荐