用Python给我设计一个井字棋,对手是AI

简介: 用Python给我设计一个井字棋,对手是AI

用Python给我设计一个井字棋,对手是AI

简介

用Python制作一个简单的井字棋小程序,然后玩家是自己和AI。

设计思路

这是一个用Python实现的基础井字棋游戏程序,其中玩家与对手AI轮流下棋,每次落子后判断是否有胜者或者平局,并输出结果。

以下是这个程序的设计思路:

  1. 首先定义一个“新棋盘”函数,它创建一个3x3的二维列表表示一个全新、未进行过任何操作的空白棋盘,其中空位置用’.'来表示。
  2. 定义一个“绘制棋盘”函数,它将当前棋盘状态以三行的形式输出到控制台界面,X和O分别表示直线棋和圆形棋。
  3. 定义一个“判断胜者”函数,用以检查当前棋盘状态是否存在胜利结局(有一行、一列或一条对角线全部填充了相同类型棋子);如果存在胜利情况,则返回排列一致的棋子类型(X或O)。如果不存在胜利情况,则返回None。
  4. 定义一个“检查棋盘是否已满”的函数,该函数扫描所有格子,遍历棋盘,如果已经下满了所有格子,则表示棋局结束并且为平局。
  5. 定义一个“获取可落子位置”的函数,该函数扫描所有还没有被占据的格子,然后记录每个空格的行和列索引,随后返回所有未占据的格子——即可落子位置列表。
  6. 定义一个“放置棋子”的函数,该函数将当前玩家的棋子放置在选定的位置上,并更新棋盘状态。
  7. 定义一个方便切换玩家角色的函数,将下一次操作的角色设为与之前相反的角色。
  8. 紧接着我们定义一个简单的AI对手,其会从可落子位置中随机选择一个格子,作为它每次下棋时的选择点(注意此处AI并没有使用更加复杂的搜索算法进行选择)。
  9. 最后、定义主函数来实现整个游戏的控制流程,通过循环地交替玩家和AI进出下棋场景来维持游戏评分,当满足特定条件(胜利、平局、放弃)时返回对应结果并退出程序。

以上就是这个井字棋游戏程序的设计思路的概述。

完整代码

以下是一个简单的井字棋的Python程序,其中对手使用了基本的随机决策AI,代码注释中有详细的说明。

import random
def new_board():
    """
    创建一个新的井字棋盘面,用'.'表示空位置
    """
    return [['.' for i in range(3)] for j in range(3)]
def draw_board(board):
    """
    绘制井字棋盘面
    """
    for i in range(3):
        print(' '.join(board[i]))
def get_winner(board):
    """
    判断当前盘面的胜者,默认返回None,表示还没有胜者
    """
    # 检查行
    for row in board:
        if row[0] != '.' and all(elem == row[0] for elem in row):
            return row[0]
    # 检查列
    for col in range(3):
        if board[0][col] != '.' and all(board[row][col] == board[0][col] for row in range(3)):
            return board[0][col]
    # 检查对角线
    if board[1][1] != '.' and ((board[0][0] == board[1][1] == board[2][2]) or (board[0][2] == board[1][1] == board[2][0])):
        return board[1][1]
    # 如果都没有胜者,则返回None
    return None
def is_full(board):
    """
    判断盘面是否已满
    """
    return all('.' not in row for row in board)
def get_possible_moves(board):
    """
    找到当前状态下可以下的所有位置
    """
    moves = []
    for row in range(3):
        for col in range(3):
            if board[row][col] == '.':
                moves.append((row, col))
    return moves
def make_move(board, player, move):
    """
    在盘面上放置棋子
    """
    row, col = move
    board[row][col] = player
def get_opponent(player):
    """
    获取对手玩家标志
    """
    return 'O' if player == 'X' else 'X'
def get_random_move(board):
    """
    返回一个随机下棋位置
    """
    moves = get_possible_moves(board)
    return random.choice(moves)
def play():
    """
    玩井字棋游戏
    """
    board = new_board()
    player_turn = True
    while True:
        draw_board(board)
        # 判断胜负
        winner = get_winner(board)
        if winner is not None:
            print(winner, 'win!')
            break
        elif is_full(board):
            print('Tie!')
            break
        # 选择下棋位置
        if player_turn:
            # 玩家下棋
            row = int(input('Enter row: '))
            col = int(input('Enter column: '))
            move = (row, col)
        else:
            # 对手下棋
            print("AI's turn...")
            move = get_random_move(board)
        # 下棋
        make_move(board, 'X' if player_turn else 'O', move)
        # 切换玩家
        player_turn = not player_turn
if __name__ == '__main__':
    play()

运行效果

相关文章
|
6天前
|
人工智能 Python
【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案
【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案
13 0
|
6天前
|
机器学习/深度学习 人工智能 算法
【AI大模型应用开发】【补充知识】文本向量化与向量相似度(含Python代码)
【AI大模型应用开发】【补充知识】文本向量化与向量相似度(含Python代码)
16 0
|
19天前
|
机器学习/深度学习 人工智能 算法
|
1月前
|
机器学习/深度学习 人工智能 算法
在Python中使用deepfakes实现AI换脸功能
在Python中使用deepfakes实现AI换脸功能
25 0
|
2月前
|
人工智能 自然语言处理 搜索推荐
迈向AI时代:掌握Python编程与ChatGPT的结合
ChatGPT是一种基于自然语言处理技术的模型,它可以理解人类的语言并生成相应的回复。而Python编程则是一种通过编写代码来实现特定功能的技能。将ChatGPT与Python编程相结合,我们可以利用ChatGPT来帮助我们理解编程概念、编写代码以及解决编程问题。
676 2
|
2月前
|
人工智能 机器人 API
Python和阿里云AI服务搭建
使用Python和阿里云AI服务搭建一个简单的聊天机器人的教程 1. 注册阿里云账号并登录。 2. 开通阿里云AI服务,并创建一个智能对话机器人。 3. 获取API密钥和AccessToken。 4. 安装Python环境和SDK。
251 8
|
2月前
|
机器学习/深度学习 人工智能 搜索推荐
Python进行AI声音克隆的端到端指南
人工智能语音克隆是一种捕捉声音的独特特征,然后准确性复制它的技术。这种技术不仅可以让我们复制现有的声音,还可以创造全新的声音。它是一种彻底改变内容创作的工具,从个性化歌曲到自定义画外音,开辟了一个超越语言和文化障碍的创意世界。
93 0
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
ChatGPT学python——制作自己的AI模型(一)初步了解
ChatGPT学python——制作自己的AI模型(一)初步了解
|
3月前
|
人工智能 弹性计算 开发工具
【Hello AI】安装并使用FastGPU-Python SDK使用说明
用户可以通过FastGPU提供的Python接口,将FastGPU集成到您的人工智能训练或推理脚本中,从而实现快速的云上部署和资源管理。
|
3月前
|
人工智能 算法 Python
Python猜数字游戏:集成高级AI对手
Python猜数字游戏:集成高级AI对手
25 0