上一篇我们说了基础接口的组成,想必大家对AI中的基础方法有了一定的了解,而基础接口只能一个通用的,要实现不同的类别还需子类中实现,这就形成了玩家、主动、被动、木桩这些类型。不同类型的AI需要有一个统一的接口来调用与控制,这就是我们今天要进一步了解的AI控制器,试想一下一部机器如果没有控制器会怎样,一个人如果没有大脑又该怎样?这就能充分的体验控制器的重要性了。

游戏截图

控制器

1、初始化(init)

初始化控制器数据,主要是设置AI对象的类型。

2、释放(release)

卸载控制器,清理所有垃圾。

3、循环逻辑处理(activate)

一些需要循环处理的逻辑放到该方法内处理。

4、停止(stop)

停止控制器,即将控制器运行标识设置为false。

5、重新开始(restart)

重新开始控制器,会将一切动作重设。

6、控制器是否在运行(is running)

获取控制器是否在运行的标记。

7、设置AI类型(set ai type)

方法并没有名字上看的那么简单,不仅设置内部AI对象的类型,而且根据制定的AI类型来初始化AI对象指针。

8、获得AI类型(get ai type)

获得当前控制器的AI类型。

9、设置AI主状态(set main state)

根据状态类型来设置AI的主状态,并且做一些逻辑操作。

10、获得AI主状态(get main state)

获得当前AI的主状态。

11、设置原点(set origin point)

设置AI的原点,作为返回用。

12、获得原点(get origin point)

获得AI触发的原点。

13、设置AI参数(set ai param)

不同的AI配置基本上已经放在了模板列表中,只要传入需要设置的模板ID即可设置AI的参数。

14、获得AI事件下一帧(get ai event next frame)

获得AI事件下一帧,即下一个定时器。

15、获得AI对象指针(get ai)

获得内部的AI对象指针。

16、获得AI的状态(get ai state)

获得AI的当前状态。

17、获得AI参数指针(get ai template param)

获得AI参数对象指针。

18、其他(other)

状态切换、事件、属性、命令等与基础接口一致,其他需要的函数可以看情况增加。

算法(递归)

递归是一种分而治之、将复杂问题转换为简单问题的求解方法。

递归算法有以下优缺点:

优点:使用递归编写的程序简洁、结构清晰,程序的正确性很容易证明,不需要了解其具体的细节。

缺点:递归函数在调用过程中,每一层调用都需要保存临时变量和返回地址、传递参数,因此递归数的执行效率低。

1、求阶乘

code.

#include <stdio.h>
#include <inttypes.h> /**
* 递归是一种分而治之、将复杂问题转换为简单问题的求解方法。递归算法有以下优缺点:
* 优点:使用递归编写的程序简洁、结构清晰,程序的正确性很容易证明,不需要了解其具体的细节。
* 缺点:递归函数在调用过程中,每一层调用都需要保存临时变量和返回地址、传递参数,因此递归
* 函数的执行效率低。
*/ /**
* 求阶乘
*/ int64_t fact(int32_t n); int32_t main(int32_t argc, char *argv[]) {
int32_t n;
printf("please input a int number: ");
scanf("%d", &n);
printf("%d!=%d\n", n ,fact(n));
} int64_t fact(int32_t n) {
int32_t x;
int64_t y;
if (n < ) { //小于0阶乘无意义
printf("param error!\n");
return -;
}
if ( == n) { //最后一次返回1
return ;
} else {
return n * fact(n - ); //递归求n的阶乘
}
}

result.

2、斐波那契数列的第N项

code.

#include <stdio.h>
#include <inttypes.h> /**
* 递归求斐波那契数列的n项
*/ int32_t fib(int32_t n); int32_t main(int32_t argc, char *argv[]) {
int32_t n;
printf("please input the number: ");
scanf("%d", &n);
printf("the %d option value is: %d\n", n, fib(n));
return ;
} int32_t fib(int32_t n) {
if ( == n) return ;
if ( == n) return ;
if (n > ) return fib(n - ) + fib(n - );
}

result.

3、十进制转二进制

code.

#include <stdio.h>
#include <inttypes.h> /**
* 十进制转二进制
*/ void dect_tobin(int32_t number); int32_t main(int32_t argc, char *argv[]) {
int32_t n;
printf("please input a int number: ");
scanf("%d", &n);
printf("the binary is: ");
dect_tobin(n);
printf("\n");
return ;
} void dect_tobin(int32_t number) {
if ( == number) return;
dect_tobin(number / );
printf("%d", number % );
}

result.

4、最数组中的最大值

code.

