漫游(追逐)AI的实现

作为游戏开发者,要给玩家制造挑战,只要使游戏的难度有所增加,使游戏中的假想敌人像玩家一样机智,一样具有人类的智慧和应变能力。这就需要使用一种计算机专业领域新兴的一门科学AI(artificial intelligence,人工智能)。
人工智能,作为一门新兴科学,人类思维的模拟是AI的主要研究领域,也是难、热点之一。人类的思维是一个十分不确定性的过程,要对其精确建模十分困难。在我做的这个游戏中所使用的AI还很粗糙,是属于人工智能的基础性知识。游戏开发专家将和游戏相关的AI划分为3种基本类型:
·漫游AI——确定一个游戏对象如何在一个虚拟的游戏世界中漫游;
·行为AI——确定跟踪或追逐在一个游戏对象或多个游戏对象后面的别一个游戏对象是多么具有攻击性;
·策略AI——在一个策略游戏中,从一组固定的实现定义的漫游规则中确定最佳的移动。
漫游AI是射击类游戏最常见的AI方法,是对游戏对象建模的AI,也就是说,游戏对象做出决定,确定它们如何在一个虚拟世界中漫游。漫游AI的一个典型的例子就是像Galaga的太空射击游戏,其中外星人常常试图跟踪和追逐玩家。同样,漫游AI也用来实现按照预先定义的方式飞行,发射子弹或射击的敌机。基本上,对于由计算机(或程序)控制的对象,不论是它必须做出决定改变当前的路径,还是要游戏中实现需要的结果,或者只是简单地遵守某种特定的移动方式,都要用到漫游AI。在我做的这个游戏中,敌方飞机所需要的结果就是遵从某种移动方式,同时尝试和玩家的飞机发生碰撞并玩家生命值降低。在其他的游戏中,计算机玩家所需要的结果可能是避开人类玩家所发射的子弹。
实现漫游AI通常比较简单,一般包括一个对象(玩家的飞机)的位置,改变别一个对象(敌人的飞机)的速度或位置。对象的漫游移动也可以由随机的或预先定义的方式的影响。通常有3种类型的漫游AI:追逐、躲避和模式。
追逐是这样一种漫游:一个游戏对象跟踪或追逐另外一个游戏对象或多个游戏对象。追逐是很多射击类游戏所使用的一种方法,其中敌方飞机常常追逐玩家飞机。根据玩家飞船的位置,改变外星人的速度和位置,这就实现了追逐。
例如,我做的这个游戏中实现追逐的算法:
/*flag标记具有跟踪能力的小飞机*/ 
private int flag=-1; 
for(int i=0;i<MAX_SP;i++) 
      if(smallPlane[i].isVisible()) 
      { 
        if(i==flag) 
        { 
          if(smallPlane[i].getX()>playerSprite.getX()) 
                        smallPlane[i].move(-speedOfSP, speedOfSP); 
          else 
            smallPlane[i].move(speedOfSP, speedOfSP); 
        } 
        else 
          smallPlane[i].move(0,speedOfSP); 
    } 
    如程序中可以看出,玩家飞机smallPlane[i]的坐标位置(smallPlane[i].getX())根据玩家飞机playerSprite的位置(playerSprite.getx())而改变。这段代码可能产生的问题就是可能AI工作的非常良好,敌人飞机几乎可能毫不犹豫地纠缠住玩家,基本上使得玩家没有机会躲开它,这可能是游戏设计者所需要的,但是,玩家更希望敌人在追逐玩家的时候能够多飞一会儿。如果希望这个过程更加完美一些,玩家至少有机会能够以机动性战胜外星人。即敌人飞机在追逐玩家精灵时不应该全力以赴地进行躲闪,而是有余力去追击敌人。
使追逐算法变得更加平和的一种方法就是,在过程中加入一点随机性,我做的这个游戏使用的是这样一种方法: 
/*有跟踪能力的小飞机的出现具有随机性*/ 
x=(int)(random.nextInt()%3); 
                    if(x==0) 
                    { 
                      flag=i;// flag标记具有跟踪能力的小飞机 
                    } 
  break; 
在这段代码中,敌人飞机只有三分之一的机会能够跟踪玩家。即便只有三分之一的机会能够追逐到玩家,敌人飞机还是对玩家具有攻击性,而这也使玩家能够争取逃脱的机会。
在漫游AI中,还有一个分类,即是按照预先定义的方式飞行,发射子弹或射击的敌方机体。在我做的这个游戏中,敌机由计算机(程序)来进行控制,几乎敌机的所有行为均由程序控制。
对于逃避、模式漫游戏AI,行为AI我做的这个游戏中没有具体的实现,所以只是简单地进行介绍(可以参看《J2ME手机游戏编程入门》第三部分,第13章)。逃避AI在逻辑上与逃避AI是相对的,即敌机试图躲避玩家飞机的射击。和追逐一样,逃避也可以使用随机方法或者模式移动来减缓。比如逃避的一个经典例子是Pac-Man。模式移动指得是游戏对象使用一组预定义的移动的一种漫游AI类型。模式移动的典型例子是经典街机Galaga中的外星人,它们在屏幕上表演各种各样的漂亮的特技飞行。模式包括圆圈,八字形等等。
AI的另外一大类是行为AI,它常常是一组混和漫游AI算法赋予游戏对象特定的地为。比如敌方机体有时候追逐,有时候躲避,并且每次交替时间都是随机的。常常在实现中,先定义几种行为:追逐、躲避、按某模式飞行或随机飞行,并且可以上述行为分配时间百分比,如50%追逐,10%躲避,40%随机飞行等。实现行为AI的伪码可以这样表示。 
int behavior=Math.abs(rand.nextInt())%100; 
if(behavior<50) 
//追逐 
else if(behavior<60) 
//躲避 
else 
//随机飞行 
 

