1.游戏人工智能编程案例精粹目录
2.如何用Python写一个贪吃蛇AI
3.“枪枪爆头”!游戏源码游戏源码用Python写个了使命召唤外挂
4.阿尔法元之五子棋源码解读(AlphaZero-Gomoku)
5.腾讯T2I-adapter源码分析(2)-推理源码分析
6.behaviac
游戏人工智能编程案例精粹目录
本文精选了游戏人工智能编程案例,游戏源码游戏源码旨在深入浅出地解析游戏AI开发的游戏源码游戏源码关键概念与实践。从数学和物理学的游戏源码游戏源码初步探索,到状态驱动智能体的游戏源码游戏源码设计,再到创建自治可移动的游戏源码游戏源码动易源码游戏智能体,直至体育模拟、游戏源码游戏源码图的游戏源码游戏源码秘密生命等高级应用,每个章节都详细解析了理论与实践的游戏源码游戏源码结合。 第一章《数学和物理学初探》为后续章节打下坚实基础,游戏源码游戏源码从数学和物理学的游戏源码游戏源码基本概念入手,为智能体的游戏源码游戏源码构建提供科学依据。 第二章《状态驱动智能体设计》深入讨论了状态机的游戏源码游戏源码理论与实践,通过West World项目案例展示如何实现可重用的游戏源码游戏源码基类,以及如何管理全局状态和状态翻转。游戏源码游戏源码 第三章《如何创建自治的可移动游戏智能体》聚焦于交通工具模型的构建,详细阐述了物理属性更新、操控行为、组行为以及组合操控行为等关键环节,确保智能体能够在复杂环境中自主移动。 第四章《体育模拟(简单足球)》介绍了足球环境的构建、AI设计以及估算和假设的应用,通过案例研究揭示了体育模拟中的AI实现。 第五章《图的秘密生命》探讨了图论在游戏AI中的应用,深入解析了游戏环境中的路径规划、目标驱动智能体行为以及模糊逻辑等高级概念。 第六章《用脚本,还是不用?这是一个问题》提出了在游戏开发中脚本语言与引擎原生功能之间的权衡。 第七章《概览《掠夺者》游戏》提供了一款具体游戏的AI设计案例,为读者展示了实际游戏开发中的AI实现。 第八章《实用路径规划》专注于路径规划技术,为游戏AI提供高效、灵活的导航解决方案。 第九章《目标驱动智能体行为》深入分析了如何设计目标驱动的智能体行为,以实现更智能、更自然的游戏体验。 第十章《模糊逻辑》探讨了模糊逻辑在游戏AI中的应用,展示了如何通过模糊逻辑实现更高级的决策和行为控制。 附录A《C++模板》提供了C++编程中模板的详细解释,帮助开发者在AI实现中使用更高效、更灵活的代码结构。 附录B《UML类图》解析了UML类图的构建与应用,为游戏AI设计提供了一种直观、强大的可视化工具。 附录C《设置你的开发环境》指导开发者如何配置开发环境,包括下载演示程序、安装源代码等步骤,确保读者能够顺利进行游戏AI开发实践。 参考文献部分提供了进一步学习和研究的资源,鼓励读者深入探索游戏AI的理论与实践。扩展资料
如何用Python写一个贪吃蛇AI
如何用Python写一个贪吃蛇AI
前言
最近在网上看到一张让人涨姿势的,中展示的是贪吃蛇游戏,估计大部分人都玩过。但如果仅仅是贪吃蛇游戏,那么它就没有世差含什么让人涨姿势的html5 商城源码地方了。问题的关键在于,中的贪吃蛇真的很贪吃XD,它把矩形中出现的食物吃了个遍,然后华丽丽地把整个矩形填满,真心是看得赏心悦目。作为一个CSer,第一个想到的是,这东西是写程序实现的(因为,一般人干不出这事。果断是要让程序来干的)第二个想到的是,写程序该如何实现,该用什么算法?既然开始想了,就开始做。因为Talk is cheap,要show me the code才行。 (从耗子叔那学来的)开始之前,让我们再欣赏一下那只让人涨姿势的贪吃蛇吧:(如果下面的动态浏览效果不佳的话,可以右键保存下来查看)
语言选择
Life is short, use python!所以,根本就没多想,直接上python。最初版本先让你的程序跑起来首先,我们第一件要做的就是先不要去分析这个问题。你好歹先写个能运行起来的贪吃蛇游戏,然后再去想AI部分。这个应该很简单,cc++也就百来行代码(如果我没记错的话。不弄复杂界面,直接在控制台下跑),python就更简单了,去掉注释和空行,5、行代码就搞定了。而且,最最关键的,这个东西网上肯定写滥了,你没有必要重复造轮子,去弄一份来按照你的意愿改造一下就行了。
简单版本
我觉得直接写perfect版本不是什么好路子。因为perfect版本往往要考虑很多东西,直接上来就写这个一般是bug百出的。所以,一开始我的目标仅仅是让程序去控制贪吃蛇运动,让它去吃食物,仅此而已。现在让我们来陈述一下最初的问题:
在一个矩形中,每一时刻有一个食物,贪吃蛇要在不撞到自己的条件下,找到一条路(未必要最优),然后沿着这条路运行,去享用它的美食。
我们先不去想蛇会越来越长这个事实,问题基本就是,给你一个起点(蛇头)和一个终点(食物),要避开障碍物(蛇身),C 贪吃蛇源码从起点找到一条可行路到达终点。
我们可以用的方法有:BFSDFSA*只要有选择,就先选择最简单的方案,我们现在的目标是要让程序先跑起来,优化是后话。so,从BFS开始。我们最初将蛇头位置放入队列,然后只要队列非空,就将队头位置出队,然后把它四领域内的4个点放入队列,不断地循环操作,直到到达食物的位置。这个过程中,我们需要注意几点:
1.访问过的点不再访问。
2.保存每个点的父结点(即每个位置是从哪个位置走到它的,这样我们才能把可行路径找出来)。
3.蛇身所在位置和四面墙不可访问。
通过BFS找到食物后,只需要让蛇沿着可行路径运动即可。这个简单版本写完后,贪吃蛇就可以很欢快地运行一段时间了。看图吧:(不流畅的感觉来自录屏软件@_@)
为了尽量保持简单,我用的是curses模块,直接在终端进行绘图。从上面的动态可以看出,每次都单纯地使用BFS,最终有一天,贪吃蛇会因为这种不顾后果的短视行为而陷入困境。而且,即使到了那个时候,它也只会BFS一种策略,导致因为当前看不到目标(食物),认为自己这辈子就这样了,破罐子破摔,最终停在它人生中的某一个点,不再前进。(我好爱讲哲理XD)
BFS+Wander
上一节的简单版本跑起来后,我们认识到,只教贪吃蛇一种策略是不行的。它这么笨一条蛇,你不多教它一点,它分分钟就会挂掉的。所以,我写了个Wander函数,顾名思义,当贪吃蛇陷入困境后,就别让它再BFS了,而是让它随便四处走走,散散心,思考一下人生什么的。这个就好比你困惑迷茫的时候还去工作,效率不佳不说,还可能阻碍你走出困境;相反,网站qq访客获取源码这时候你如果放下手中的工作,停下来,出去旅个游什么的。回来时,说不定就豁然开朗,土地平旷,屋舍俨然了。Wander函数怎么写都行,但是肯定有优劣之分。我写了两个版本,一个是在可行的范围内,朝随机方向走随机步。也就是说,蛇每次运动的方向是随机出来的,总共运动的步数也是随机的。Wander完之后,再去BFS一下,看能否吃到食物,如果可以那就皆大欢喜了。如果不行,说明思考人生的时间还不够,再Wander一下。这样过程不断地循环搜笑进行。可是就像“随机过程随机过”一样,你“随机Wander就随机挂”。会Wander的蛇确实能多走好多步。可是有一天,它就会把自己给随机到一条死路上了。陷入困境还可以Wander,进入死胡同,那可没有回滚机制。所以,第二个版本的Wander函数,我就让贪吃蛇贪到底。在BFS无解后,告诉蛇一个步数step(随机产生step),让它在空白区域以S形运动step步。这回运动方向就不随机了,而是有组织有纪律地运动。先看图,然后再说说它的问题:
没错,最终还是挂掉了。S形运动也是无法让贪吃蛇避免死亡的命运。贪吃蛇可以靠S形运动多存活一段时间,可是由于它的策略是:
1. 目标是食物时,走最短路径
2. 目标是蛇尾时,走最长路径
那第三种情况呢?与食物和蛇尾都没路径存在的情况下,这个时候本来就只是挑一步可行的步子来走,最短最长关系都不大了。至于人为地让蛇走S形,我觉得这不是什么好策略,最初版本中已经分析过它的问题了。 (当然,除非你想使用最最无懈可击的开博尔源码输出那个版本,就是完全不管食物,让蛇一直走S,然后在墙边留下一条过道即可。这样一来,蛇总是可以完美地把所有食物吃完,然后占满整个空间,可是就很boring了。没有任何的意思)
上面还提到一个问题:因为食物是随机出现的,有没可能出现无解的布局?答案是:有。我运行了程序,然后把每一次布局都输出到log,发现会有这样的情况:
# # # # # # #
* * * * * #
* * - 0 * #
* * # + * #
* * * * * #
* * * * * #
# # # # # # #
其中,+号是蛇头,-号是蛇尾,*号是蛇身,0是食物,#号代表空格,外面一圈#号代表墙。这个布局上,食物已经在蛇头面前了,可是它能吃吗?不能!因为它吃完食物后,长度加1,蛇头就会把0的位置填上,布局就变成:
# # # # # # #
* * * * * #
* * - + * #
* * # * * #
* * * * * #
* * * * * #
# # # # # # #
此时,由于蛇的长度加1,蛇尾没有动,而蛇头被自己围着,挂掉了。可是,我们却还有一个空白的格子#没有填充。按照我们之前教给蛇的策略,面对这种情况,蛇头就只会一直追着蛇尾跑,每当它和食物有路径时,它让虚拟的蛇跑一遍发现,得到的新布局是不安全的,所以不会去吃食物,而是选择继续追着蛇尾跑。然后它就这样一直跑,一直跑。死循环,直到你按ESC键为止。由于食物是随机出现的,所以有可能出现上面这种无解的布局。当然了,你也可以得到完满的结局,贪吃蛇把整个矩形都填充满。上面的最后一个问题,暴力法是否能得到最优序列。从上面的分析看来,可以得到,但不能保证一定得到。最后,看看高瞻远瞩的蛇是怎么跑的吧:
矩形大小*,除去外面的边框,也就是8*。Linux下录完屏再转成GIF格式的,优化前多M,真心是没法和Windows的比。用下面的命令优化时,有一种系统在用生命做优化的感觉:
Shell
convert output.gif -fuzz % -layers Optimize optimised.gif
最后还是拿到Windows下用AE,三下五除二用序列合成的动态 (记得要在format options里选looping,不然是不会循环播放的)
Last but not least如果对源代码感兴趣,请戳以下的链接:
Code goes here
另外,本文的贪吃蛇程序使用了curses模块,类Unix系统都默认安装的,使用Windows的童鞋需要安装一下这个模块,送上地址:
需要curses请戳我
以上的代码仍然可以继续改进(现在加注释不到行,优化一下可以更少),
“枪枪爆头”!用Python写个了使命召唤外挂
最近我看到一个视频,叫做《警惕AI外挂!我写了一个枪枪爆头的视觉AI,又亲手“杀死”了它》。这个视频介绍了国外有人在使命召唤游戏中开发了一个AI程序,实现了自动瞄准功能。与传统外挂不同,该程序无需访问游戏内存或向服务器发送作弊指令,而是通过计算机视觉分析游戏画面,定位敌人,精确移动准星,操作方式与人类玩家相同,反外挂系统无法检测到它的存在。此AI程序还具有跨平台通用性,支持Xbox、PS4、手机等不同平台,只需将画面接入模型即可实现“枪枪爆头”。这引起了我对AI外挂的极大关注。
为了实现这个AI自动瞄准功能,需要设计一个核心功能。首先,我们需要训练一个人体关节点检测的AI视觉模型,将游戏画面实时输入模型,获取游戏角色各部位的像素位置,确定瞄准点并移动鼠标到该位置。视频中提到了使用High-Resoultion Net(HRNet)进行人体关节点检测,该模型在高分辨率特征图上进行多尺度融合与特征提取,效果较好。
训练人体关节点检测模型的步骤包括:安装HRNet代码库,下载COCO数据集,配置环境并进行模型训练。训练代码示例展示了如何在模型中输入数据,进行损失计算和反向传播,以及如何在训练过程中记录损失和精度。
为了实时获取瞄准点坐标,我们需要实时读取屏幕画面。使用pyautogui库可以实现屏幕截图,根据需要调整截取区域。检测人体关节点后,根据游戏需求(如“枪枪爆头”),只需获取头部关键点坐标。通过构建人体关节点检测模型并应用到实时画面中,即可获取准确的瞄准点坐标。
在获取到坐标后,需要将鼠标移动到指定位置。使用pyautogui库可以轻松实现移动和点击操作。根据游戏需求,可以实现单击、双击等鼠标操作。
然而,面对AI外挂带来的威胁,我们应当思考如何防范。传统的反外挂方法可能难以应对AI程序的隐蔽性和准确性。解决这个问题需要通过算法检测异常操作,但实现难度较大。一个可能的解决方案是使用对抗样本,通过训练视觉AI识别错误,使其在面对真实游戏情况时出现误判。技术的发展需要在对抗与规范中不断前进。
以上内容介绍了AI外挂的概念、实现方法,以及防范AI外挂的思考。技术的边界在不断拓展,面对新的挑战,我们应当保持警惕并寻求有效的解决方案。虽然没有提供完整的项目源代码链接,但已详细描述了AI自动瞄准功能的实现过程和防范策略。
阿尔法元之五子棋源码解读(AlphaZero-Gomoku)
阿尔法元在五子棋领域的源码解析揭示了强化学习在简单游戏中的深度应用。相较于围棋,五子棋虽简单,但其源码分析同样能让我们深入理解强化学习的原理。AlphaZero,最初凭借阿尔法狗的深度学习技术,后在没有人类干预的情况下,通过三天自学围棋并超越前辈,展现了人工智能的新里程碑。
本文着重探讨AlphaZero在五子棋上的具体应用,源码可在GitHub上获取,路径公开。理解该项目的前提是对强化学习有一定基础,如马尔可夫决策过程和蒙特卡洛方法。项目主要包含策略价值网络、蒙特卡洛树搜索算法和训练脚本,它们共同构建了强化学习与深度学习的交互过程。
项目的架构包括游戏处理、MCTS算法实现、策略价值网络训练以及人机对战脚本。Game.py定义了棋盘和游戏逻辑,mcts_alphaZero.py与mcts_pure.py则是MCTS玩家的实现,分别对应AlphaZero和纯MCTS版本。policy_value_net.py负责网络模型,根据不同框架实现,如Tensorflow或Pytorch。train.py则实现了AlphaZero的训练流程,通过模拟对弈和数据增强来优化网络。
运行项目,你可以通过human_play.py与预训练的AI对战,感受强化学习的力量。源码剖析中,human_play.py脚本的核心是创建棋盘、玩家,并通过循环进行人机对弈,直到游戏结束。
腾讯T2I-adapter源码分析(2)-推理源码分析
随着stable-diffusion和midjourney展示出AI绘图的惊人潜力,人们对技术进步的惊叹不已。然而,AI绘图的可控性一直是痛点,仅凭描述词控制图像并不尽如人意。为增强AI图像的可控性,Controlnet和T2I-adapter等技术应运而生。本文将通过解析T2I-adapter的推理源码,揭示其工作原理。
本文将深入剖析推理部分的代码,以便理解T2I-Adapter的实际操作。使用如下的命令行指令进行推理,如test_adapter.py,它需要指定条件类型、深度图路径、前置处理器类型、提示语、模型和缩放尺寸等参数。
在test_adapter.py中,主要分为参数读取、模型加载和推理运算三个步骤。参数读取部分包括检查支持的条件、构建提示语,以及根据输入选择前置处理。模型加载涉及stable-diffusion和adapter模型,前者通过配置加载,后者根据输入条件构造Adapter模型。
加载stable-diffusion模型时,代码引用了来自github的CompVis/stable-diffusion库,其中关键部分包括加载参数、模型配置以及UNetModel的改动。Adapter模型的构造与论文中的结构图一致,通过ResnetBlock的组合实现。
在推理过程中,先对输入进行预处理,如深度图的处理。随后,get_adapter_feature和diffusion_inference两个核心函数调用adapter模型,与stable-diffusion模型结合进行特征融合和采样。最后,DDIM采样器接收并处理adapter特征,最终生成图像。
通过以上分析,我们逐步揭示了T2I-adapter的推理机制。后续文章将探讨训练代码。在游戏开发中,AI生成游戏角色动作的应用,如AUTOMATIC,展示了这种技术的实际应用,以解决美术资源匮乏的问题。
behaviac
behaviac是一款用于游戏AI开发的框架组件,同时也是一款快速设计游戏原型的工具。它具备全平台支持特性,无论是客户端还是服务器,都适用,加速了游戏的快速迭代开发。编辑器可以在PC上运行,操作简便直观且稳定,支持实时与离线调试,并能导出XML、BSON等多种格式,甚至可导出为C++、C#源码,从而达到高效开发。
运行时也支持全平台,包括C++和C#两个版本,特别原生支持Unity。多款知名游戏及众多预研项目已采用behaviac,证明了其广泛的应用与可靠性。
behaviac的架构由编辑器和运行时两个部分构成,通过类型信息交换信息。编辑器作为Windows平台的编辑工具,允许用户通过鼠标或快捷键操作,添加、编辑、配置、修改行为树(包括FSM或HTN),实现实时或离线的调试,提供断点设置、变量值查看与修改等功能。
运行时则提供了C++和C#两种版本,分别对应Unity和其他C++游戏引擎或平台。运行时的核心逻辑是加载编辑器中导出的行为树,并解释执行。而类型信息则用于描述类型属性和方法,3.5版前通过运行时导出,3.6版后在编辑器内创建,作为创建行为树的基本语法单位。
在3.x版本中,策划人员可以直接在编辑器中创建类型,添加属性和方法,导出为C++或C#源码,极大加速迭代过程,将编辑器变为原型设计工具。导出后,运行时即可加载运行行为树。编辑器支持多种导出格式,包括XML、BSON作为数据文件,以及直接导入C++或C#源码文件,用户可依据需求选择最合适的格式。
behaviac的主要特性包括:全平台支持、快速设计原型、高效代码导出、实时与离线调试、灵活的类型信息管理与导出、广泛的兼容性以及加速迭代流程。这些特性使得它成为游戏开发中AI系统构建的强大工具。
大神用Python做个AI出牌器,实现财富自由附源码
在互联网上,我注意到一个有趣的开源项目——快手团队的DouZero,它将AI技术应用到了斗地主游戏中。今天,我们将通过学习如何使用这个原理,来制作一个能辅助出牌的欢乐斗地主AI工具,也许它能帮助我们提升游戏策略,迈向财富自由的境界。 首先,让我们看看AI出牌器的实际运作效果: 接下来,我们逐步构建这个AI出牌器的制作过程:核心功能与实现步骤
UI设计:首先,我们需要设计一个简洁的用户界面,使用Python的pyqt5库,如下是关键代码:
识别数据:在屏幕上抓取特定区域,通过模板匹配识别AI的手牌、底牌和对手出牌,这部分依赖于截图分析,核心代码如下:
地主确认:通过截图确定地主身份,代码负责处理这一环节:
AI出牌决策:利用DouZero的AI模型,对每一轮出牌进行判断和决策,这部分涉及到代码集成,例如:
有了这些功能,出牌器的基本流程就完成了。接下来是使用方法:使用与配置
环境安装:你需要安装相关库,并配置好运行环境,具体步骤如下:
位置调整:确保游戏窗口设置正确,AI出牌器窗口不遮挡关键信息:
运行测试:完成环境配置后,即可启动程序,与AI一起战斗:
最后,实际操作时,打开斗地主游戏,让AI在合适的时间介入,体验AI带来的智慧策略,看看它是否能帮助你赢得胜利!