魔兽争霸3人工智能脚本(AI JASS)初级教程
JASS与其他的面向流程性质的编程语言很类似,所以在阅读以下内容之前,首先应该对流程性质的编程以及TRIGGER JASS有着一定的了解。了解JASS语言并有一定的基础之后,你将很快的了解AI JASS。
AI JASS的概念
女同学最主要的是理解AI线程(Threads)的概念。
线程是什么?
创建文明城市手抄报线程就象TRIGGER的一个循环判断语句,线程会不停的判断在线程程序列表内所缺少的元素,并去按照线程的指令排放顺序去完成它。就象碗中的饭,有即吃,有即吃,有即吃,
为什么不用TRIGGER去完成电脑的人工智能呢?
由于使用TRIGGER相比之下可能会消耗大量的内存,所以,最好用AI线程来完成电脑的人工
智能。
注意: 线程只针对单个玩家进行运作。
AI的类型(Melee AI 和 Campaign 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函数库mon.j和mon.ai中的函数和量Trigger脚本只能使用mon.j和Blizzard.j中的函数和量线程只应用于AI脚本(AI JASS), 不能用于触发器脚本(Trigger Jass)触发器只应用用于触发器脚本(Trigger Jass),不能用于AI脚本(AI JASS)
通常, 当AI脚本开始运行时只创建一个线程, 创建更多的线程可以用man.j的本地函数:
线程(Threads)和触发器(Trigger)的区别AI脚本只能使用JASS函数库mon.j和mon.ai中的函数和量Trigger脚本只能使用mon.j和Blizzard.j中的函数和量线程只应用于AI脚本(AI JASS), 不能用于触发器脚本(Trigger Jass)触发器只应用用于触发器脚本(Trigger Jass),不能用于AI脚本(AI JASS)
通常, 当AI脚本开始运行时只创建一个线程, 创建更多的线程可以用man.j的本地函数:
two steps from hell
native StartThread takes code func returns nothing
什么韩剧好看运行方式的区别在于线程一旦开启即可自动运转,触发器必须调用或者借助事件的发生才可以运行。调用 call StartThread(function myfunc) 将创建一个从函数myfunc开始执行的线程。
调用 call SleepForever() 使线程永久性的关闭
每个玩家最多可以拥有6个线程(包括一开始执行的主线程在内,当一个玩家有6个线程数时,调用StartThread()的语句将被忽略. ) *线程不能回收, 当你为某玩家创建了5个自定义线程,将无法为该玩家创建更多的线程。
局域性的全局状态,在同一玩家中的所有线程都共享全局状态(包括变量). 即是修改某个全局变量, 修改后的值在此玩家的所有线程中都是可见的。
当新线程创建时, 线程立即生效。
当线程让步执行时, 创建此线程的父线程将继续执行.
线程在以下的情况让步执行, 返回父线程
当线程中的操作码(opcode)超出限制, 线程会自动休眠 1 秒
当线程中用使用 Sleep(n), 线程将休眠 n 秒, 然后继续执行.
杨戬和苏妲己线程在以下情况会中止, 返回父线程
1如果 call StartThread(null)中, 线程中止
2当线程的主函数返回, 线程中止.
(StartThread()中之间调用的函数就是主函数.)
(StartThread()中之间调用的函数就是主函数.)
3当线程中使用没有声明的变量, 线程中止. 在使用之前, 变量必须声明.
4当线程中出现零为被除数时, 线程中止
5线程主函数出现语法错误.
注意: 虽然AI脚本可以使用大部分mon.j的库函数, 但有些类型的函数在AI不能正常工作, 如:
注意: 虽然AI脚本可以使用大部分mon.j的库函数, 但有些类型的函数在AI不能正常工作, 如:
返回字符串类型(string)的本地函数, 如I2S(), SubString()等需要以code, trigger, boolexpr 等类型数据为参数的本地函数, 如触发器函数, 队列函数(ForGroup, 等)
注意: AI中不可以使用Blizzard.j的函数, 触发器中也不可以使用mon.ai的函数, AI和触发器都可以使用mon.j的函数(当然, 对于AI, 还受上面所说的限制)
mon.ai和mon.j是写AI时可以调用和参考库文件, 要研究AI, 先去读这2个文件.******************************************************************
注意: AI中不可以使用Blizzard.j的函数, 触发器中也不可以使用mon.ai的函数, AI和触发器都可以使用mon.j的函数(当然, 对于AI, 还受上面所说的限制)
mon.ai和mon.j是写AI时可以调用和参考库文件, 要研究AI, 先去读这2个文件.******************************************************************
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论