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需要有一个统一 ...
随机推荐
- 你真的会玩SQL吗?表表达式,排名函数
你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...
- 由css reset想到的深入理解margin及em的含义
由css reset想到的深入理解margin及em的含义 原文地址:http://www.ymblog.net/content_189.html 经常看到这样语句,*{ margin:0px;pad ...
- ASP.NET Core Kestrel部署HTTPS
ASP.NET Core配置 Kestrel部署HTTPS.现在大部分网站已经部署HTTPS,大家对于安全越来越重视. 今天简单介绍一下ASP.NET Core 部署HTTPS,直接通过配置Kestr ...
- Java判断字符串是否是数值
判断一个字符串是否是数值,可以用正则表达式来判断.更简单的方法是把字符串转换成Float或者Double,然后捕捉NumberFormatException错误,如果有错误,就说明不是一个数值,如果没 ...
- add-two-numbers
leetcode开篇~ 问题描述: You are given two linked lists representing two non-negative numbers. The digits a ...
- openresty 前端开发入门一
OpenResty ™ 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库.第三方模块以及大多数的依赖项.用于方便地搭建能够处理超高并发.扩展性极高的动态 ...
- 《连载 | 物联网框架ServerSuperIO教程》- 5.轮询通讯模式开发及注意事项。附:网友制作的类库说明(CHM)
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- push方法的兼容性问题
在IE8及以下中,不支持aplly方法中的第二个参数是 伪数组 需要对push方法进行封装. 将 push 的判断,放入一个沙箱中: 好处:在页面加载的时候就会执行这段代码,保证了代码只会检测一次 以 ...
- HTTP 错误 404.3 - Not Found 由于扩展配置问题而无法提供您请求的页面。如果该页面是脚本 ,请添加处理程序。如果下载文件,请添加 MIME 映射。 IIS站点中添加WCF项目后浏览网站报错解决方法。
vs2013 wcf服务 windows10 家庭中文版 上图中的红色没有出现就按照下面的方法做: 按照上图所示勾选. 刷新上图中你的网站,查看上图右边的内容是否出现,如果出现,再次重新浏览网站,看一 ...
- 原创炫酷代码公开——连接董铂然github
公开了github部分项目(均为原创)更多代码请看https://github.com/dsxNiubility SXWaveAnimate Wonderful SXPhotoShow SXNews ...