




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、魔兽争霸3人工智能脚本(Al JASS)初级教程JASS与英他的而向流程性质的编程语言很类似,所以在阅读以下内容之前,首先应该对流 程性质的编程以及TRIGGER JASS有着一左的了解。了解JASS语言并有一左的基础之后, 你将很快的了解Al JASS。Al JASS的概念最主要的是理解Al线程仃hreads)的概念。线程是什么?线程就象TRIGGER的一个循环判断语句,线程会不停的判断在线程程序列表内所缺少的 元素,并去按照线程的指令排放顺序去完成它。就象碗中的饭,有即吃,有即吃,有即吃, Loop.为什么不用TRIGGER去完成电脑的人工智能呢?由于使用TRIGGER相比之下可能会消耗大
2、量的内存,所以,最好用AI线程来完成电脑的 人工智能。注意:线程只针对单个玩家进行运作。AI 的类型(Melee AI 和 Campaign Al )Melee Al对战Al基本上完全可以利用WORLDEDITOR自带的Al编辑器(Al Edior)完成 Campaign Al战役Al (即“非对战Al” ),可以详细了解以下内容即可制作一般常用的战 役AI注:战役AI的用途十分广泛,完全可以利用英制作生存,3C, TD等类型的地图,并且免 除了不停使用TRIGGER创造单位所带来的内存泄篮。线程(Threads)和触发器(Trigger)的区别AI脚本只能使用JASS函数库mon.j和mon
3、.ai中的 函数和量Trigger脚本只能使用mon.j和Blizzard.j中的函数和量线程只应用于Al脚本(Al JASS),不能用于触发器脚本仃rigger Jass)触发器只应用用于触发器脚本仃rigger Jass),不 能用于AI脚本(Al JASS)通常,当AI脚本开始运行时只创建一个线程,创建更多的线程可以用man.j的本地函数:native StartThread takes code func returns nothing运行方式的区别在于线程一旦开启即可自动运转,触发器必须调用或者借助事件的发生才可 以运行。调用call StartThread(function myf
4、unc)将创建一个从函数myfunc开始执行的线 程。调用call SleepForever()使线程永久性的关闭每个玩家最多可以拥有6个线程(包括一开始执行的主线程在内,一个玩家有6个线程数时,调用 StartThread()的语句将被忽略.).线程不能回收,、勺你为某玩家创建了5个自定义线程,将无法为该玩家 创建更多的线程。局域性的全局状态,在同一玩家中的所有线程都共享全局状态(包括变址).即是修改某个全局变虽,修 改后的值在此玩家的所有线程中都是可见的。为新线程创建时,线程立即生效。为线程让步执行时,创建此线程的父线程将继续执行.线程在以下的情况让步执行,返回父线程十线程中的操作码(op
5、code)超出限制,线程会自动休眠1秒十线程中用使用Sleep(n),线程将休眠n秒,然后继续执行.线程在以下情况会中止,返回父线程1 如果 call StartThread(null)中,线程中止2 肖线程的主函数返回,线程中止.(StartThreadO中之间调用的函数就是主函数J3 X线程中使用没有声明的变虽:,线程中止.在使用之前,变虽必须声明.4 当线程中出现寥为被除数时,线程中止5 线程主函数出现语法错误.注意:虽然AI脚木可以使用大部分mon.j的库函数,但有些类型的函数在AI不能正常工作,如:返回字 符串类型(siring)的木地函数,如I2S(), SubStringO等需要
6、以code, trigger, boolexpr等类型数据为参 数的木地函数,如触发器函数,臥列函数(ForGroup,等)注意:AI中不可以使用Blizzard.j的函数,触发器中也不可以使用mon.ai的函数Al和触发濡都可以使 用mon.j的函数(当然,对于AI,还受上面所说的限制)mon.ai和mon.j是写Al时可以涮用和参考库文件,耍研尤AI,先去读这2个文件.跨脚本通讯(Inter-Script munication)在游戏中,可能会有多个独立的Jass脚本文件同时运行比如在对战地图中的游戏,运行 触发器脚本文件的同时,也可能运行了每个电脑玩家的AI脚本文件.每个脚本文件之间的
7、全局变虽不是共享的.所以,一个电脑玩家的AI脚本中设置的全局变量不会影响另一个电 脑玩家的AI脚本的执行.触发器脚本也不可以和AI脚本共享全局变量.但可以用传递命令的方法进行脚本之间的数 据交换.命令由一对数值型数据(integer)组成:命令值(mand value)和数据值(data value).从触发器脚本向AI脚本发岀通讯命令,可以使用mon.j中左义的以下本地函数:native mandAI takes player num,nteger mand, integer data returns nothing固定参数:player num 玩家integer mand 命令integ
8、er data 命令数据/Aconstant integer M1 = 60 实际上是时间!constant integer M2 = 2*60constant integer M3 = 3*60constant integer M4 = 4*60constant integer M5 = 5*60constant integer M6 = 6*60constant integer M7 = 7*60constant integer M8 = 8*60constant integer M9 = 9*60constant integer M10 = 10*60constant integer M
9、11 =11*60constant integer M12 = 12*60constant integer M13 = 13*60constant integer M14 = 14*60constant integer M15 = 15*60constant integer EASY = 1constant integer NORMAL = 2constant integer HARD = 3constant integer INSANE = 4/ not usedconstant integer MELEE_NEWBIE = 1constant integer MELEE_NORMAL =
10、2constant integer MELEEJNSANE = 3constant integer ATTACK_CAPTAIN = 1constant integer DEFENSE_CAPTAIN = 2constant integer BOTH_CAPTAINS = 3constant integer BUILDJJNIT = 1constant integer BUILDJJPGRADE = 2constant integer BUILD_EXPAND = 3constant integer UPKEEP_TIER1 = 50constant integer UPKEEP_TIER2
11、= 80JASS函数库mon.ai的全局变屋(可以更改,也可以自行增加,以下内容会经常在AI脚本 中使用):player aijDlayer /Al 玩家 integer sleep_seconds等待时间integer total_gold = 0 /总计的金钱 integer total_wood = 0总计的木材in teger gold_buffer = 0/ usually for potion moneyinteger difficulty = NORMAL难度,默认为中等难度in teger exp_seen = 0in teger racialjarm = hhou* inte
12、ger herojd = ,Hamg,/第一个英雄的ID,默认为圣骑士integer herojd2 = 'Hrnkg*第二个英雄的ID,默认为山丘之王integer herojd3 = *Hpar/第三个英雄的ID,默认为大法integer array skillin teger array skillslinteger array skills2in teger array skills3integer max_hero_level = 0in teger array harass_qtyinteger array harass_max integer array harass_u
13、nits in teger harassje ngth = 0 防守单位的全局变量 例子:防守单位 defense_unitsdefense_length的数量为 defense_qtydefense_length integer array defense_qty /设置防守单位的数量 integer array defense_units 设置防守的单位 integer defensejength = 0 单位 Index建造的全局变量为了区分建造的种类,BLZ为建造的全局变量设置了4类例子:建造单位buildjypebuildjength的数量为 build_qtybuildHength
14、 integer array build_qty /建造的数虽:设巻建造单位的数量 integer array buildjype /建造的种类 普通单位类(包括单位和建筑) integer array buildjtem 购买物品的种类 物品类 integer array buildjown 建造基地的种类 基地类 in teger buildje ngth = 0 设置采集工人的数量 integer campaign_gold_peons = 5 主基地采集金子的人数 integer campaign_wood_peons = 3 住基地采集木材的人数in teger campaig n_
15、basics_speed = 5in teger min creeps =in teger max_creeps = -1游戏初试设置的全局变量boolean harvest_town1 = trueboolean harvest_town2 = trueboolean harvest_town3 = trueboolean do_campaign_farms = true自动制造战役Al提供人口的建筑boolea n two_heroes = false/双英雄boolean allow_air_creeps = false空中的中立单位(假如有,Al会针对性的发展)boolea n tak
16、e_exp = false /<一般战役Al常用函数CampaignAI takes integer farms, code heroes returns nothing是BLZ在MON.AI中设宜的一个简便函数,直接初始化战役AIfarms -提供AI玩家人口的建筑类型heroes -指向设置英雄的ID的CODESetReplaceme nts takes in teger easy, in teger med, in teger hard retur ns no thing 尚未研究的函数,一般用法为:call SetReplacement( 2, 2, 4 )easy -游戏难度为
17、简单所赋的值med -游戏难度为普通所赋的值hard -游戏难度为困难所赋的值native SetCaptainHome takes integer which, real x, real y returns nothing 设置攻击组队长在家的点?which -什么的聚集点,参数有:constant integer ATTACK_CAPTAIN = 1 进攻的点constant integer DEFENSE_CAPTAIN = 2 防御的点constant integer BOTH_CAPTAINS = 3 进攻和防御的点x-X坐标Y 丫坐标SetBuildUnit takes integ
18、er qty, integer unitid returns nothing 指令Al玩家制造(所有类型的建造,包括升级)qty -数量unitid -单位类型SetBuildUnitEx takes integer easy, integer med, integer hard, integer unitid returns nothing指令Al玩家制造单位按照游戏难度easy -简单时候的数量med -普通时候的数量hard -困难时候的数量unitid -单位类型CampaignDefender takes integer level, integer qty, integer uni
19、tid returns nothing设置防守单位的数量CampaignDefenderEx takes integer easy, integer med, integer hard, integer unitid returns nothing设宜防守单位的数量,按难度call WaitForSignal()等待TRIGGER发出Al指令,当堆积的指令数虽不等于0时, 继续进行AI线程进攻组的指令function In itAssaultGroup takes no thing returns no thing初始化进攻组,设置全局变S harassjength = 0CampaignAt
20、tacker takes integer level, integer qty, integer unitid returns nothing增加进攻组的进攻单位qty -数量unitid -单位类型CampaignAttackerEx takes integer easy, integer med, integer hard, integer unitid returns nothing增加进攻组的进攻单位,按游戏难度easy -简单时候的数量med -普通时候的数量hard -困难时候的数量unitid -单位类型SuicideO nPoint takes integer sec on d
21、s, player p, in teger x, integer y retur ns nothing 设置进攻的玩家的点seconds发起进攻等待的时间,常量参数有constant integer M1 = 60constant integer M2 = 260constant integer M3 = 360constant integer M4 = 460constant integer M5 = 560constant integer M6 = 660constant integer M7 = 760constant integer M8 = 860constant integer M
22、9 = 960constant integer M10 = 1060constant integer M11 =1160constant integer M12 = 1260constant integer M13 = 1360constant integer M14 = 1460constant integer M15 = 1560p目标玩家SuicideOnUnits takes integer seconds, player p returns no thing设置进攻的目标玩家seconds一般战役Al的制作方案参看BLZ在战役中所制作的AI脚本“n08_green.ai”来了解怎么制
23、作AI 变量进攻的目标玩家globalsplayer user = Player(1)endglobals function main takes nothing returns nothing /Al 初试设置call CampaignAI(ZIGGURAT_1,null)call SetReplacements(2,2,4)call SetCaptainHome(ATTACK_CAPTAIN?4161 ,-4668 )call SetCaptainHome(DEFENSE_CAPTAIN,5218,-6441 )set campaign_wood_peons = 2 需要建造的建筑以及单位
24、call SetBuildUnit( 1, NECROPOLISJ )call SetBuildUnit( 1, ACOLYTE )call SetBuildUnit( 1, UNDEAD_MINE )call SetBuildUnit( 1, GRAVEYARD )call SetBuildUnit( 8, ZIGGURATJ )call SetBuildUnit( 2, CRYPT)call SetBuildUnit( 1, UNDEAD_ALTAR )call SetBuildUnit( 1, NECR0P0LIS_2)call SetBuildUnit( 2, SLAUGHTERHOU
25、SE )call SetBuildUnit( 1, DAMNED_TEMPLE )call SetBuildUnit( 1, NECROPOLIS )call SetBuildUnit( 2, BONEYARD )call SetBuildUnit( 5, ACOLYTE )call SetBuildUnit( & ZIGGURAT_2 ) 防守单位call CampaignDefenderEx( 1,1,2, ABOMINATION )call CampaignDefenderEx( 1,1,1, GARGOYLE )call CampaignDefenderEx( 1,1,1, F
26、ROST_WYRM )call CampaignDefenderEx( 1,1,1, CRYPT_FIEND )call CampaignDefenderEx( 1,1,1, DREAD_LORD ) /TRIGGER 发出指令就开始进行下而的Al进程call WaitForSignal()/进攻,制造/WAVE 1call InitAssaultGroupOcall CampaignAttackerEx( 6,6,8, GARGOYLE )call Suicide On PlayerEx(M5,M5,M3,user)call SetBuildUpgrEx( 1,1,1, UPG_FIEND_WEB )call Se
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 拍卖行拍卖业务智能化发展策略考核试卷
- 工业电气装修设计要点考核试卷
- 服务机器人行业解决方案与案例分享考核试卷
- 汽车发动机制造工艺与质量控制考核试卷
- 信息系统的数据科学与数据分析考核试卷
- 摩托车油箱结构与容量设计考核试卷
- 办公室环境监测考核试卷
- 危险品仓储致命废物的环境处理考核试卷
- 汽车销售企业战略规划与实施考核试卷
- 海洋油气开采项目管理与决策考核试卷
- 2024年全国证券投资顾问之证券投资顾问业务考试经典测试题(附答案)
- 公安机关处置群体性治安事件规定
- 江苏省2024年中职职教高考文化统考英语试卷
- 室外燃气管道安装施工方案
- 2024公司向股东短期借款合同
- TD/T 1039-2013 土地整治项目工程量计算规则(正式版)
- 2024年江苏省苏州市常熟市、昆山市、太仓市、张家港市等九年级(下)中考一模英语试卷(含解析)
- 2024年成都都江堰投资发展集团有限公司招聘笔试冲刺题(带答案解析)
- 新能源汽车构造(中)
- TB 10752-2018 高速铁路桥涵工程施工质量验收标准
- 外卖员交通安全知识讲座
评论
0/150
提交评论