基于python的井字棋游戏 – 苏的小站

成功 用自己的方式度过一生

个人作品展示

苏的小站 ·

面试作品 简历展示、项目简介、技术栈
风格 现代、简约

基于python的井字棋游戏

项目地址:suyihang15/tic_tac_toe_gui: 基于python的井字棋游戏

下载地址:https://github.com/suyihang15/tic_tac_toe_gui/releases/download/1.0.0/tic_tac_toe_gui.exe

🎮 井字棋游戏 (Tic-Tac-Toe)

一个使用 Python 内置 tkinter 库开发的图形化井字棋游戏,支持双人模式人机对战模式,界面美观、交互流畅。


✨ 功能特性

特性说明
👫 双人模式 (PvP)两名玩家在同一台电脑上轮流落子
🤖 人机模式 (PvE)与 AI 对战,AI 具备智能决策策略
🎨 深色主题 UI美观的深色界面,X(蓝色)与 O(红色)颜色区分
🏆 获胜高亮获胜连线自动变为金色,一目了然
🔄 模式随时切换下拉菜单一键切换模式,自动重置棋盘
🖱️ 纯鼠标操作点击即落子,无需键盘输入
📦 零依赖完全基于 Python 内置库,无需安装任何第三方包

🚀 快速开始

环境要求

  • Python 3.6 或更高版本
  • 操作系统:Windows / macOS / Linux 均可

运行方法

# 进入项目目录
cd d:\zhuomian\游戏

# 运行游戏
python tic_tac_toe_gui.py

🎯 游戏规则

  1. 棋盘为 3×3 的九宫格,两名玩家轮流落子
  2. X 先手O 后手
  3. 点击空白格子即可落子
  4. 先将三个棋子连成一条直线(横、竖、斜)的玩家获胜
  5. 棋盘下满无人获胜则为平局

位置编号

 1 | 2 | 3 
---+---+---
 4 | 5 | 6 
---+---+---
 7 | 8 | 9 

💡 游戏中无需手动输入编号,只需点击对应格子即可。


🤖 AI 策略说明

AI 对手使用以下优先级策略来选择最佳落子位置:

优先级策略说明
🥇直接获胜如果 AI 下一步能赢,立即落子获胜
🥈阻挡对手如果对手下一步能赢,优先阻挡
🥉占领中心抢占棋盘正中央(5 号位)
4选择角落随机选择四个角位之一
5选择边位最后选择四条边上的位置

📁 项目结构

游戏/
├── tic_tac_toe_gui.py    # 主程序文件(包含完整代码)
├── README.md             # 项目说明文档(本文件)

🧩 代码架构

类设计:TicTacToeGUI

整个游戏封装在 TicTacToeGUI 类中,主要方法分类如下:

🏗️ GUI 构建方法

方法功能
_create_widgets()创建所有 GUI 组件
_create_title_bar()创建标题栏
_create_mode_selector()创建模式选择下拉菜单
_create_board()创建 3×3 棋盘按钮
_create_status_bar()创建状态信息栏
_create_control_buttons()创建控制按钮(重新开始、退出)
_center_window()将窗口居中于屏幕

🎮 事件处理方法

方法功能
_on_mode_change(selection)切换游戏模式
_on_button_click(index)处理玩家点击棋盘
_make_move(index, symbol)执行落子逻辑
_ai_turn()AI 回合自动落子

🧠 游戏逻辑方法

方法功能
_check_winner(board)检查是否有获胜者
_is_board_full(board)检查棋盘是否已满
_get_available_positions(board)获取所有空闲位置
_ai_move(board, symbol)AI 决策核心算法
_highlight_winner(winner)高亮获胜连线
_update_status()更新状态栏文字
_reset_game()重置游戏到初始状态

🖼️ 界面预览

游戏界面包含以下区域:

┌─────────────────────────────┐
│        🎮 井字棋            │  ← 标题栏
├─────────────────────────────┤
│  游戏模式:[双人模式 ▾]     │  ← 模式选择
├─────────────────────────────┤
│                             │
│    X │   │ O                │
│   ───┼───┼───               │  ← 3×3 棋盘
│      │ X │                  │
│   ───┼───┼───               │
│    O │   │ X                │
│                             │
├─────────────────────────────┤
│      玩家 X 的回合           │  ← 状态栏
├─────────────────────────────┤
│  [🔄 重新开始]  [🚪 退出]  │  ← 控制按钮
└─────────────────────────────┘

💻 代码示例

核心胜负判定逻辑(仅需 8 行):

def _check_winner(self, board):
    win_combinations = [
        [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 combo in win_combinations:
        if board[combo[0]] == board[combo[1]] == board[combo[2]] != " ":
            return board[combo[0]]
    return None

🛠️ 自定义与扩展

你可以轻松修改以下内容:

  • 修改棋盘大小:调整 _create_board() 中的循环和 win_combinations
  • 更换主题颜色:修改 bgfg 等颜色值
  • 增强 AI:在 _ai_move() 中添加更复杂的策略(如 Minimax 算法)

📄 许可证

本项目仅供学习和娱乐使用,欢迎自由修改和分享。


✨ 小贴士:在双人模式下,两名玩家可以轮流使用同一台电脑进行对战;在人机模式下,你将与 AI 进行较量,看看你能连胜几局?

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注