人工智能(AI)中往往都会有这么一个问题,那就是我要做什么?我该怎么做?我需要什么?所以这里所谓的智能就是赋予AI对象的判断力,以及它根据判断得到的相应反应。就好比,你去商店买东西,钱够别人才卖给你,不够不可能卖你,这里就会触发了两种结果,如果你要强买的话,那么店员就可能产生相应的措施了。其实这里的店员,就相当于我们所谓的人工智能,不过店员的反应和动作是根据他自身思考产生的,人工智能也有这个思考的过程,只不过比店员想的少很多。这个思考的过程,也就是逻辑设定与处理的过程,那么什么又是状态结点呢?

游戏截图

逻辑设定(logic)

1、内部接口

创建(setup)

逻辑设定初始化,初始化对应的类型,根据传入的脚本ID中的创建方法。

获得动作(get action)

根据动作的ID查找对应的动作指针,注意这里的动作列表是逻辑设定对象中的数据。

获得状态(get state)

根据状态查找对象状态表中对应的状态数据指针。

获得初始化状态(get init state)

获得初始化设置的状态。

获得脚本ID(get script id)

获得当前的脚本ID。

调用动作(call action)

根据角色的对象指针,以及动作处理,调用脚本相应的方法,并返回下一个动作。

2、lua接口

创建动作(new action)

在lua中传入两个参数:动作ID和动作的键(回调),根据这两个参数将动作加入到管理器中。

增加状态(new state)

从lua中传入一个状态,并加入到状态表中。

设置初始化状态(set init state)

脚本中传入一个状态,并将该状态设置为初始状态。

注册用户动作(register user action)

两个参数:动作回调的key,动作回调的方法字符串,并将这两个数据加入到用户动作表中。

状态结点(state)

1、内部接口

获得事件回调(get event handler)

输出状态信息(print state info)

2、lua接口

处理事件(handle event)

算法(矩阵算法)

反螺旋矩阵

code.

#include <stdio.h>
#include <stdint.h> /**
* 反螺旋矩阵
* 例如:5x5的反螺旋矩阵
*
* - 0 1 2 3 4 ---- 作为列序号
* ————————————————————
* 0 | 1 16 15 14 13
* 1 | 2 17 24 23 12
* 2 | 3 18 25 22 11
* 3 | 4 19 20 21 10
* 4 | 5 6 7 8 9
* |
* |
* 作为行序号
*
* 根据行与列,可以将这样的矩阵视作array[5][5]的数组
* 首先我们要知道反螺旋的规则,就是从某一点开始以1开始逆时针方向依次增加1
* 其次我们都知道螺旋,分为一圈圈的,那么一个螺旋就有其圈数,与圆形不同的是矩阵
* 分为4个方向,分别为上、左、下、右(组成一圈的数据)
* 再来从数据递增的方向分析序号的规则
* 左边:行号依次递增为1,列号不变
* 下边:列号依次递增为1,行号不变
* 右边:行号依次递减为1,列号不变
* 上边:列号依次递减为1,行号不变
* 如果定义行号为i,列号为j,圈数为k的话,那么这三个数据在每圈是不是都有相似的规则呢?
* 首先我们需要确定圈数,其与矩阵的大小有关,即如果是NxN的矩阵的话,圈数m=(N + 1) / 2
* 有了圈数,我们才好确定我们需要几次循环来组成每圈的数据
* 我们将最外层的一圈的圈数设置为0,让其循环到最后一圈即k - 1为止
* 假设数据的变量为value,从1开始
* 数据从1开始从最外层一次加1,并依次从左、下、右、上形成圈的数据,到最后一层为止
* 左边的数据规律:行的序号从圈数k开始,依次累加1,列号等于圈数k
* for (i = k; i < n - k; ++i) array[i][k] = value++;
* 下边的数据规律:列号从圈数k+1开始,循环到小于数据n - k为止,其行数为n - k - 1
* for (j = k + 1; j < n - k; ++j) array[n - k - 1][j] = value++;
* 左边的数据规律:行号从n - k - 2开始,依次循环到不小于k为止,其列数为n - k - 1
* for (i = n - k - 2; i <= k; --i) array[i][n - k - 1] = value++;
* 上边的数据规律:列号从n - k - 2开始,依次循环到k,其行数为k
* for (j = n - k - 2; j > k; --j) array[k][j] = value++;
*/ #define ARRAY_MAX 100 //最大支持的矩阵数 //生成矩阵
void generate_array(int32_t array[ARRAY_MAX][ARRAY_MAX], int32_t length);
//打印矩阵
void display_array(int32_t array[ARRAY_MAX][ARRAY_MAX], int32_t length); void generate_array(int32_t array[ARRAY_MAX][ARRAY_MAX], int32_t length) {
int32_t i, j, k;
int32_t value, circle_count;
value = ;
int32_t &n = length;
circle_count = (n + ) / ;
for (k = ; k < circle_count; ++k) {
for (i = k; i < n - k; ++i) array[i][k] = value++; //left
for (j = k + ; j < n - k; ++j) array[n - k - ][j] = value++; //bottom
for (i = n - k - ; i >= k; --i) array[i][n - k - ] = value++; //right
for (j = n - k - ; j > k; --j) array[k][j] = value++; //top
}
} void display_array(int32_t array[ARRAY_MAX][ARRAY_MAX], int32_t length) {
int32_t i, j;
for (i = ; i < length; ++i) {
for (j = ; j < length; ++j) printf("%4d", array[i][j]);
printf("\n");
}
}; int32_t main(int32_t argc, char *argv[]) {
int32_t n = ;
int32_t array[ARRAY_MAX][ARRAY_MAX];
while (n <= || n > ARRAY_MAX) {
printf("please input a unsigned int number(less than 0 and not above %d): ",
ARRAY_MAX);
scanf("%d", &n);
}
generate_array(array, n);
printf("the anti spiral array is: \n");
display_array(array, n);
return ;
}

