一个模块都往往需要统一的接口支持,特别是对于非常大型的模块,基础结构的统一性非常重要,它往往决定了其扩展对象的通用性。昨天说了AI的基本概述以及组成,作为与场景模块中核心一样重要的地位,基础部分的设计尽量的统一、详细、通用、精简。

游戏截图

基础接口(base)

1、管理方法

初始化(init)、释放(release)、获得NPC队伍指针(get npc team)、内部逻辑循环函数(activate)。

2、状态方法(ing)

休闲(idle)、闲逛(wander)、巡逻(patrol)、警戒(alert)、跟随(follow)、追击(pursuit)、保持距离(keep away)、逃跑(escape)、返回(return)、等待(wait)。

3、状态切换(do)

休闲(idle)、闲逛(wander)、巡逻(patrol)、警戒(alert)、跟随(follow)、追击(pursuit)、保持距离(keep away)、逃跑(escape)、返回(return)、等待(wait)。

4、事件

尝试移动(try move)、攻击(attacked)、威胁清除(clear threat)、寻路结果(path result)。

5、技能选择评估

初始化技能CD(init skill cd)、检查攻击目标(check attack target)、期望的目标(period target)、期望的自身(period self)、期望的友人(period firend)、被动响应(passive respond)、中途中断(channeling break)、目标数量(target count)、自身血量(self hp)。

6、工具函数

获得点的极坐标偏移点(get adjust point)、跟随(follow)、清除目标(clear target)、保存返回点(save return point)、闲逛(wander)、逃跑(escape)、寻路(patrol)、警戒(alert)、请求帮助(call help)、请求治疗(call heal)、转到战斗(turn to fight)、转到休闲(turn to idle)、检查事件(check event)、执行事件(fire event)、返回检查(check return)、请求治疗检查(check call heal)、闲逛范围检查(check wander range)、攻击检查(check attacked)、检查目标是否进入警戒范围(check is in alert range)、检查目标是否进入攻击范围(check is in attck range)、保持攻击范围(keep attck range)、保持闲逛范围(keep wander range)。

算法(近似迭代法)

1、牛顿迭代法

code.

#include <stdio.h>
#include <inttypes.h>
#include <math.h> /**
* 牛顿迭代法
* 该方法是用于求方程或方程组近似根的一种常用算法。
*/ #define EPS 1e-6 double f(double x);
double f1(double x);
int32_t newton(double *x, int32_t iteration); int32_t main(int32_t argc, char *argv[]) {
double x;
int32_t _x, iteration;
printf("please input init iteration value x0: ");
scanf("%d", &_x);
x = static_cast<double>(_x);
printf("please input max iteration count: ");
scanf("%d", &iteration);
if ( == newton(&x, iteration)) {
printf("the value nearby root is: %f\n", x);
} else {
printf("iteration failed!\n");
}
return ;
} double f(double x) {
return x * x * x * x - * x * x * x + 1.5 * x * x - 4.0;
} double f1(double x) {
return * x * x * x - * x * x + * x;
} int32_t newton(double *x, int32_t iteration) {
double x0, x1;
int32_t i;
x0 = *x; //初始方程的近似根
for (i = ; i < iteration; ++i) { //iteration 是迭代次数
if (0.0 == f1(x0)) { //如果倒数为0,则返回0(该方法失效)
printf("the process derivative is 0!\n");
return ;
}
x1 = x0 - f(x0) / f1(x0); //开始牛顿迭代计算
if (fabs(x1 - x0) < EPS || fabs(f(x1)) < EPS) { //达到结束条件
*x = x1; //返回结果
return ;
} else { //没有达到结束条件,准备下一次迭代
x0 = x1;
}
}
printf("more than iteration count\n");
return ;
}

result.

2、求定积分

code.

#include <stdio.h>
#include <inttypes.h>
#include <math.h> /**
* 求定积分
* 利用梯田法求定积分,需注意以下3个方面的工作:
* 1 确定迭代变量。
* 2 建立迭代关系。
* 3 对迭代过程进行控制。
*/ #define N 100 double f(double x);
double integral(double a, double b, int32_t n); int32_t main(int32_t argc, char *argv[]) {
double a, b, value;
int32_t _a, _b;
printf("please input definite integral max and min value: ");
scanf("%d,%d", &_a, &_b);
a = static_cast<double>(_a);
b = static_cast<double>(_b);
value = integral(a, b, N);
printf("sin(x) in range[%d,%d] definite integral is: %f\n", _a, _b, value);
return ;
} double f(double x) {
return sin(x);
} double integral(double a, double b, int32_t n) {
double s, h;
int32_t i;
h = (b - a) / n;
s = 0.5 * h * (f(a) + f(b));
for (i = ; i < n; ++i)
s = s + f(a + i * h) * h;
return s;
}

result.

