猫史档案馆


【Python作品分享】井字琪!!!!【作品秀】

用户:噩絔y噩絔y查看:1 回复:1 评论:1 创建时间:2023-02-15T19:14:38


【作品展示】

center_image

 

【作品介绍】

6

 

【作品源代码】

O = "O"
X = "X"
EMPTY = " "
TIE = "TIE"
NUM = 9
human = "X"
computer = "O"


def js():
    """游戏说明"""
    print("""
    游戏说明
棋盘分为9个部分
0 | 1  | 2
------------
3 | 4  | 5
------------
6 | 7  | 8  
位置从0开始,直接输入位置数字
你为X,电脑为O
连成一条线即胜利,来自噩絔y!""")


def ask_number(question, low, high):  # 下的位置
    """ zdwz"""
    response = -1
    while response not in range(low, high):
        response = int(input(question))  # 返回位置
    return response


def new_board():  # 创建棋盘
    """new game"""
    board = []  # 创建空列表
    for sqare in range(NUM):
        board.append(EMPTY)  # 创建空白元素
    return board


def display(board):  # 打印棋盘
    """display game board on creen"""
    print("\t", board[0], "|", board[1], "|", board[2])
    print("         ---------")
    print("\t", board[3], "|", board[4], "|", board[5])
    print("         ---------")
    print("\t", board[6], "|", board[7], "|", board[8], "\n")


def legal_moves(board):  # 接收棋盘,检查合法性
    """legare"""
    moves = []
    for 喵 in range(NUM):  # 检查是否有空位
        if board[喵] == EMPTY:
            moves.append(喵)
    return moves  # 返回空位


def winner(board):  # 判断输赢
    """game winner"""
    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 WIN:
        if board[row[0]] == board[row[1]] == board[row[2]] == human:  # 检查是否有连线
            winner = human
            return winner
        elif board[row[0]] == board[row[1]] == board[row[2]] == computer:  # 检查是否有连线
            winner = computer
            return winner
        elif EMPTY not in board:  # 检查是否有空位
            return TIE
    return None


def human_move(board, human):  # 玩家动棋
    """GET human move"""
    legal = legal_moves(board)  # 获取合法位置
    move = None
    while move not in legal:
        move = ask_number("请输入0 - 8:", 0, NUM)
        if move not in legal:
            print("\n此位置已被占用,请重新选择\n")
    print("Fine...")
    return move  # 返回玩家选的位置


def computer_move(board, computer, human):  # 电脑动棋
    """MAKE computer move"""
    board = board[:]  # 创建棋盘副本
    BEST = (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:  # 选择最佳位置
        if move in legal_moves(board):
            print("电脑:", move)
            return move


def next_turn(turn):  # 返回下一个行棋方
    """turn"""
    if turn == "X":
        return O
    else:
        return X


def congrat_winner(the_winner, computer, human):  # 返回输赢
    """winner"""
    if the_winner == human:
        print("你赢了!\n")
    elif the_winner == computer:
        print("你输了!")
    else:
        print("平局!\n")


def main():  # 执行主程序
    js()
    turn = X  # 当前下棋方
    board = new_board()
    display(board)  # 创建棋盘
    while not winner(board):
        if turn == human:  # 玩家下
            move = human_move(board, human)
            board[move] = human
        elif turn == computer:
            move = computer_move(board, computer, human)  # 电脑下
            board[move] = computer
        display(board)  # 打印棋盘
        the_winner = winner(board)
        turn = next_turn(turn)  # 切换下棋方
    congrat_winner(the_winner, computer, human)


main()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
LinkanLinkan

6.

点赞0


评论