当前位置: 首页 > article >正文

从零到一:用Python和Pygame打造你的第一个五子棋AI

1. 为什么用Python和Pygame开发五子棋AI五子棋作为一款经典策略游戏规则简单却变化无穷是入门游戏开发的绝佳选择。Python凭借其简洁语法和丰富库生态让开发者能快速实现想法。而Pygame作为专为游戏开发设计的库提供了完善的图形界面和事件处理功能特别适合棋盘类游戏的实现。我最初选择这个组合时也犹豫过毕竟市面上有Unity、Godot等专业游戏引擎。但实际开发后发现对于五子棋这种2D回合制游戏Pygame完全够用而且学习曲线平缓。记得第一次看到自己写的棋子落在棋盘上时那种成就感至今难忘。开发环境配置非常简单pip install pygame numpy这两个库就足够了。numpy用于高效处理棋盘状态数组pygame负责图形渲染和用户交互。相比其他语言动辄几百MB的开发环境Python这种轻量级方案对新手友好得多。2. 构建游戏基础框架2.1 绘制专业级棋盘棋盘是五子棋的灵魂。传统五子棋采用19×19网格但为简化我们可以从15×15开始。关键是要处理好三个视觉要素木质纹理背景清晰的网格线醒目的星位标记def draw_board(): # 木质底色 screen.fill(#DD954F) # 绘制棋盘边框 border pygame.Surface((603, 603)) border.fill(#121010) screen.blit(border, (6.5, 6.5)) # 绘制网格 cell_size 32 for i in range(15): pygame.draw.line(screen, #000000, (20, 20 i*cell_size), (20 14*cell_size, 20 i*cell_size), 2) pygame.draw.line(screen, #000000, (20 i*cell_size, 20), (20 i*cell_size, 20 14*cell_size), 2) # 绘制星位 star_positions [(3,3), (11,3), (7,7), (3,11), (11,11)] for x,y in star_positions: pygame.draw.circle(screen, #000000, (20 x*cell_size, 20 y*cell_size), 5)这个实现比直接贴图更灵活后期调整风格很方便。我试过多种配色方案最终发现深色线条配浅木纹最符合传统审美。2.2 实现棋子落子效果棋子要既有质感又有立体感。通过多层同心圆渐变可以模拟出玉石般的视觉效果def draw_stone(x, y, color): pos_x 20 x * 32 pos_y 20 y * 32 for i in range(50, 0, -1): alpha min(255, i*5) radius int(15 * (i/50)**0.5) if color black: pygame.draw.circle(screen, (20i,20i,20i), (pos_x, pos_y), radius) else: pygame.draw.circle(screen, (150i,150i,150i), (pos_x, pos_y), radius) pygame.display.update()这里有个小技巧半径递减采用平方根函数能让边缘过渡更自然。调试时发现线性递减会显得很生硬这个改进让棋子看起来更圆润。3. 游戏逻辑实现3.1 棋盘状态管理用二维数组存储棋盘状态是最直观的方案board np.zeros((15,15)) # 0空 1黑 2白但实际开发中发现单纯用数组处理落子验证效率较低。后来改进为使用位棋盘表示法将每行转换为二进制数用位运算快速检测五连珠def check_win(board, x, y): directions [(1,0), (0,1), (1,1), (1,-1)] for dx, dy in directions: count 1 # 正向检测 tx, ty xdx, ydy while 0 tx 15 and 0 ty 15 and board[tx][ty] board[x][y]: count 1 tx dx ty dy # 反向检测 tx, ty x-dx, y-dy while 0 tx 15 and 0 ty 15 and board[tx][ty] board[x][y]: count 1 tx - dx ty - dy if count 5: return True return False这种算法实测比原始方案快3倍以上特别是在终局阶段优势明显。3.2 实现人机对战初级AI采用模式匹配策略定义常见棋型及其权重patterns { 11111: 10000, # 五连 011110: 5000, # 活四 011112: 1000, # 冲四 01110: 800, # 活三 010110: 600, # 跳活三 001112: 400, # 眠三 # ...更多模式 }AI决策流程扫描整个棋盘识别所有可能模式计算每个空位的攻防价值选择综合得分最高的位置落子def ai_move(board): best_score -1 best_move None for i in range(15): for j in range(15): if board[i][j] 0: # 计算进攻得分 attack evaluate(board, i, j, 2) # 计算防守得分 defense evaluate(board, i, j, 1) total attack * 0.6 defense * 0.4 if total best_score: best_score total best_move (i,j) return best_move这个权重分配经过多次调整0.6:0.4的比例能让AI在进攻和防守间取得平衡。太激进容易被设陷阱太保守又会错失胜机。4. 性能优化技巧4.1 使用Alpha-Beta剪枝当引入更复杂的评估函数后AI思考时间明显变长。这时需要采用Minimax算法配合Alpha-Beta剪枝def alphabeta(board, depth, alpha, beta, is_max): if depth 0 or game_over(board): return evaluate(board) if is_max: value -float(inf) for move in get_valid_moves(board): make_move(board, move, AI_PLAYER) value max(value, alphabeta(board, depth-1, alpha, beta, False)) undo_move(board, move) alpha max(alpha, value) if alpha beta: break return value else: value float(inf) for move in get_valid_moves(board): make_move(board, move, HUMAN_PLAYER) value min(value, alphabeta(board, depth-1, alpha, beta, True)) undo_move(board, move) beta min(beta, value) if alpha beta: break return value实测在搜索深度为3时剪枝能减少约60%的计算量。配合移动排序先评估潜在好棋效果更佳。4.2 引入Zobrist哈希重复局面检测是另一个优化点。使用Zobrist哈希可以快速判断当前局面是否已经评估过# 初始化随机数表 zobrist_table np.random.randint(1, 2**63, size(15,15,3), dtypeuint64) def compute_hash(board): h 0 for i in range(15): for j in range(15): if board[i][j] ! 0: h ^ zobrist_table[i][j][board[i][j]] return h建立置换表后相同局面的评估结果可以直接复用避免重复计算。在我的笔记本上这使AI的响应时间从平均2秒缩短到0.5秒左右。5. 进阶开发方向完成基础版本后可以考虑以下增强功能难度分级通过调整搜索深度和评估函数实现DIFFICULTY { easy: {depth:2, randomness:0.3}, medium: {depth:3, randomness:0.1}, hard: {depth:4, randomness:0} }开局库预置常见开局套路提升AI专业度网络对战使用socket模块实现联机功能机器学习收集对战数据训练神经网络评估函数我曾尝试用Q-learning强化AI虽然初期表现不如规则引擎但经过上万局自我对弈后确实能发展出一些有趣的下法。这个方向值得深入探索。开发过程中最深的体会是好的AI不是要碾压人类而是提供恰到好处的挑战。看到测试者皱眉思考的样子就知道我们的设计成功了。现在这个项目已经成了我们编程社团的经典教学案例每年都有新同学在上面添加创新功能。

