最近主程有些忙,甩给我一些服务器的代码,零零散散总结了一些要素。

java程序架构也是层层分析,先罗列出需要做的工作,然后从主干到细节依次实现。就这点而言,程序和绘画有很多类似的地方。

关于怪物AI类型,一般可以分为下列几类:

// NPCai性格
public static final int MONSTER_CHARACTER_PASSIVITY = 1; // 被动怪,不打我我不打你,打我我打你
public static final int MONSTER_CHARACTER_ACTIVITY = 2; // 主动怪,见谁打谁
public static final int MONSTER_CHARACTER_TIMID = 3; // 木桩怪,不移动,不攻击,不回血
public static final int MONSTER_CHARACTER_STANDING = 4; // 站桩输出怪(防御塔)
public static final int MONSTER_CHARACTER_PITFALL = 5; // 机关型怪物
public static final int MONSTER_CHARACTER_TIMIDOC = 6; // 木桩怪,不移动,不攻击,脱战回血
public static final int MONSTER_CHARACTER_PURPOSE = 7; // 目标列表主动怪 优先攻击设定好的目标
public static final int MONSTER_CHARACTER_TRUCK = 8; //镖车型怪物,只做特定路径移动,不攻击。可被攻击。

怪物AI的状态,可以分为:

// npc状态
public static final int NPCSTATE_INVALID = -1;//无效
public static final int NPCSTATE_PATROL = 1; // 休闲态
public static final int NPCSTATE_TRACE = 2; // 追击态
public static final int NPCSTATE_ATTACK = 3; // 攻击态
public static final int NPCSTATE_OUTCOMBAT = 4; // 脱战
public static final int NPCSTATE_RETREAT = 5; // 后退
public static final int NPCSTATE_FORCE_TRANSFER = 6;// 强制转移到某点,清空怪物仇恨列表,不攻击,不追击,可被击
public static final int NPCSTATE_FORBID = 7; //禁身状态 站着不动挨打掉血

怪物归属,一般可以分为:

// 怪物归属相关
public static final int NPC_OWNER_PLAYER = 1; // 怪物属于个人
public static final int NPC_OWNER_TEAM = 2; // 怪物属于队伍

怪物的类型,这里需要用到表中的数据。事实上,策划负责配表和设计,程序负责功能的实现。这里用到了MonsterBase这张表,就接触到的策划而言,也都喜欢在继承的表前加Base,之后所有的子表都继承于这套总表。闲话少说,接着分析怪物的类型:

public static final int MONSTER_TYPE_COPY_MONSTER = 2;//MonsterBase表怪物类型:副本小怪
public static final int MONSTER_TYPE_COPY_ELITE = 4;//MonsterBase表怪物类型:副本精英
public static final int MONSTER_TYPE_COPY_BOSS = 6;//MonsterBase表怪物类型:副本BOSS
public static final int MONSTER_TYPE_WORLDBOSS = 7; // 世界Boss的MonsterType,对应MonsterBase表
public static final int MONSTER_TYPE_BOX_ELITE = 8; // 宝箱精英怪MonsterType,他死了所有打他的人都有奖励
public static final int MONSTER_TYPE_GANG_BEAST = 9; //帮会神兽的类型

怪物/NPC的生成是在服务器控制的,客户端除了表现画面外,不负责任何逻辑的处理。这里把不同怪物生成数量固定为不同的数组,所谓杀怪,就是对这些数组中的数据进行操作(如果要我来写这段代码的话,会用list<class>+number的形式来处理,而不会这样对数组进行操作)。

接下来处理怪物的AI,这里给了一个父类,具体功能都是在这个父类延伸出来的。这个父类中中添加了项目工程所需要的大量逻辑判断,这里不便直接给出脚本,而且脚本中引用了很多其他类,也无法直接使用。

在服务器的逻辑中,无需处理显示表现部分,但是对于逻辑的处理必须要保持严谨。具体的行为逻辑,需要了解策划的需求后再定,尔后每个怪物会有哪些行为,也是由策划配表决定。