最后一种AI类型即是策略AI,这种AI机制常常在棋牌类,益智类游戏中比较常见。

本文转自 gaochaojs 51CTO博客,原文链接:http://blog.51cto.com/jncumter/187540,如需转载请自行联系原作者

J2ME下漫游(追逐)AI的实现相关推荐

  1. 10年卖下28家AI公司 苹果的AI吸星大法!

    十年前的 2010 年 2 月,Siri 公司首款虚拟个人助手应用 Siri 出现在苹果商店中. 两周后,Siri 联合创始人兼 CEO 达格·基特劳斯(Dag Kittlaus)接到一个电话: &q ...

  2. Google DeepMind 团队发布新算法,下一个被 AI 虐哭的是谁?

    [CSDN 编者按]2015 年 AlphaGo 出道一年,就战胜法国二段职业棋手樊麾,2016 年 3 月以 4:1 战胜韩国国手李世石九段,3 月 14 日,韩国棋院表示 AlphaGo 实力不逊 ...

  3. 下一个主要AI平台是什么?苹果说:手机

    千平 发自 凹非寺 量子位 出品 | 公众号 QbitAI 下一个主要AI平台在哪里? 苹果公司的答案是:手机. "我们已经构建的架构.我们放在手机手表里的神经引擎,对未来至关重要,这些将帮 ...

  4. 下一个手机AI浪潮——再见,苹果和他的时代!

    长江后浪推前浪,前浪死在沙滩上!手机领域江湖也是如此.回望手机发展史,从1973年第一部民用手机到1983年的摩托罗拉大哥大,再到1992年全球第一条手机短信诞生与1995年的第一款诺基亚翻盖手机问世 ...

  5. windows10系统下PS、AI等软件界面字很小如何解决

    转自:http://www.xitongcheng.com/jiaocheng/win10_article_24051.html AI CS6是一款功能十分强大的图形设计软件,因此深受很多用户的喜爱. ...

  6. AI开发难?请收下华为云AI大拿秘籍一份!

    现如今AI技术.概念火爆.落地应用更是繁多,但开发呢?是否困难?到底有多痛? 这一问可不要紧,竟然引来诸多吐槽,攻城狮们纷纷表示,AI开发对技能要求实在是高,技术知识你要懂,机器学习的背景理论也要ge ...

  7. 一盘棋都没下过,AI只听人类评论比赛,就学会了国际象棋,还战胜了DeepChess...

    转载 栗子 发自 凹非寺 量子位 出品 | 公众号 QbitAI 一只AI要学会国际象棋,是不是一定要下过棋才行? 不一定. 伦敦大学学院的小伙伴们,开发了一只新的国际象棋AI,只看人类对比赛的评论, ...

  8. 李开复Bengio大咖对话:下一阶段AI最大机遇在这4个领域

    来自 Deep Tech for Good 量子位 报道 | 公众号 QbitAI 人工智能技术,接下来要如何突破? 新冠疫情之下,AI还能帮忙做什么? 除了现有的领域,AI还能真正为这个世界带来什么 ...

  9. J2ME下的手机游戏的优化

    手机游戏的优化 手机游戏设计中由于设备性能限制,可能出现资源不足的情况,这就需要优化实现技术,游戏的优化有很多的技巧,在我做的这个游戏中使用了以下方法: ⒈   关于异常的处理 Java中提供了try ...

最新文章

  1. 易宝典文章——如何将PST文件导入到Exchange 2010 的邮箱
  2. 《小程序个人信息保护研究报告》解读
  3. 每日一皮:客户被绑,蒙眼,惊问 “想干什么?”
  4. 计算机网络技术协议名词解释,网络协议名词解释
  5. 下面关于“栈”的描述,正确的是( )
  6. SQL中Group By的使用,以及一些特殊使用方法
  7. Cassandra数据读取机制
  8. Apache Shiro权限绕过漏洞 (CVE-2020-11989) 挖掘分析和复现
  9. 【读书笔记《Android游戏编程之从零开始》】1.Android 平台简介与环境搭建
  10. android平台支付宝快捷支付
  11. C#、winfrom打印pnl订单窗体
  12. C/C++刁钻问题各个击破之细说sizeof .
  13. 北理工计算机学院沈建斌,沈建冰_北京理工大学计算机学院
  14. 设计时颜色调配参考(小资料)
  15. Android studio Chipmunk 新的gradle规则变更
  16. QA和QC,傻傻分不清?
  17. 浅析静态规划和动态规划
  18. Python+MATLAB处理气象站点数据
  19. 教师计算机培训汇报ppt,教师计算机培训(教师).ppt
  20. nodejs和npm的关系

热门文章

  1. typeof instanceof 之间的区别总结
  2. Webservices
  3. 微软收购社交监控分析公司Netbreeze
  4. 基于 Android NDK 的学习之旅----- C调用Java
  5. unittest框架执行用例
  6. 实现apply call 方法
  7. java加密解密与数字证书的操作
  8. ORA-00257: archiver error. Connect internal only, until freed 错误的处理方法
  9. ROS 安装kinect驱动+测试
  10. SQL索引学习-聚集索引