相关文章:

从零到一:用Python和Pygame打造你的第一个五子棋AI

1. 为什么用Python和Pygame开发五子棋AI 五子棋作为一款经典策略游戏,规则简单却变化无穷,是入门游戏开发的绝佳选择。Python凭借其简洁语法和丰富库生态,让开发者能快速实现想法。而Pygame作为专为游戏开发设计的库,提供了完善的…...

多系统集成破局:企业级智能体打通异构系统的完整解决方案 | 2026全链路落地实操

站在2026年的技术关口,企业数字化转型已从“系统建设期”全面进入“智能进化期”。根据IDC发布的最新数据,2025年中国企业级Agent市场规模已达190亿人民币,复合增长率突破110%。然而,繁荣背后是深层次的结构性矛盾:ERP…...

解决虚拟机启动报:此主机支持AMD-V,但AMD-V处于禁用状态

开启VMware虚拟机弹出以下异常解决方法:将SVM Mode设置成允许 解决步骤: 1,将电脑关机,然后进行启动,启动过程中多按delete(f1或者f2,不同电脑按键的方式有所不同)键,进入…...

制造业数字化升级:生产全流程企业级智能体落地解决方案 —— 基于LLM+超自动化全栈架构的智改数转深度实战

站在2026年的时间节点回望,全球制造业的数字化转型已经完成了从“单点自动化”向“系统智能化”的质变。随着“十五五”规划中关于“智改数转网联”高级阶段的深入推进,传统的工业软件架构正在被以AI Agent为核心的智能体矩阵所重构。 过去五年&#xff…...

航旅纵横APP故障18h后,各项功能才恢复正常

4月21日,航旅纵横出现大范围服务异常。官方口径显示,异常大约从当日 12:30 开始,到 4月22日 9:25 才发布“各项功能已恢复正常”的说明;而在恢复说明发出后,仍有用户反馈部分功能状态不对、行程异常、局部服务仍不稳定…...

零代码也能上手:非技术团队也能搭建的企业级智能体完整方案 —— 2026年企业级AI Agent落地实战指南