result.

成员招募(长期有效)

如果你也对开源知识比较感兴趣,如果也对网络应用或者网络游戏感兴趣,如果你也对该框架感兴趣,你可以加入我们的QQ群(348477824)。

欢迎大家进群相互交流学习,同时也欢迎各位朋友对该框架供出自己的一份心力。

plain framework 商业版核心成员招募

请加入上面的框架QQ群,商业版核心成员的招募资格和形式将以博客或者文档等的形式公布(14年内确认人选)。

MMORPG大型游戏设计与开发(服务器 AI 逻辑设定和状态结点)的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Webstorm编译TypeScript

    下载webstorm 下载node.js编译器npm   Webstorm的安装很简单.但如果没有Java For Mac 环境打开Webstorm时会有提示,点击提示会跳转下载链接,下载安装就好. ...

  2. MySQL笔记---视图,存储过程, 触发器的使用入门

    大二学数据库的时候,只是隐约听到老师提起过视图啊,存储过程啊,触发器啊什么的,但只是淡淡的记住了名字,后来自己做些小项目,小程序,也没有用上过,都只是简单的建表,关联表之类的,导致我对这些东西的理解只 ...

  3. 你真的会玩SQL吗?实用函数方法汇总

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  4. 利用Vue.js实现拼图游戏

    之前写过一篇<基于Vue.js的表格分页组件>的文章,主要介绍了Vue组件的编写方法,有兴趣的可以访问这里进行阅读:http://www.cnblogs.com/luozhihao/p/5 ...

  5. WPF弹出带蒙板的消息框

    效果图 思路 拿到父级窗体的内容,放入一个容器里,再在容器里放入一个半透明层.将整个容器赋给父级窗体的内容. 关闭时反向操作. 代码 消息窗弹出时 /// <summary> /// 弹出 ...

  6. c#生成静态html文件,封装类

    由于这段时间比较轻松,于是想到很多的企业网站,新闻网站需要将页面静态化,于是写了个封装类来实现静态文件的生成,思路比较简单,但未完善,网友可根据自己的思路将此类扩展,运用了简单工厂模式(本来刚开始看设 ...

  7. Maven远程仓库的配置

    在很多情况下,默认的中央仓库无法满足项目的需求,可能项目需要的构件存在于另外一个远程仓库中,如JBoss Maven仓库.这时,可以在POM中配置该仓库,见代码如下: <!-- 远程仓库的配置 ...

  8. SharePoint文档库文件夹特殊字符转义

    当我们在SharePoint网站文档库中新建文件夹时包含了~ " # % & * : < > ? / \ { | }字符时(一共15个), 或者以.开头或者结束,或者包含 ...

  9. Atitit ati licenseService    设计原理

    Atitit ati licenseService    设计原理 C:\0workspace\AtiPlatf\src_atibrow\com\attilax\license\LicenseX.ja ...

  10. 函数式Android编程(II):Kotlin语言的集合操作

    原文标题:Functional Android (II): Collection operations in Kotlin 原文链接:http://antonioleiva.com/collectio ...