资源描述
Textmasterformate durch Klicken bearbeiten,Zweite Ebene,Dritte Ebene,Vierte Ebene,Fnfte Ebene,Page,23,Klicken Sie, um das Titelformat zu bearbeiten,Textmasterformate durch Klicken bearbeiten,Zweite Ebene,Dritte Ebene,Vierte Ebene,Fnfte Ebene,Klicken Sie, um das Titelformat zu bearbeiten,第,10,章 人工智能与游戏,10.1人工智,能,能与游,戏,戏的基,础,础知识,10.2追踪和,躲,躲避算,法,法,10.3寻径算,法,法,目录,10.1人工智,能,能与游,戏,戏的基,础,础,10.1.1人工智,能,能的概,念,念,人工智,能,能的研,究,究是为,了,了构建,能,能像人,类,类一样,思,思考的,计,计算机,。,。更确,切,切的定,义,义是,AI是一种,在,在计算,机,机中模,拟,拟人类,思,思维过,程,程的技,术,术。AI是一个,非,非常广,泛,泛的研,究,究领域,,,,而和,游,游戏相,关,关的AI只是整,个,个AI知识域,中,中一个,相,相对较,小,小的子,集,集。,人类思,维,维并不,是,是一个,容,容易模,拟,拟的过,程,程,这,也,也就说,明,明了为,什,什么AI是如此,之,之宽广,的,的一个,研,研究领,域,域。虽,然,然有很,多,多不同,的,的AI方法,,但,但是它,们,们都是,在,在计算,机,机处理,能,能力范,围,围内模,拟,拟出人,类,类的决,策,策能力,。,。大多,数,数传统,的,的AI系统使,用,用各种,基,基于信,息,息的算,法,法来进,行,行决策,,,,就像,人,人类使,用,用各种,事,事先经,验,验和心,智,智规则,来,来做出,决,决定一,样,样。,在过去,,,,基于,信,信息的,算,算法具,有,有完全,确,确定性,,,,于是,每,每个决,策,策都可,以,以沿着,一,一个可,预,预言的,逻,逻辑流,程,程倒推,回,回去。,现,现在,,很,很多AI研究者,意,意识到AI的确定,性,性过程,还,还不足,以,以对人,类,类思维,精,精确建,模,模,AI的研究,热,热点从,确,确定性AI模型转,移,移到更,加,加现实,的,的、尝,试,试考虑,人,人类思,维,维的微,妙,妙复杂,性,性的AI模型,,例,例如“,最,最佳猜,测,测”决,策,策。就,人,人类的,思,思维而,言,言,除,了,了完整,的,的逻辑,决,决策过,程,程外,,这,这种类,型,型的猜,测,测还可,能,能结合,过,过去的,经,经验、,个,个人偏,好,好以及,当,当前的,情,情绪状,态,态来得,出,出。,10.1人工智,能,能与游,戏,戏的基,础,础,10.1.2游戏人,工,工智能,的,的类型,(1)漫游AI,漫游AI确定一,个,个游戏,对,对象如,何,何在一,个,个虚拟,的,的游戏,世,世界中,漫,漫游,,它,它是一,种,种对游,戏,戏中NPC进行运,动,动建模,的,的AI系统。,在,在这种AI系统中,,,,NPC自己做,出,出决定,,,,确定,它,它们如,何,何在一,个,个虚拟,世,世界中,漫,漫游。,典,典型的,漫,漫游AI例子有,:,:在一,些,些RPG游戏中,,,,怪兽,追,追着玩,家,家角色,运,运动;,在,在飞行,游,游戏中,,,,漫游AI也用来,实,实现按,照,照预先,定,定义的,方,方式飞,行,行的NPC战机,,并,并适时,躲,躲避游,戏,戏玩家,发,发射的,子,子弹。,基,基本上,,,,对于,计,计算机,控,控制的,游,游戏角,色,色,不,论,论它必,须,须做出,决,决定改,变,变当前,路,路径,,还,还是要,在,在游戏,中,中实现,需,需要的,结,结果,,或,或者只,是,是简单,地,地遵守,某,某种特,定,定的移,动,动方式,,,,都可,以,以使用,漫,漫游AI。实现,漫,漫游AI通常都,比,比较简,单,单,一,般,般根据,一,一个游,戏,戏角色,的,的位置,,,,改变,另,另一个,游,游戏角,色,色的速,度,度或位,置,置。游,戏,戏角色,的,的漫游,移,移动也,可,可以由,随,随机的,或,或预先,定,定义的,方,方式影,响,响。,10.1人工智,能,能与游,戏,戏的基,础,础,10.1.2游戏人,工,工智能,的,的类型,(2)行为AI,行为AI用于确,定,定追踪,在,在一个,游,游戏玩,家,家控制,的,的角色,后,后面的,那,那些游,戏,戏对象,的,的行为,,,,这种,追,追踪行,为,为其实,是,是一种AI系统,,称,称为行,为,为AI。行为AI常混合,使,使用几,种,种漫游AI算法来,赋,赋予游,戏,戏角色,特,特定的AI行为。,如,如果希,望,望NPC有时候,跟,跟踪、,有,有时候,躲,躲避、,有,有时候,遵,遵从一,种,种运动,方,方式,,甚,甚至完,全,全随机,移,移动,,那,那么可,以,以考虑,使,使用行,为,为AI。而行,为,为AI的另外,一,一个作,用,用就是,可,可以改,变,变游戏,的,的难度,。,。例如,,,,可以,设,设计一,种,种行为AI模式,,让,让NPC按照一,定,定的时,间,间比例,采,采取跟,踪,踪、躲,避,避和随,机,机移动,三,三种移,动,动模式,组,组合而,成,成的行,为,为AI。如果,希,希望在,不,不同的,关,关卡中,设,设置游,戏,戏的不,同,同难度,,,,低难,度,度关卡,可,可以设,置,置为20%的时间,跟,跟踪玩,家,家角色,,,,20%的时间,躲,躲避玩,家,家角色,,,,60%的时间,随,随机移,动,动;高,难,难度关,卡,卡可以,设,设置为,,,,40%的时间,跟,跟踪玩,家,家角色,,,,20%的时间,躲,躲避玩,家,家角色,,,,40%的时间,随,随机移,动,动。,(3)策略AI,在一个,策,策略游,戏,戏中,,策,策略AI从一组,固,固定的,实,实现定,义,义的漫,游,游规则,中,中确定,最,最佳的,移,移动。,10.2追踪和,躲,躲避算,法,法,追踪和,躲,躲避的,问,问题在,游,游戏开,发,发中是,随,随处可,见,见的,,无,无论开,发,发的是,什,什么类,型,型的游,戏,戏,是,第,第一人,称,称射击,游,游戏,,或,或者是,实,实时战,略,略游戏,,,,还是,角,角色扮,演,演游戏,,,,游戏,中,中的各,种,种NPC角色都,会,会追踪,或,或躲避,玩,玩家角,色,色。在,第,第一人,称,称射击,游,游戏中,,,,敌对,方,方的NPC需要追,踪,踪玩家,角,角色并,向,向玩家,角,角色射,击,击;当,玩,玩家角,色,色向NPC射击的,时,时候,,它,它必须,躲,躲避玩,家,家角色,的,的射击,。,。在实,时,时战略,游,游戏中,,,,NPC所控制,的,的部队,时,时刻都,在,在追踪,玩,玩家角,色,色的部,队,队和基,地,地,并,向,向玩家,角,角色发,起,起攻击,;,;当玩,家,家角色,开,开始反,击,击时,NPC又要开,始,始躲避,攻,攻击,,而,而游戏,的,的进程,也,也是在,这,这种不,断,断的追,踪,踪、躲,避,避过程,中,中推进,的,的。总,之,之,在,任,任何一,个,个种类,的,的游戏,中,中,都,会,会看到NPC在进行,追,追踪和,躲,躲避运,动,动。,10.2追踪和,躲,躲避算,法,法,追踪和,躲,躲避其,实,实是一,个,个两步,的,的决策,判,判断问,题,题:首,先,先根据,一,一种行,为,为模式,决,决定NPC采取追,踪,踪行为,还,还是采,取,取躲避,行,行为,,其,其次是,开,开始追,踪,踪或者,逃,逃跑。,很,很多开,发,发者认,为,为追踪,与,与躲避,问,问题还,包,包括另,外,外的一,层,层含义,:,:即避,开,开NPC运动路,径,径上的,障,障碍物,。,。,实现追,踪,踪和躲,避,避算法,的,的最简,单,单、最,直,直观的,想,想法是,根,根据玩,家,家角色,的,的位置,信,信息,,改,改变NPC的位置,。,。在游,戏,戏循环,的,的每帧,中,中,缩,小,小NPC与玩家,角,角色在,游,游戏世,界,界中坐,标,标的距,离,离,可,以,以使得NPC更接近,玩,玩家,,实,实现追,踪,踪效果,;,;在游,戏,戏循环,的,的每帧,中,中,增,大,大NPC与玩家,角,角色在,游,游戏世,界,界中坐,标,标的距,离,离,可,以,以实现,躲,躲避与,逃,逃跑。,而,而所谓,的,的增大NPC与玩家,角,角色的,距,距离,,可,可以简,单,单地理,解,解为:,通,通过算,法,法分别,增,增大NPC位置坐,标,标与玩,家,家角色,位,位置坐,标,标各个,对,对应分,量,量差值,的,的绝对,值,值。一,般,般而言,,,,二维,游,游戏中,坐,坐标值,由,由(X,Y)两个分,量,量表示,,,,三维,游,游戏的,坐,坐标值,由,由(X,Y,Z)三个分,量,量表示,。,。,10.2追踪和,躲,躲避算,法,法,10.2.1基本的,追,追踪和,躲,躲避,追踪算,法,法的本,质,质,就,是,是根据,玩,玩家角,色,色的位,置,置信息,,,,改变NPC的位置,,,,减小NPC与玩家,角,角色在,游,游戏世,界,界中坐,标,标的距,离,离。,【例10.1】基本追,踪,踪算法,。,。,/xNPC与yNPC分别代,表,表NPC的两个,坐,坐标分,量,量,/xPlayer与yPlayer分别代,表,表玩家,角,角色的,两,两个坐,标,标分量,if,(,(xNPC, xPlayer,),), xNPC,-,-;,else if (xNPC , yPlayer,),), yNPC,-,-;,else if (yNPC , xPlayer,),), xNPC,+,+;,else if (xNPC , yPlayer,),), yNPC,+,+;,else if (yNPC , xPlayer,),), xNPC,-,-;,else if (xNPC , yPlayer,),), yNPC,-,-;,else if (yNPC ,xPlayerTile),xNPCTile,-,-;,else if (xNPCTile,yPlayerTile),yNPCTile,-,-;,else if (yNPCTile,destinationX,),), currentX -,-,-;,else if (currentX,destinationY,),), currentY -,-,-;,else if (currentY, destinationY),currentY,+,+;,10.3寻径算,法,法,10.3.1简单寻,径,径算法,比较好,的,的做法,是,是让游,戏,戏角色,沿,沿着比,较,较自然,的,的视线,路,路径行,走,走,可,以,以用Bresenham线段光,栅,栅化算,法,法来实,现,现这种,效,效果。Bresenham算法是,图,图形学,中,中进行,直,直线段,光,光栅化,的,的算法,,,,其目,的,的是找,出,出一条,直,直线段,在,在屏幕,上,上所经,过,过的像,素,素集合,。,。而事,实,实上,,这,这个像,素,素的集,合,合也可,以,以看成,从,从屏幕,上,上一个,点,点通向,另,另外一,个,个点的,路,路线,,其,其效果,如,如图10.2所示。,需,需要注,意,意的是,,,,在基,于,于贴砖,的,的游戏,环,环境中,使,使用这,种,种算法,,,,Bresenham算法所,找,找到的,不,不是一,个,个以像,素,素为基,础,础的路,径,径集合,,,,而是,一,一个以,贴,贴砖为,基,基础的,像,像素集,合,合。,10.3寻径算,法,法,简单寻,径,径算法,Bresenham算法,10.3寻径算,法,法,10.3.2A,*,*算法,简单寻,径,径算法,在,在一些,古,古老而,简,简单的,游,游戏中,能,能够很,好,好地解,决,决问题,,,,可是,随,随着计,算,算机处,理,理能力,的,的提高,,,,现在,的,的游戏,在,在设计,上,上比起,街,街机时,代,代的游,戏,戏要复,杂,杂很多,,,,这些,简,简单的,算,算法变,得,得不太,适,适用。,例,例如,,当,当场景,中,中充满,河,河流、,森,森林、,围,围墙等,各,各种障,碍,碍物时,,,,角色,需,需要找,到,到一条,绕,绕开障,碍,碍物并,到,到达目,标,标的最,佳,佳的路,径,径就是,一,一种相,对,对复杂,的,的情况,。,。,解决这,些,些问题,的,的方法,就,就是采,用,用A*算法,,一,一种高,效,效的启,发,发式搜,索,索算法,。,。A*算法总,能,能够在,一,一个有,障,障碍物,的,的复杂,场,场景中,找,找出一,条,条从出,发,发点到,目,目标点,的,的最佳,路,路径。,这,这里“,最,最佳”,的,的含义,在,在不同,的,的游戏,中,中也不,尽,尽相同,,,,有的,游,游戏认,为,为“最,佳,佳”是,指,指人物,角,角色在,到,到达目,标,标地点,后,后其体,力,力耗费,最,最少,,有,有的游,戏,戏则是,指,指用最,短,短的时,间,间到达,目,目标地,点,点,而,对,对于绝,大,大多数,游,游戏来,说,说,“,最,最佳”,的,的意思,是,是指能,够,够绕开,障,障碍物,而,而且走,过,过的距,离,离最短,。,。,10.3寻径算,法,法,10.3.2A,*,*算法,A*算法可,以,以理解,为,为,搜,索,索一条,由,由出发,点,点到目,标,标地点,的,的路径,,,,使得,这,这条路,径,径的“,代,代价”,是,是最小,的,的,而,不,不同的,游,游戏对,此,此处的,“,“代价,”,”将有,不,不同的,含,含义。,基于贴,砖,砖的游,戏,戏场景,作,作为基,础,础,在,一,一个有,障,障碍物,的,的基于,贴,贴砖的,游,游戏地,图,图中寻,找,找一条,经,经过两,点,点而代,价,价最小,的,的路径,。,。在贴,砖,砖场景,中,中,假,定,定游戏,角,角色在,任,任意两,个,个相邻,的,的非障,碍,碍物贴,砖,砖之间,移,移动都,会,会产生,“,“代价,”,”,而,障,障碍物,贴,贴砖不,可,可通过,。,。如图,所,所示,A点可以,通,通过不,同,同的路,径,径到达B点和C点,但,是,是代价,不,不同。,10.3寻径算,法,法,10.3.2A,*,*算法,在A*算法的,处,处理过,程,程中,,每,每个贴,砖,砖都被,称,称为一,个,个节点,,,,A*算法在,计,计算过,程,程中为,每,每个非,障,障碍物,节,节点都,计,计算一,个,个通过,这,这个节,点,点到达,目,目标地,点,点的代,价,价函数,,,,记为f(n)。在计,算,算过程,中,中,f(n)为一个,估,估算值,,,,随着,计,计算的,进,进行每,个,个节点,的,的f(n)值都有,可,可能改,变,变。A*算法定,义,义:f(n)=g(n)+h(n)。g(n)表示从,起,起始点,移,移动到,当,当前节,点,点耗费,的,的代价,,,,根据,之,之前的,条,条件,,垂,垂直和,水,水平方,向,向代价,为,为10,对角,线,线方向,为,为14。h(n)表示当,前,前点到,目,目标点,估,估计代,价,价,一,般,般设定,这,这个估,计,计代价,值,值为:,当,当前点,到,到目标,点,点的水,平,平和垂,直,直方格,的,的总数,,,,然后,乘,乘以10。A*算法在,计,计算过,程,程中使,用,用到两,个,个链表,,,,一个,叫,叫做open表,另,一,一个叫,做,做closed表。closed表中的,节,节点是,其,其所有,相,相邻节,点,点的f(n)值全部,计,计算过,的,的节点,,,,open表中的,节,节点是,计,计算过f(n)值,但,是,是其所,有,有相邻,节,节点的f(n)值没有,全,全部计,算,算的节,点,点。,10.3寻径算,法,法,10.3.2A,*,*算法的,具,具体步,骤,骤,(1)将起,始,始点添,加,加到open表中。,(2)重复,以,以下步,骤,骤:, 寻,找,找open表中f(n)值最低,的,的点作,为,为当前,点,点,并,将,将它放,入,入closed表中。, 遍,历,历当前,节,节点相,邻,邻的所,有,有8个节点,,,,如果,不,不可通,过,过或已,经,经在closed表中,,则,则略过,。,。如果,不,不在open表中,,则,则将其,添,添加进open表中,,并,并把当,前,前节点,作,作为其,父,父节点,,,,记录,这,这个节,点,点的f(n)、g(n)、h(n)值;如,果,果已经,在,在open表中,,则,则检查g(n)值,看,是,是否存,在,在更好,的,的路径,,,,如果,存,存在,,则,则把这,个,个节点,的,的父节,点,点改为,当,当前点,,,,并重,新,新计算,这,这个节,点,点的g(n)和f(n)值,对open表按f(n)值排序,。,。, 当,目,目标点,被,被放入closed表中时,,,,路径,被,被找到,。,。另一,种,种情况,是,是,没,有,有找到,目,目标点,,,,open表已空,,,,也就,是,是说,,路,路径不,存,存在。,(3)如果,找,找到路,径,径,则,从,从目标,点,点开始,,,,按父,节,节点返,回,回起始,点,点,这,就,就是我,们,们需要,的,的路径,。,。,10.3寻径算,法,法,10.3.2A,*,*算法,A*算法在,计,计算过,程,程中的,每,每步都,会,会对所,有,有open表里的,节,节点按,照,照f(n)值的大,小,小进行,排,排序,,选,选择f(n)值最小,的,的节点,将,将其移,动,动到closed表中,,并,并考虑,其,其所有,相,相邻节,点,点。具,体,体步骤,如,如下。, 如,果,果某个,相,相邻节,点,点不在open表中,,则,则将其,加,加入open表,并,将,将当前,节,节点作,为,为这个,相,相邻节,点,点的父,节,节点,,计,计算其f(n)、g(n)和h(n)值。, 如,果,果这个,相,相邻节,点,点已经,在,在open表中,,则,则比较,其,其g(n)值与通,过,过本节,点,点到达,此,此相邻,节,节点的,总,总代价,值,值,如,果,果通过,本,本节点,到,到达这,个,个相邻,节,节点的,总,总代价,值,值更小,,,,则更,新,新这个,相,相邻节,点,点的g(n)值,将,其,其父节,点,点设为,本,本节点,,,,并根,据,据新的g(n)值重新,计,计算f(n)值;否,则,则,不,改,改变这,个,个相邻,节,节点的,任,任何属,性,性,同,时,时将这,些,些相邻,节,节点加,入,入open表中,,并,并对这,些,些相邻,的,的节点,计,计算f(n)、g(n)、h(n)值。,10.3寻径算,法,法,10.3.2A,*,*算法的,具,具体步,骤,骤,A*算法不,断,断重复,上,上述过,程,程,最,终,终将找,到,到一条,从,从起始,点,点到目,标,标点的,代,代价最,小,小的路,径,径,如,图,图所示,。,。,
展开阅读全文