MMORPG大型游戏设计与开发(服务器 AI 逻辑设定和状态结点)
人工智能(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 逻辑设定和状态结点)的更多相关文章
- MMORPG大型游戏设计与开发(服务器 AI 概述)
游戏世界中我们拥有许多对象,常见的就是角色自身以及怪物和NPC,我们可以见到怪物和NPC拥有许多的行为,比如说怪物常常见到敌对的玩家就会攻击一样,又如一些NPC来游戏世界中走来走去,又有些怪物和NPC ...
- MMORPG大型游戏设计与开发(服务器 游戏场景 核心详述)
核心这个词来的是多么的高深,可能我们也因为这个字眼望而却步,也就很难去掌握这部分的知识.之所以将核心放在最前面讲解,也可以看出它真的很重要,希望朋友们不会错过这个一直以来让大家不熟悉的知识,同我一起进 ...
- MMORPG大型游戏设计与开发(游戏服务器 游戏场景 概述 updated)
我们在玩游戏的时候,我们进入游戏后第一眼往往都是看到游戏世界中的场景,当然除了个别例外,因为那些游戏将游戏场景隐藏了起来,如文字游戏中的地点一样.既然我们接触了游戏世界的核心,那么作为核心的场景又包括 ...
- MMORPG大型游戏设计与开发(概述)updated
1.定义 MMORPG,是英文Massive(或Massively)Multiplayer Online Role-PlayingGame的缩写,即大型多人在线角色扮演游戏. 2.技术与知识 在这系列 ...
- MMORPG大型游戏设计与开发(UI SYSTEM SHOW)
接下来一段时间,这些文件可能不再更新,期间我会学习和掌握一些前端知识.虽然我非常欣赏剑侠网络版叁和九阴真经的画面,但是那是一个庞大的游戏引擎,一般人是无法窥伺的,除非你是天才而且要拥有机器毫无中断的毅 ...
- MMORPG大型游戏设计与开发(客户端架构 part8 of vegine)
脚本模块是游戏设计中争论比较多的话题,那是因为作为脚本本身所带来的利弊.其实这都无关紧要,取舍是人必须学会的一项技能,如果你不会取舍那么就让趋势给你一个满意的答复.自从魔兽世界以及传奇(世界)问世以来 ...
- MMORPG大型游戏设计与开发(服务器 AI 基础接口)
一个模块都往往需要统一的接口支持,特别是对于非常大型的模块,基础结构的统一性非常重要,它往往决定了其扩展对象的通用性.昨天说了AI的基本概述以及组成,作为与场景模块中核心一样重要的地位,基础部分的设计 ...
- MMORPG大型游戏设计与开发(服务器 AI 事件)
AI中的事件与场景中的事件大致相同,都是由特定的条件触发的.只不过AI的事件与其他事件不同的是,对于AI的事件往往是根据不同的AI类型,和动态的触发条件下才产生的.其实不管AI多么智能,它对应的触发条 ...
- MMORPG大型游戏设计与开发(服务器 AI 控制器)
上一篇我们说了基础接口的组成,想必大家对AI中的基础方法有了一定的了解,而基础接口只能一个通用的,要实现不同的类别还需子类中实现,这就形成了玩家.主动.被动.木桩这些类型.不同类型的AI需要有一个统一 ...
随机推荐
- 在v-for中利用index来对第一项添加class(vue2.0)
<li v-for="(el,index) in event" v-bind:class="{ 'm-swipe-active': !index}"> ...
- ASP.NET MVC系列:Area
1. Area简介 ASP.NET MVC Area机制构建项目,可以将相对独立的功能模块切割划分,降低项目的耦合度. 2. Area设置Routing 新建Admin Area后,自动创建Admin ...
- 【Win 10 应用开发】文件读写的三种方案
本文老周就跟伙伴们探讨一下关于文件读写的方法.总得来说嘛,有三种方案可以用,而且每种方案都各有特色,也说不上哪种较好.反正你得记住老祖宗留给我们的大智慧——事无定法,灵活运用者为上. OK,咱们开始吧 ...
- Kafka 文档引言
原文地址:https://kafka.apache.org/documentation.html#semantics 1.开始 1.1 引言 Kafka是一个分布式,分区队列,冗余备份的消息存储服务. ...
- .NET Core采用的全新配置系统[6]: 深入了解三种针对文件(JSON、XML与INI)的配置源
物理文件是我们最常用到的原始配置的载体,最佳的配置文件格式主要由三种,它们分别是JSON.XML和INI,对应的配置源类型分别是JsonConfigurationSource.XmlConfigura ...
- 【NLP】揭秘马尔可夫模型神秘面纱系列文章(五)
向前向后算法解决隐马尔可夫模型机器学习问题 作者:白宁超 2016年7月12日14:28:10 摘要:最早接触马尔可夫模型的定义源于吴军先生<数学之美>一书,起初觉得深奥难懂且无什么用场. ...
- SQL实用
实用的SQL语句 行列互转 create table test(id int,name varchar(20),quarter int,profile int) insert into test ...
- Apworks框架实战(六):使用基于Entity Framework的仓储基础结构
在前面的章节中,我们已经设计了一个简单的领域模型,接下来我们希望能够实现领域模型的持久化及查询.在Apworks中,实现了面向Entity Framework.NHibernate以及MongoDB的 ...
- Design Patterns Simplified - Part 3 (Simple Factory)【设计模式简述--第三部分(简单工厂)】
原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part3-factory/ Design ...
- CSS3鼠标滑过图标放大以及旋转
本人是HTML5-CSS3初学者,这次分享一款纯CSS3实现的图片动画,当鼠标滑过小图标时,图标会放大,同时图标会出现旋转的动画效果.我们在很多个性化个人博客中经常看到鼠标滑过人物头像后头像图片旋转就 ...