#include <stdio.h>
#include <inttypes.h> /**
* 递归求数组中的最大值
*/ int32_t findmax(int32_t array[], int32_t n);
void displayarray(int32_t array[], int32_t length); int32_t main(int32_t argc, char *argv[]) {
int32_t array[] = {, , , , , , , , };
int32_t length, i;
length = sizeof(array) / sizeof(array[]);
displayarray(array, length);
printf("the max value in array is: %d\n", findmax(array, length));
return ;
} int32_t findmax(int32_t array[], int32_t n) {
int32_t m;
if (n <= ) return array[];
m = findmax(array, n - );
return array[n - ] >= m ? array[n - ] : m;
} void displayarray(int32_t array[], int32_t length) {
int32_t i;
for (i = ; i < length; ++i)
printf("%3d", array[i]);
printf("\n");
}

result.

5、求两个数的最大公约数

code.

#include <stdio.h>
#include <inttypes.h> /**
* 求最大公约数
*/ int32_t gcd(int32_t m, int32_t n); int32_t main(int32_t argc, char *argv[]) {
int32_t m, n;
printf("please input two int number: ");
scanf("%d,%d", &m, &n);
printf("the max common divisor is: %d\n", gcd(m, n));
return ;
} int32_t gcd(int32_t m, int32_t n) {
if (m > n) {
return gcd(m - n, n);
} else if (m < n) {
return gcd(m, n - m);
} else {
return m;
}
}

result.

MMORPG大型游戏设计与开发(服务器 AI 控制器)的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. MMORPG大型游戏设计与开发(服务器 AI 基础接口)

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

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

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

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

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

  9. MMORPG大型游戏设计与开发(服务器 AI 逻辑设定和状态结点)

    人工智能(AI)中往往都会有这么一个问题,那就是我要做什么?我该怎么做?我需要什么?所以这里所谓的智能就是赋予AI对象的判断力,以及它根据判断得到的相应反应.就好比,你去商店买东西,钱够别人才卖给你, ...

随机推荐

  1. .Net中的RealProxy实现AOP

    序言 这个AOP要从我们公司的一个事故说起,前段时间公司的系统突然在乌云中出现,数据被泄露的一览无余,乌云上显示是SQL注入攻击.呵,多么贴近生活的一个露洞,可谓是人尽皆知啊.然而却华丽丽的给拉我们一 ...

  2. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(15)-权限管理系统准备

    系列目录 这节我们说下权限系统的特点,本系统采用的是MVC4+EF5+IOC 接口编程的架构,其中的权限树用的是DWTree,功能上做到灵活,授权操控细致,权限可以细到按钮级别 ,为了部署简单,导致设 ...

  3. 微信扫描下载提示以及js判断用户手机系统

            今天抽空也写一下这个教程吧,这里面涉及到就是一个APP的页面下载.公司有这个需求,让做一个页面,就是二维码扫描下载.一开始我做的版本是只能是通过浏览器来下载的,但是实际应用中,很多用户 ...

  4. Dojo前端开发框架与jQuery前端开发框架,对比分析总结

    最近Dojo和jQuery双双发布了最新的1.8版本,有着相同版本号的两个Javascript库也有许多核心的相同之处:相同的资源加载机制AMD.相同的选择器 引擎Sizzle等.作为业界知名的Jav ...

  5. 【目录】JUC锁框架目录

    JUC锁框架的目录整理如下: 1. [JUC]JUC锁框架综述 2. [JUC]JDK1.8源码分析之LockSupport(一) 3. [JUC]JDK1.8源码分析之AbstractQueuedS ...

  6. js的OOP继承实现

    以下视频截图均来自慕课网javascript深入浅出: 这里Student.prototype之所以使用create方法来创建,而不是直接赋Person.prototype的值,是因为如果使用赋值的话 ...

  7. (0)ASP.NET Core 简单介绍 和开发环境搭建 - ASP.NET从MVC5升级到MVC6

    ASP.NET从MVC5升级到MVC6 总目录 ASP.NET Core 首先,ASP原本只是一种技术,这种技术从上个世纪90年代就有了. Active Service Page 和 Java Ser ...

  8. openresty 前端开发入门一

    OpenResty ™ 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高的动态 ...

  9. spring源码:ApplicationContext的增强功能(li)

    ApplicationContext作为资源加载器:ApplicationContext作为事件发布者: Java原生提供了事件发布机制------EventObject对象作为发布的事件,Event ...

  10. Scala Macros - 元编程 Metaprogramming with Def Macros

    Scala Macros对scala函数库编程人员来说是一项不可或缺的编程工具,可以通过它来解决一些用普通编程或者类层次编程(type level programming)都无法解决的问题,这是因为S ...