用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()

运行效果

相关文章
|
2月前
|
存储 人工智能 开发工具
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
只需要通过向AI助理提问的方式输入您的需求,即可瞬间获得核心流程代码及参数,缩短学习路径、提升开发效率。
1448 4
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
|
28天前
|
存储 人工智能 搜索推荐
Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库
Memoripy 是一个 Python 库,用于管理 AI 应用中的上下文感知记忆,支持短期和长期存储,兼容 OpenAI 和 Ollama API。
87 6
Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库
|
13天前
|
机器学习/深度学习 人工智能 数据挖掘
AI精通Python365天第1课,揭秘难易度
学习Python能显著提升就业竞争力,实现工作自动化,增强数据分析、机器学习、Web开发等技能,促进跨领域应用和个人成长。无论是职场新人还是资深人士,掌握Python都能带来正向的职业发展和收入增长,同时回馈社会。通过AI辅助学习Python,从基础代码开始实践,逐步提升编程能力,让技术成为个人发展的强大助力。
23 1
|
23天前
|
机器学习/深度学习 人工智能 算法
强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用
本文探讨了强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用,通过案例分析展示了其潜力,并讨论了面临的挑战及未来发展趋势。强化学习正为游戏AI带来新的可能性。
60 4
|
1月前
|
人工智能 IDE 开发工具
Python AI 编程助手
Python AI 编程助手。
46 5
|
1月前
|
人工智能 C语言 Python
AI师傅+通义灵码=零基础小白上手python真·不是梦
作为一名不懂编程的设计师,我一直渴望掌握AI辅助设计。在快刀青衣的推荐下,我尝试了AI师傅和通义灵码,成功写出了第一个Python程序,并理解了编程的基本概念。通过AI师傅的引导和通义灵码的帮助,我顺利完成了Coursera上的Python课程,获得了两张证书。这种学习方式让编程变得不再遥不可及,为我的未来学习打开了新大门。
|
2月前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
2月前
|
数据采集 人工智能 自然语言处理
AI Agent 金融助理0-1 Tutorial 利用Python实时查询股票API的FinanceAgent框架构建股票(美股/A股/港股) AI Finance Agent
金融领域Finance AI Agents方面的工作,发现很多行业需求和用户输入的 query都是和查询股价/行情/指数/财报汇总/金融理财建议相关。如果需要准确的 金融实时数据就不能只依赖LLM 来生成了。常规的方案包括 RAG (包括调用API )再把对应数据和prompt 一起拼接送给大模型来做文本生成。稳定的一些商业机构的金融数据API基本都是收费的,如果是以科研和demo性质有一些开放爬虫API可以使用。这里主要介绍一下 FinanceAgent,github地址 https://github.com/AI-Hub-Admin/FinanceAgent
|
2月前
|
人工智能 开发者 Python
python读取word文档 | AI应用开发
在RAG系统中,构建知识库时需读取多种外部文档,其中Word文档较为常见。本文介绍如何使用`python-docx`库读取Word文档(.docx格式)中的标题、段落、表格和图片等内容。首先通过`pip install python-docx`安装库,然后利用提供的接口提取所需信息。尽管该库功能强大,但在识别标题样式时需自定义逻辑,并且仅提供图片的URI而非直接加载。示例代码展示了读取文本、识别标题、读取表格及获取图片URI的方法。【10月更文挑战第2天】
95 2
|
3月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络深度剖析:Python带你潜入AI大脑,揭秘智能背后的秘密神经元
【9月更文挑战第12天】在当今科技飞速发展的时代,人工智能(AI)已深入我们的生活,从智能助手到自动驾驶,从医疗诊断到金融分析,其力量无处不在。这一切的核心是神经网络。本文将带领您搭乘Python的航船,深入AI的大脑,揭秘智能背后的秘密神经元。通过构建神经网络模型,我们可以模拟并学习复杂的数据模式。以下是一个使用Python和TensorFlow搭建的基本神经网络示例,用于解决简单的分类问题。
52 10