news 2026/5/9 13:33:19

500行代码还原儿时经典 Python Pygame 制作带 AI 决策的飞行棋

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
500行代码还原儿时经典 Python Pygame 制作带 AI 决策的飞行棋

1. 前言
飞行棋(Aeroplane Chess)是许多人童年的回忆。今天,我们将使用 Python 的 Pygame 库,从零开始构建一个完整的飞行棋游戏。

这不仅仅是一个简单的绘图程序,它包含了完整的游戏逻辑状态机、一维路径坐标映射,以及一个基于启发式搜索的智能 AI 玩家。

2. 核心功能展示

完整规则:起飞(掷6)、跳跃(同色)、加油站飞跃、击退对手(送回基地)、终点精确走位。
智能 AI:支持人机博弈,AI 具备“进攻”与“竞速”意识。
实时交互:动态显示投骰子动画,实时统计四方棋子的状态(基地、飞行、到达)。
跨平台兼容:自动识别 Windows/Linux 字体库,完美解决 Pygame 中文显示乱码问题。

3. 核心设计思路

3.1 坐标系统的“一维化”
飞行棋的棋盘路径非常复杂,包含拐弯和交叉。为了简化逻辑,我没有使用复杂的二维数组,而是设计了一套坐标映射系统:

路径定义:将棋盘主跑道定义为一个 52 个点的序列。
进度管理:每架飞机只需记录自己的 progress(0 到 56)。
映射转换:通过 AXIS_MAP 和 densify_path 函数,将逻辑进度动态映射为屏幕上的像素坐标。

3.2 游戏状态机

为了保证游戏逻辑严密,程序采用状态机管理:

wait_roll: 等待玩家点击骰子。
rolling: 播放投骰子随机动画。
choose: 玩家选择要移动的飞机。
ai_wait: AI 思考与操作的延迟感。

3.3 启发式 AI 策略

代码中的 ai_choose 函数赋予了电脑玩家基本的“策略”,其判断逻辑如下(优先级递减):

起飞优先:只要掷出 6,优先让基地里的飞机出发。
进攻优先:模拟移动路径,如果能精准“踩掉”对手飞机,优先执行。
进度优先:在普通移动中,选择最接近终点的飞机,确保尽快冲线。

4. 关键代码解析

4.1 自动扫描系统中文字体
Pygame 默认不支持中文,这段代码自动匹配系统已安装的中文字体:
def load_font(size): import platform # 自动探测 Windows 和 Linux 下的常用中文字体路径 font_paths = [ "C:/Windows/Fonts/msyh.ttc", # 微软雅黑 "C:/Windows/Fonts/simhei.ttf", # 黑体 "/usr/share/fonts/opentype/noto/NotoSansCJK-Regular.ttc" # Linux Noto ] for p in font_paths: if os.path.exists(p): return pygame.font.Font(p, size) return pygame.font.SysFont('arial', size) # 保底方案

4.2 AI 决策核心

def ai_choose(self, movable): # 策略1:优先起飞 for p in movable: if p.state == 'base': return p # 策略2:模拟攻击(检测是否能击退对手) for p in movable: if p.state == 'track': new_ti = (CFG[p.color]['start'] + p.progress + self.dice) % 52 for oc in PLAYER_ORDER: if oc != p.color: for op in self.planes[oc]: if op.state == 'track' and op.track_index() == new_ti: return p # 发现可以击退对手,果断出击 # 策略3:选择进度最快的飞机 return max(movable, key=lambda p: p.progress)

效果图:

5. 性能测试报告


经过测试,该程序在主流电脑上运行表现如下:

帧率 (FPS):锁定 30 帧,渲染开销极低(CPU 占用 < 2%)。
AI 决策耗时:单次逻辑计算约 0.05ms,响应极快。
兼容性:支持 Windows 10/11 及 Ubuntu 系统。

6. 如何运行

安装依赖:pip install pygame
复制文末源码,保存为 dice_game.py。
直接运行:python dice_game.py

7. 总结与展望
这个项目展示了如何处理棋盘类游戏的逻辑映射。后续可以改进的方向包括:

加入蒙特卡洛搜索提升 AI 难度。
增加联机对战功能。
丰富音效与爆炸动画。
如果你觉得这个项目有趣,欢迎在评论区留言交流,或者去我的 GitHub 点个 Star!

https://github.com/yuanj1ng1723/aeroplane-chess

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 10:21:28

创建abb机器人机械装置————简易活塞

步骤 1&#xff1a;新建并保存工作站打开 RobotStudio&#xff0c;新建空工作站点击「文件」→「保存工作站为」&#xff0c;命名为5-4 example&#xff0c;保存为.rsstn 格式步骤 2&#xff1a;创建活塞主体&#xff08;圆柱体&#xff09;切换到建模选项卡点击「固体」→「圆…

作者头像 李华
网站建设 2026/5/9 13:29:59

2026 年 4 月 GEO 优化服务商 TOP5:行业头部品牌实力全景展现

2026 年&#xff0c;生成式 AI 彻底重塑信息分发与用户获取信息的核心逻辑&#xff0c;品牌在 AI 生态中的曝光度、呈现质感与可信背书&#xff0c;直接决定市场声量与商业转化效率。GEO&#xff08;生成式引擎优化&#xff09;作为企业链接 AI 生态与终端用户的关键通路&#…

作者头像 李华
网站建设 2026/5/9 13:32:59

RNN与LSTM

RNN 是什么你可以把 RNN 理解成&#xff1a;一种专门处理“序列”的神经网络&#xff0c;它会把前面时刻的信息带到后面时刻。这里的“序列”可以是&#xff1a;一个句子的词序列一段语音序列一个时间序列一串股票价格一段视频帧序列在语言里&#xff0c;序列就是&#xff1a;我…

作者头像 李华
网站建设 2026/4/12 12:10:14

LeetCode hot100-105从前序与中序遍历序列构造二叉树

class Solution { public:TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {if(preorder.empty()||inorder.empty()) return nullptr;vector<int> lpre,lin,rpre,rin;TreeNode* ansnew TreeNode(preorder[0]);;int flg0;// 分割…

作者头像 李华
网站建设 2026/4/11 23:07:11

Phi-3-mini-128k-instruct安全与合规性测试:对抗性提示与风险规避展示

Phi-3-mini-128k-instruct安全与合规性测试&#xff1a;对抗性提示与风险规避展示 最近&#xff0c;各种开源和闭源的大模型层出不穷&#xff0c;大家在惊叹其强大能力的同时&#xff0c;心里也难免会犯嘀咕&#xff1a;这东西用起来安全吗&#xff1f;会不会一不小心就说出些…

作者头像 李华
网站建设 2026/4/11 21:11:51

LangChain教程-、Langchain基础来

简介 AI Agent 不仅仅是一个能聊天的机器人&#xff08;如普通的 ChatGPT&#xff09;&#xff0c;而是一个能够感知环境、进行推理、自主决策并调用工具来完成特定任务的智能系统&#xff0c;更够完成更为复杂的AI场景需求。 AI Agent 功能 根据查阅的资料&#xff0c;agent的…

作者头像 李华