2026年,企业数字化转型已进入“智能体普惠”的关键节点。 根据最新行业数据显示,超过80%的非IT型企业正试图通过AI Agent(智能体)重塑业务流程。 然而,传统的AI开发模式往往受限于高昂的技术门槛,导致业务部…...

ThinkAdmin完全指南:基于ThinkPHP6的现代化后台管理系统

ThinkAdmin完全指南:基于ThinkPHP6的现代化后台管理系统 【免费下载链接】ThinkAdmin 基于 ThinkPHP6&8 的极简后台管理系统,内置注解权限、异步多任务、应用插件生态等,支持类 PaaS 更新公共模块和应用插件,插件可本地化定制…...

如何快速构建WebRTC实时通信平台:Lynckia Licode完整指南

如何快速构建WebRTC实时通信平台:Lynckia Licode完整指南 【免费下载链接】licode Open Source Communication Provider based on WebRTC and Cloud technologies 项目地址: https://gitcode.com/gh_mirrors/li/licode Licode是一个基于WebRTC和云技术的开源…...

Vue3 + Pinia项目里,Rollup打包报循环依赖警告?别慌,一个真实案例教你定位和修复

Vue3 Pinia项目中Rollup循环依赖警告的实战排查与修复 最近在重构一个Vue3企业级后台项目时,遇到了一个棘手的Rollup打包警告。项目采用Vue3 Pinia Rollup技术栈,警告信息直指循环依赖问题。作为有三年Vue实战经验的开发者,我决定深入剖析…...

OpenCSApp深度解析:10个技巧帮你避开选校陷阱

OpenCSApp深度解析:10个技巧帮你避开选校陷阱 【免费下载链接】opencsapp.github.io Open CS Application | 开源CS申请 项目地址: https://gitcode.com/gh_mirrors/op/opencsapp.github.io OpenCSApp作为开源CS申请平台,旨在帮助申请者快速建立对…...

Linux内核开发避坑指南:waitqueue的四种状态(TASK_INTERRUPTIBLE/UNINTERRUPTIBLE等)到底该怎么选?

Linux内核开发实战:waitqueue状态选择的黄金法则与避坑指南 在Linux内核开发中,waitqueue(等待队列)是驱动开发者最常使用的同步机制之一。当我们需要让进程等待某个硬件事件(如数据就绪)或资源可用时&…...

终极Notepad--代码编辑器使用指南:跨平台国产替代的完整教程

终极Notepad--代码编辑器使用指南:跨平台国产替代的完整教程 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- …...

别再死记硬背了!用生活化比喻理解C#的int、double和Convert转换

别再死记硬背了!用生活化比喻理解C#的int、double和Convert转换 编程初学者常被类型转换的概念困扰——为什么数字还要分类型?为什么10.6变成10?今天我们用咖啡杯、货币兑换和快递打包的比喻,带你轻松掌握C#类型转换的底层逻辑。 …...

HC32F460实战:手把手教你用SDIO+DMA读取SD卡里的TXT文件(附工程源码)

HC32F460实战:从零构建SD卡文件读取系统 第一次接触华大HC32F460芯片的SDIO接口时,我花了整整三天时间才让SD卡正常读取文件。官方例程看似完整,但实际移植到项目中总会遇到各种"坑"——时钟配置不匹配、DMA传输异常、FATFS文件系统…...

终极MapleStory游戏编辑器:Harepacker-resurrected完整指南 [特殊字符]

终极MapleStory游戏编辑器:Harepacker-resurrected完整指南 🎮 【免费下载链接】Harepacker-resurrected All in one .wz file/map editor for MapleStory game files 项目地址: https://gitcode.com/gh_mirrors/ha/Harepacker-resurrected 想要深…...

终极指南:探索Python异步编程的宝藏库awesome-asyncio

终极指南:探索Python异步编程的宝藏库awesome-asyncio 【免费下载链接】awesome-asyncio A curated list of awesome Python asyncio frameworks, libraries, software and resources 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-asyncio awesome-…...

3小时重构旧代码库:用C++26反射替代Boost.Hana的4步安全迁移法(附clangd语义补全配置清单)

第一章:C26 反射特性在元编程中的应用 避坑指南C26 引入的静态反射(Static Reflection)核心提案(P1240R4、P2637R2 等)为元编程带来了范式级变革——但其当前实现状态仍处于编译器实验阶段,需警惕语言特性与…...

LotusDB批量操作完全指南:大幅提升数据写入效率

