魔兽争霸3人工智能脚本(AI JASS)初级教程.docVIP

魔兽争霸3人工智能脚本(AI JASS)初级教程.doc

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
魔兽争霸3人工智能脚本(AI JASS)初级教程 JASS与其他的面向流程性质的编程语言很类似,所以在阅读以下内容之前,首先应该对流程性质的编程以及TRIGGER JASS有着一定的了解。了解JASS语言并有一定的基础之后,你将很快的了解AI JASS。 AI JASS的概念 最主要的是理解AI线程(Threads)的概念。 线程是什么? 线程就象TRIGGER的一个循环判断语句,线程会不停的判断在线程程序列表内所缺少的元素,并去按照线程的指令排放顺序去完成它。就象碗中的饭,有即吃,有即吃,有即吃,Loop...... 为什么不用TRIGGER去完成电脑的人工智能呢? 由于使用TRIGGER相比之下可能会消耗大量的内存,所以,最好用AI线程来完成电脑的人工智能。 注意: 线程只针对单个玩家进行运作。 AI的类型(Melee AI 和 Campaign AI ) Melee AI 对战AI基本上完全可以利用WORLDEDITOR自带的AI编辑器(AI Edior)完成 Campaign AI 战役AI(即“非对战AI”),可以详细了解以下内容即可制作一般常用的战役AI 注:战役AI的用途十分广泛,完全可以利用其制作生存,3C,TD等类型的地图,并且免除了不停使用TRIGGER创造单位所带来的内存泄露。 线程(Threads)和触发器(Trigger)的区别AI脚本只能使用JASS函数库common.j和common.ai中的函数和量Trigger脚本只能使用common.j和Blizzard.j中的函数和量线程只应用于AI脚本(AI JASS), 不能用于触发器脚本(Trigger Jass)触发器只应用用于触发器脚本(Trigger Jass),不能用于AI脚本(AI JASS) 通常, 当AI脚本开始运行时只创建一个线程, 创建更多的线程可以用comman.j的本地函数: native StartThread takes code func returns nothing 运行方式的区别在于线程一旦开启即可自动运转,触发器必须调用或者借助事件的发生才可以运行。调用 call StartThread(function myfunc) 将创建一个从函数myfunc开始执行的线程。 调用 call SleepForever() 使线程永久性的关闭 每个玩家最多可以拥有6个线程(包括一开始执行的主线程在内,当一个玩家有6个线程数时,调用StartThread()的语句将被忽略. ) *线程不能回收, 当你为某玩家创建了5个自定义线程,将无法为该玩家创建更多的线程。 局域性的全局状态,在同一玩家中的所有线程都共享全局状态(包括变量). 即是修改某个全局变量, 修改后的值在此玩家的所有线程中都是可见的。 当新线程创建时, 线程立即生效。 当线程让步执行时, 创建此线程的父线程将继续执行. 线程在以下的情况让步执行, 返回父线程 当线程中的操作码(opcode)超出限制, 线程会自动休眠 1 秒 当线程中用使用 Sleep(n), 线程将休眠 n 秒, 然后继续执行. 线程在以下情况会中止, 返回父线程 如果 call StartThread(null)中, 线程中止 当线程的主函数返回, 线程中止. (StartThread()中之间调用的函数就是主函数.) 当线程中使用没有声明的变量, 线程中止. 在使用之前, 变量必须声明. 当线程中出现零为被除数时, 线程中止 线程主函数出现语法错误. 注意: 虽然AI脚本可以使用大部分common.j的库函数, 但有些类型的函数在AI不能正常工作, 如:返回字符串类型(string)的本地函数, 如I2S(), SubString()等需要以code, trigger, boolexpr 等类型数据为参数的本地函数, 如触发器函数, 队列函数(ForGroup, 等) 注意: AI中不可以使用Blizzard.j的函数, 触发器中也不可以使用common.ai的函数, AI和触发器都可以使用common.j的函数(当然, 对于AI, 还受上面所说的限制) common.ai和common.j是写AI时可以调用和参考库文件, 要研究AI, 先去读这2个文件.****************************************************************** 跨脚本通讯(Inter-Script Communication) 在游戏中, 可能会有多个独立的Jass脚本文件同时运行. 比如在对战地图中的游戏, 运行触发器脚本文件的同时, 也可能运行了每个电脑玩家的AI脚本文件. 每个脚本文件之间的全局变量不是共享的. 所以, 一个电脑玩家的AI脚本中设置的全局变

文档评论(0)

精品资源 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档