上一篇咱们说了基础接口的组成,想必你们对AI中的基础方法有了必定的了解,而基础接口只能一个通用的,要实现不一样的类别还需子类中实现,这就造成了玩家、主动、被动、木桩这些类型。不一样类型的AI须要有一个统一的接口来调用与控制,这就是咱们今天要进一步了解的AI控制器,试想一下一部机器若是没有控制器会怎样,一我的若是没有大脑又该怎样?这就能充分的体验控制器的重要性了。算法
初始化控制器数据,主要是设置AI对象的类型。数组
卸载控制器,清理全部垃圾。函数
一些须要循环处理的逻辑放到该方法内处理。spa
中止控制器,即将控制器运行标识设置为false。3d
从新开始控制器,会将一切动做重设。指针
获取控制器是否在运行的标记。rest
方法并无名字上看的那么简单,不只设置内部AI对象的类型,并且根据制定的AI类型来初始化AI对象指针。code
得到当前控制器的AI类型。对象
根据状态类型来设置AI的主状态,而且作一些逻辑操做。blog
得到当前AI的主状态。
设置AI的原点,做为返回用。
得到AI触发的原点。
不一样的AI配置基本上已经放在了模板列表中,只要传入须要设置的模板ID便可设置AI的参数。
得到AI事件下一帧,即下一个定时器。
得到内部的AI对象指针。
得到AI的当前状态。
得到AI参数对象指针。
状态切换、事件、属性、命令等与基础接口一致,其余须要的函数能够看状况增长。
递归是一种分而治之、将复杂问题转换为简单问题的求解方法。
递归算法有如下优缺点:
优势:使用递归编写的程序简洁、结构清晰,程序的正确性很容易证实,不须要了解其具体的细节。
缺点:递归函数在调用过程当中,每一层调用都须要保存临时变量和返回地址、传递参数,所以递归数的执行效率低。
#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) { //小于0阶乘无心义 printf("param error!\n"); return -1; } if (0 == n) { //最后一次返回1 return 1; } else { return n * fact(n - 1); //递归求n的阶乘 } }
#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 0; } int32_t fib(int32_t n) { if (0 == n) return 0; if (1 == n) return 1; if (n > 1) return fib(n - 1) + fib(n - 2); }
#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 0; } void dect_tobin(int32_t number) { if (0 == number) return; dect_tobin(number / 2); printf("%d", number % 2); }
#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[] = {23, 56, 35, 67, 86, 28, 1, 27, 11}; int32_t length, i; length = sizeof(array) / sizeof(array[0]); displayarray(array, length); printf("the max value in array is: %d\n", findmax(array, length)); return 0; } int32_t findmax(int32_t array[], int32_t n) { int32_t m; if (n <= 1) return array[0]; m = findmax(array, n - 1); return array[n - 1] >= m ? array[n - 1] : m; } void displayarray(int32_t array[], int32_t length) { int32_t i; for (i = 0; i < length; ++i) printf("%3d", array[i]); printf("\n"); }
#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 0; } 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; } }