LotusDB批量操作完全指南:大幅提升数据写入效率 【免费下载链接】lotusdb Most advanced key-value database written in Go, extremely fast, compatible with LSM tree and B tree. 项目地址: https://gitcode.com/gh_mirrors/lo/lotusdb LotusDB是基于Go语…...

别再怕数学!用STM32和SimpleFOC库,手把手带你实现无刷电机FOC控制

用STM32和SimpleFOC库实现无刷电机控制的实战指南 在机器人关节、云台稳定系统等需要精确力矩控制的应用场景中,无刷电机因其高效率、长寿命和优异的动态性能成为首选。然而传统的六步换相控制方式难以满足高精度需求,而FOC(磁场定向控制&…...

为什么你的alpine:3.20镜像在M2 Mac上运行正常,却在AWS Graviton2上panic?Docker 27平台标识机制深度解密(含--platform参数失效真相)

第一章:Docker 27跨平台镜像兼容性测试Docker 27 引入了对多架构构建和运行时兼容性的增强支持,尤其在 buildx 和 containerd 1.7 协同下,显著提升了 ARM64、AMD64、Apple Silicon(darwin/arm64)及 Windows Server&…...

RT-Thread下用u8g2库驱动0.96寸OLED(SSD1306)显示中文,从环境搭建到字体制作全流程

RT-Thread实战:u8g2库驱动0.96寸OLED显示中文全流程解析 在嵌入式开发中,OLED屏幕因其高对比度、低功耗和体积小巧等优势,成为人机交互界面的热门选择。而要在资源有限的嵌入式系统中实现中文显示,往往让开发者感到棘手。本文将手…...

转行互联网,零基础应届生应该选择什么样的岗位作为切入点_互联网入行方向

**对于想要转行互联网的零基础小白,如果你耐心看完了这个答案,恭喜你已经找到了转行互联网的方法!**我不说空的理论,也不讲心灵鸡汤,作为文艺青年,我只说经验,我是工作十三年的互联网老兵&#…...

OpenAI Assistants API:托管式 Harness 的利弊

OpenAI Assistants API:托管式 Harness 的利弊 副标题:解放开发者双手的同时,如何拿捏个性化与控制权的平衡点第一部分:引言与基础 1. 引人注目的标题(重述核心定位版) 托管式AI Agent开发利器的双刃剑&…...

不止是配置:用RH850 F1的ADC实现汽车传感器信号滤波与故障诊断的实战思路

不止是配置:用RH850 F1的ADC实现汽车传感器信号滤波与故障诊断的实战思路 在汽车电子系统中,传感器信号的可靠采集与实时处理直接关系到车辆的安全性和性能表现。传统嵌入式开发中,工程师往往将ADC模块视为简单的"模拟转数字"工具&…...

Mac微信防撤回插件:专业级消息保护方案

Mac微信防撤回插件:专业级消息保护方案 【免费下载链接】WeChatIntercept 微信防撤回插件,一键安装,仅MAC可用,支持v3.7.0微信 项目地址: https://gitcode.com/gh_mirrors/we/WeChatIntercept 微信消息撤回功能虽然保护了发…...

Python 编译 exe 可执行程序

将Python文件编译为exe可执行程序1. 编写计算器源码2. 安装PyInstaller3. 用 PyInstaller 生成可执行程序4. 设置打包后的版本信息5. 编译.py文件为.exe可执行文件(有版本配置文件)6. 执行.exe文件隐藏cmd窗口Python程序py格式文件的优点是可以跨平台,但运行必须有P…...

2025届最火的降AI率平台实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 那些用于人工智能论文的辅助工具,正一步一步地变成学术写作里相当重要的助力&…...

2026最权威的六大AI论文网站实际效果

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 当下,于学术范畴内,借助人工智能来辅助学术写作之事已然成了一种趋向…...

Verilog状态机实战:手把手教你设计一个可复用的序列检测器(附完整Testbench)

Verilog状态机实战:构建可配置序列检测器的工程化方法 在数字IC设计中,序列检测器是验证工程师和设计者经常遇到的基础电路模块。传统教程往往聚焦于特定序列(如1001)的检测实现,却很少探讨如何将这类设计转化为可复用…...

CNCF TAG Security自动化治理工具:实现持续安全监控的完整方案

CNCF TAG Security自动化治理工具:实现持续安全监控的完整方案 【免费下载链接】tag-security 🔐CNCF Security Technical Advisory Group -- secure access, policy control, privacy, auditing, explainability and more! 项目地址: https://gitcode…...