从服务器角度分析RPG游戏——NPC的AI的更多相关文章

  1. 【android原生态RPG游戏框架源码】

    转载请注明原创地址:http://www.cnblogs.com/zisou/p/android-RPG.html 这份源码是在今年6月份写的,当时公司有一个技术部们的学习讨论的讲座,然后我自己就写了 ...

  2. 从不同的角度分析Flex的优缺点

    从不同的角度分析Flex的优缺点 技术角度: (1)具备了RIA时代富客户端的优点(C/S+B/S) (2)支持多种服务器语言(JAVA..NET.PHP)及主流框架(Spring.Hibernate ...

  3. Cocos2D-ObjC:在RPG游戏中混合Swift代码

    我之前写过一个RPG游戏<<熊猫之魂 SoulOfPanda>> 编译器使用的是SpriteBuilder,很好很强大!全部代码都由Objc完成,现在想尝试一下在其中混入Swi ...

  4. 深入浅出!从语义角度分析隐藏在Unity协程背后的原理

    Unity的协程使用起来比较方便,但是由于其封装和隐藏了太多细节,使其看起来比较神秘.比如协程是否是真正的异步执行?协程与线程到底是什么关系?本文将从语义角度来分析隐藏在协程背后的原理,并使用C++来 ...

  5. 从开发者的角度分析iOS应如何省电

    从开发者的角度分析iOS应如何省电 说明 网上关于iPhone如何省电的文章很多.但是基本没有讲原理.而在生活中,很多人在使用iPhone中有着明显的错误的省电习惯. 本文从iOS开发者的角度,对iO ...

  6. 从程序员的角度分析微信小程序(编程语言:用到什么学什么)

    从程序员的角度分析微信小程序(编程语言:用到什么学什么) 一.总结 一句话总结:微信小程序原理就是用JS调用底层native组件,和React Native非常类似.(需要时,用到时再学) 1.选择语 ...

  7. 从程序员的角度分析微信小程序

    昨天朋友圈被微信小程序刷爆了. 我赶快在书架上拿出三年前买的书,把上面的土擦干净,压压惊. 作为一个并不是资深的程序员. 从程序员的角度分析一下微信小程序,欢迎指点. 首先吐槽 微信小程序只发了200 ...

  8. Silverlight 2.5D RPG游戏技巧与特效处理:(十一)AI系统

    Silverlight 2.5D RPG游戏技巧与特效处理:(十一)AI系统 作者: 深蓝色右手  来源: 博客园  发布时间: 2011-04-19 11:18  阅读: 1282 次  推荐: 0 ...

  9. 从系统的角度分析影响程序执行性能的因素——SA20225205 黄兴宇

    实验总结分析报告:从系统的角度分析影响程序执行性能的因素 1.请您根据本课程所学内容总结梳理出一个精简的Linux系统概念模型,最大程度统摄整顿本课程及相关的知识信息,模型应该是逻辑上可以运转的.自洽 ...

随机推荐

  1. windwos下基于exp的提权

    00x1: 本文是基于windwos 补丁的漏洞提权. 其实是一件很简单的工作:如果看成数据库的3张表分别是: 未打补丁表, 补丁漏洞表, 漏洞利用提权程序表. 为一一对应关系,所以就是资源的掌握,以 ...

  2. Linux 入侵检测小结

    Linux  入侵检测小结 0x00 审计命令 在linux中有5个用于审计的命令: last:这个命令可用于查看我们系统的成功登录.关机.重启等情况:这个命令就是将/var/log/wtmp文件格式 ...

  3. 2th Dec 2018

    北京的冬天越来越冷了,是那种钻进骨头里的冷.果,爸爸又走了.每次离开都格外的难受,这种感觉是加剧的,一次比一次强烈.走的时候,你一脸的不高兴,能感觉出来你的不开心,你勉强让爷爷从我怀里面接过去.3个半 ...

  4. atop 分析小记

    atop分析小记 atop这个工具相当NB 项目中需要用到它的磁盘使用率统计值,为了一探究竟,挖了下它的代码 atopsar atopsar实际就是atop的一个链接指向. 从atop.c的main源 ...

  5. 网络编程 tftp下载文件的编程

    一.代码 操作码 功能 1 读请求,即下载 2 写请求,即上传 3 表示数据包,即DATA 4 确认码,即ACK 5 错误 from socket import * import struct s=s ...

  6. Error during artifact deployment. See server log for details.

    Error during artifact deployment. See server log for details. 这两个地方要一样.不然.就报 Error during artifact d ...

  7. Java 原子语义同步的底层实现

    原子语义同步的底层实现 volatile volatile只能保证变量对各个线程的可见性,但不能保证原子性.关于 Java语言 volatile 的使用方法就不多说了,我的建议是 除了 配合packa ...

  8. Spring 4 官方文档学习 Web MVC 框架

    1.介绍Spring Web MVC 框架 Spring Web MVC 框架是围绕DispatcherServlet设计的,所谓DispatcherServlet就是将请求分发到handler,需要 ...

  9. linux check

    建议安装chkrootkit.rkhunter.Lynis.ISPProtect这类安全工具,定期做扫描

  10. Django_Form验证(三)字段,字段的参数,widgets种类

    Form工具是一个很强大的工具,所以他的功能不仅仅是上面2个例子,这里详细记录一下Form的其他功能 字段的一般参数,以CharFields为列子: user=fields.CharField( re ...