项目地址: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
🎯 游戏规则
- 棋盘为 3×3 的九宫格,两名玩家轮流落子
- X 先手,O 后手
- 点击空白格子即可落子
- 先将三个棋子连成一条直线(横、竖、斜)的玩家获胜
- 棋盘下满无人获胜则为平局
位置编号
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 - 更换主题颜色:修改
bg、fg等颜色值 - 增强 AI:在
_ai_move()中添加更复杂的策略(如 Minimax 算法)
📄 许可证
本项目仅供学习和娱乐使用,欢迎自由修改和分享。
✨ 小贴士:在双人模式下,两名玩家可以轮流使用同一台电脑进行对战;在人机模式下,你将与 AI 进行较量,看看你能连胜几局?