MMORPG大型游戏设计与开发(服务器 AI 基础接口)的更多相关文章

  1. MMORPG大型游戏设计与开发(服务器 AI 概述)

    游戏世界中我们拥有许多对象,常见的就是角色自身以及怪物和NPC,我们可以见到怪物和NPC拥有许多的行为,比如说怪物常常见到敌对的玩家就会攻击一样,又如一些NPC来游戏世界中走来走去,又有些怪物和NPC ...

  2. MMORPG大型游戏设计与开发(服务器 AI 控制器)

    上一篇我们说了基础接口的组成,想必大家对AI中的基础方法有了一定的了解,而基础接口只能一个通用的,要实现不同的类别还需子类中实现,这就形成了玩家.主动.被动.木桩这些类型.不同类型的AI需要有一个统一 ...

  3. MMORPG大型游戏设计与开发(服务器 游戏场景 核心详述)

    核心这个词来的是多么的高深,可能我们也因为这个字眼望而却步,也就很难去掌握这部分的知识.之所以将核心放在最前面讲解,也可以看出它真的很重要,希望朋友们不会错过这个一直以来让大家不熟悉的知识,同我一起进 ...

  4. MMORPG大型游戏设计与开发(游戏服务器 游戏场景 概述 updated)

    我们在玩游戏的时候,我们进入游戏后第一眼往往都是看到游戏世界中的场景,当然除了个别例外,因为那些游戏将游戏场景隐藏了起来,如文字游戏中的地点一样.既然我们接触了游戏世界的核心,那么作为核心的场景又包括 ...

  5. MMORPG大型游戏设计与开发(概述)updated

    1.定义 MMORPG,是英文Massive(或Massively)Multiplayer Online Role-PlayingGame的缩写,即大型多人在线角色扮演游戏. 2.技术与知识 在这系列 ...

  6. MMORPG大型游戏设计与开发(UI SYSTEM SHOW)

    接下来一段时间,这些文件可能不再更新,期间我会学习和掌握一些前端知识.虽然我非常欣赏剑侠网络版叁和九阴真经的画面,但是那是一个庞大的游戏引擎,一般人是无法窥伺的,除非你是天才而且要拥有机器毫无中断的毅 ...

  7. MMORPG大型游戏设计与开发(客户端架构 part8 of vegine)

    脚本模块是游戏设计中争论比较多的话题,那是因为作为脚本本身所带来的利弊.其实这都无关紧要,取舍是人必须学会的一项技能,如果你不会取舍那么就让趋势给你一个满意的答复.自从魔兽世界以及传奇(世界)问世以来 ...

  8. MMORPG大型游戏设计与开发(客户端架构 part15 of vegine)

    一个接口需要统一的派生接口,这样做的好处在于能够统一的进行管理.我所知的脚本语言中,接口有多重接口,也还有所谓的虚基类,这些都是方便类的管理.在vengine(微引擎)中,统一的的接口管理为kerne ...

  9. MMORPG大型游戏设计与开发(服务器 AI 事件)

    AI中的事件与场景中的事件大致相同,都是由特定的条件触发的.只不过AI的事件与其他事件不同的是,对于AI的事件往往是根据不同的AI类型,和动态的触发条件下才产生的.其实不管AI多么智能,它对应的触发条 ...

随机推荐

  1. html的留言板制作(js)

    这次留言板运用到了最基础的localstorage的本地存储,展现的效果主要有: 1.编写留言2.留言前可以编辑自己的留言昵称.不足之处: 1.未能做出我喜欢的类似于网易的叠楼功能. 2.未能显示评论 ...

  2. ios 文件操作(NSFileManager)

    IOS的沙盒机制,应用只能访问自己应用目录下的文件,iOS不像android,没有SD卡概念,不能直接访问图像.视频等内容. iOS应用产生的内容,如图像.文件.缓存内容等都必须存储在自己的沙盒内. ...

  3. thinkphp学习简易教程(二) thinkphp连接读取MySQL数据库

    首先, 在本地服务器中新建项目APP,依据第一讲中的步骤配置好thinkphp,这里为了测试方便,不分前台和后台模块,统一把模块路径设为'./APP/'. 1.新建数据库myapp,以及数据库表thi ...

  4. Verilog学习笔记简单功能实现(二)...............全加器

    先以一位全加器为例:Xi.Yi代表两个加数,Cin是地位进位信号,Cout是向高位的进位信号.列表有:   Xi     Yi    Cin Sum Cout 0 0 0 0 0 0 0 1 1 0 ...

  5. 【夯实PHP系列】购物车代码说明PHP的匿名函数

    1. 定义:匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数.最经常用作回调函数(callback)参数的值.当然,也有其它应 ...

  6. socket.io,io=Manager(source, opts)

    原文:http://www.cnblogs.com/xiezhengcai/p/3968067.html 当我们在使用 var socket = io("ws://103.31.201.15 ...

  7. ASP.NET MVC搭建项目后台UI框架—5、Demo演示Controller和View的交互

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  8. 向空项目添加 ASP.NET Identity

    安装 AspNet.Identity 程序包 Microsoft.AspNet.Identity.Core 包含 ASP.NET Identity 核心接口Microsoft.AspNet.Ident ...

  9. 使用 Sticky-Kit 实现基于 jQuery 的元素固定效果

    元素固定效果在网页中应用得很多,比较常见的使用场景有改进导航,显示广告.Sticky-Kit 是一个非常方便的 jQuery 插件,简化了创建/管理粘元素,有复杂的使用功能.这些功能包括:处理多个固定 ...

  10. js基础知识梳理(最简版)

    基础的JavaScript知识,只放XMind截图.小白 JS01 JS02 JS03 最基础的js知识--!